공부/EFK

Kibana basePath 설정 (Configuration 설정)

토고미 2021. 3. 11. 14:48

kibana는 최초 실행 시 /usr/share/kibana/config 경로에 있는 kibana.yml 파일을 읽어서 초기 설정을 수행한다.

 

kibana.yml에 들어갈 수 있는 설정 값들은 아래 링크의 공식문서에서 확인할 수 있다.

www.elastic.co/guide/en/kibana/current/settings.html

 

Configure Kibana | Kibana Guide [7.11] | Elastic

To reload the logging settings, send a SIGHUP signal to Kibana.

www.elastic.co

사용자가 따로 만들지 않아도 kibana가 자동적으로 아래와 같이 kibana.yml 파일을 만든다. (7.2.0 버전 기준)

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]

 

그럼, 이 kibana.yml에 원하는 설정값을 추가하는 법을 알아보자.

나는 base path의 값을 설정할 것이다.

 

방법은 간단하다.

원하는 설정값을 configmap으로 만든 뒤, 그 configmap을 해당 경로에 마운트 시키면 된다.

 

우선 configmap을 작성해주자.

$ vi kibana-config.yaml
kind: ConfigMap
apiVersion: v1
data:
  kibana.yml: |
    server.name: kibana
    server.host: "0"
    server.basePath: "/api/kibana"
    server.rewriteBasePath: true
    elasticsearch.hosts: [ "http://elasticsearch:9200" ]
metadata:
  name: kibana-config

참고로 server.basePath 사용시, server.rewriteBasePath=true 도 추가해줘야 한다.

 

 

그 다음, 해당 configmap을 마운트하도록 kibana도 수정한다.

$ vi kibana.yaml
apiVersion: v1
kind: Service
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  type: NodePort
  ports:
  - port: 5601
    targetPort: 5601
  selector:
    app: kibana
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
  labels:
    app: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.2.0
        env:
          - name: ELASTICSEARCH_URL
            value: http://elasticsearch.default.svc.cluster.local:9200
        ports:
        - containerPort: 5601
        volumeMounts:
        - mountPath: /usr/share/kibana/config/kibana.yml
          name: config
          subPath: kibana.yml
      volumes:
      - name: config
        configMap:
          name: kibana-config

맨 아랫부분에 있는 volumeMounts와 volumes가 그 부분이다.

 

그럼 yaml파일을 적용시키고 확인해보자.

$ kubectl apply -f kibana-config.yaml
$ kubectl apply -f kibana.yaml

 

nodeport타입의 서비스를 붙여서 실행시켰으므로, 해당 노드의 IP:Port로 접속을 시도해보자

 

 

그냥 IP:Port만 한 경우

원래 들어가던 방식대로 IP:Port만 입력하면, Not Found가 뜬다.

 

하지만 설정한 base path 경로를 뒤에 붙이면,

 

 

뒤에 base path를 붙인 경우

 

성공적으로 들어가진다.

 

 

다만 basePath를 변경한 경우 주의할 점이 있다.

curl을 날리는 등, kibana의 주소로 무언가를 하는 작업을 하려면 반드시 주소뒤에 basePath도 같이 적어주어야 한다.