본문 바로가기

인프라,데이터/Elasticsearch, Logstash, Kibana

Metricbeat로 Logstash 모니터링하기

Kafka -> Logstash -> ES 의 데이터 파이프라인에서 Kafka lag이 심하게 생기는 현상이 발생했다.

어느 곳이 문젠지 알아보려면 Kafka, Logstash, ES 각각의 모니터링 지표가 필요하다. 

 

ES는 Kibana에서 모니터링을 활성화할 수 있는데, Logstash는 데이터독 agent로 연결하려다가 잘 안되어서 ES로 모니터링을 보내기로 했다.

참고 : https://www.elastic.co/guide/en/logstash/current/monitoring-with-metricbeat.html

 

Collect Logstash monitoring data with Metricbeat | Logstash Reference [8.6] | Elastic

In production environments, we strongly recommend using a separate cluster (referred to as the monitoring cluster) to store the data. Using a separate monitoring cluster prevents production cluster outages from impacting your ability to access your monitor

www.elastic.co

 

Logstash와 ES 다 쿠버네티스로 띄우는데,

Logstash에 Sidecar로 Metricbeat를 띄운다.

Metricbeat에서 logstash-xpack 모듈을 활성화시켜주어야 하는데, 이걸 Kubernetes Deployment의 command로 하면 command 완료 시 컨테이너가 종료되어버리므로..  도커 이미지를 새로 만들어주어 도커 이미지 자체에서 명령을 실행하게 한다.

FROM docker.elastic.co/beats/metricbeat-oss:8.4.2
USER root
RUN chown -R metricbeat:metricbeat /usr/share/metricbeat

# switch user as 'metricbeat'
USER metricbeat
RUN metricbeat modules enable logstash-xpack

 

그리고 이 이미지로 컨테이너를 만든다.

Metricbeat 자체의 설정은 

  metricbeat.yml: |-
    metricbeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false
    
    processors:
      - add_cloud_metadata: ~
      - add_docker_metadata: ~

    output.elasticsearch:
      # Array of hosts to connect to.
      hosts: ["host:port"]
      protocol: "https"
      username: "id"
      password: "password"

기존 metricbeat.yml을 그대로 써줘야 오류가 안 난다.. 

 

이렇게 설정하면 metricbeat가 같은 pod 내의 로그스태시와 localhost:9600으로 통신하며 로그스태시의 메트릭 데이터를 수집해 엘라스틱서치로 보낸다.

 

ES에서 .monitoring-mb 로 시작하는 인덱스의 Index template이 어떻게 되어있냐에 따라 해당 메트릭 데이터가 데이터 스트림으로 쌓일지, 그냥 인덱스로 쌓일지가 결정된다.

8개의 로그스태시를 모니터링하는데 인덱스에 하루에 쌓이는 데이터가 300mb가 채 안 되어서, 용량상으로도 만족스럽다.

엘라스틱서치를 그냥 self-monitoring 하면 노드 1개당 1기가 정도의 데이터가 하루에 쌓인다...^^