Project/인턴_Project

4 - Elasticsearch, Kibana, Logstash 설치하기 (Minikube, ELK)

chea-young

Konga 설치한 것에 이어서 Kong에 API를 날렸을 때 log 데이터를 DB에 저장하기 위해 Elasticsearch, Kibana, Logstash를 Minikube에 설치하는 과정을 작성하겠습니다.Kong 자체 DB인 postgresql과 mysql이나 postgresql을 다른 pod로 생성해서 kong plugin을 이용해서 해보았지만 TCP 연결이 계속해서 실패한다는 log가 떠서 해당 방법으로 log 데이터를 저장하도록 선택하게 되었습니다.

- 설치 시 사용하는 .bly URL은 빠르게 설치하기 위해 저의 Github 코드를 변환시켜서 이용하는 것입니다.


가상환경 스펙
- Red Hat Enterprise Linux8
- 스펙: 8 core/15Gi Ram

설치버전
- Minikube : 1.22.3 (21.12.16 기준 최신 버전)
- Kong : 2.5 (21.12.16 기준 최신 버전)
- Postgres : 9.5
- Pantsel/konga: Latest
- Elasticsearch: 7.8.0
- Kibana: 7.8.0
- Logstash: 7.8.0

설치 순서
1. Elasticsearch 설치하기
2. Kibana 설치하기
3. Logstash 설치하기
4. 전체 과정 설명


1. Elasticsearch 설치하기

Elasticsearch는 루씬 기반의 검색 엔진으로 HTTP 웹 인터페이스와 스키마에서 자유로운 JSON 문서와 함께 분산 멀티테넌트 지원 전문 검색 엔진을 제공합니다. 이때문에 연결할 때 Mysql과 같은 DB와 다르게 TCP, UDP가 아닌 HTTP로 연결해서 이용됩니다.
해당 문서에서 설치하는 Elasticsearch 서비스는 pv, pvc를 함께 설치해서 이용합니다.

1. pv, pvc 설치

1
kubectl apply -f https://bit.ly/pv-pvc-elasticsearch -n kong
 


2. Elasticsearch service와 deployment 설치

1
kubectl apply -f https://bit.ly/elasticsearch-k8s -n kong
 


3. Elasticsearch service와 deployment 설치 확인
설치된 deployment, service, pod 확인
- 해당 문서에서는 Elasticsearch의 포트가 `30482` 입니다. 이 포트 번호는 계속 사용되기 때문에 기억해주세요.


4. Elasticsearch 연결확인

1
curl -i [vm ip]:[elasticsearch-svc 포트]
 

여기서 말하는 vm ip는 minikube가 설치된 가상머신의 ip 주소르 말합니다. 위와 같이 입력했을 때 다음과 같은 출력이 나온다면 올바르게 연결된 것입니다. 만약에 다음과 같이 뜨지 않는다면 elasticsearch service나 deployment의 log를 확인해보세요!


2. Kibana 설치하기

Kibana는 Elasticsearch를 위한 독점 데이터 시각화 대시보드 소프트웨어입니다.

1. Kibana service와 deployment 설치하기

1
2
3
kubectl create deployment kib-manual --image kibana:7.8.0 -n kong  # kibana deployment 생성
kubectl set env deployments/kib-manual -n kong ELASTICSEARCH_HOSTS=http://$(vm ip):30482 # deployment에 elasticsearch 연결
kubectl expose deployment kib-manual --type NodePort --port 5601 -n kong # kibana service 생성
 


2. Kibana 설치확인
설치된 deployment, service, pod 확인
- 해당 문서에서는 Kibana의 포트가 `31935` 입니다. 이 포트 번호는 계속 사용되기 때문에 기억해주세요.

'[vm ip]:[kibana service 포트] 로 접속해보면 다음과 같이 Kibana 화면이 뜨면 올바르게 연결 후 설치 된 것입니다.


3. Logstash 설치하기

Logstash는 다양한 소스로부터 데이터를 수집하고 곧바로 전환하여 원하는 대상에 전송할 수 있도록 하는 경량의 오픈 소스 서버측 데이터 처리 파이프라인입니다.

1.logstash.conf 작성
logstash..conf를 통해 어느 곳에서 입력을 받고 output을 어디서 받을지 해당 문서에서는 사용하지 않았지만 filter 기능을 통해 받고 싶은 데이터만을 받도록 설정할 수 있습니다.
- output의 index 부분이 index가 되어 kibana에서 데이터가 쌓이게 됩니다.
- "http://[vm ip]:[elasticsearch service port]" 부분의 예시) "http://192.168.50.160:30560"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
input {
  http {
    host => "0.0.0.0"
    port => "5044"
  }
}
 
output {
  elasticsearch {
    hosts => ["http://[vm ip]:[elasticsearch service port]"]
    index => "kong-log-%{+YYYY.MM.dd}"
  }
  stdout {
    codec => rubydebug
  }
}
 
 


2. Logstash configmap, service 그리고 deployment 생성
configmap을 생성할 때 ./logstash.conf가 존재하지 않다면 에러가 날 수 있습니다.

1
2
3
kubectl create configmap log-manual-pipeline --from-file ./logstash.conf -n kong # configmap 생성
kubectl apply -f https://bit.ly/logstash-k8s -n kong # deployment 생성
kubectl expose deployment log-manual --type NodePort --port 5044 -n kong # service 생성
 


3. Logstash configmap, service 그리고 deployment 설치 확인

3. 전체 과정 설명

Kong, Logstash, Elasticsearch, Kibana를 연결한 상태에서 Kong에 추가한 라우트로 curl을 보내면 log datalogstash에서 로그를 수집하여 ElasticSearch에 저장 된 것을 Kibana를 통해 볼 수 있게 되는 것입니다.

참고 사이트
- https://ko.wikipedia.org/wiki/%EC%9D%BC%EB%9E%98%EC%8A%A4%ED%8B%B1%EC%84%9C%EC%B9%98
- https://en.wikipedia.org/wiki/Kibana
- https://aws.amazon.com/ko/opensearch-service/the-elk-stack/logstash/


이렇게 ELK stack 설치를 완료했습니다.
다음에는 Kibana와 Kong 설정을 해서 통신 테스트를 했을 때 log data가 저장되는 것을 보여드리겠습니다!!