본문 바로가기

윈도우 개발환경

엘라스틱서치(ELK)로 만드는 모니터링 시스템; 2. Metricbeat- 시스템관리

엘라스틱서치(ELK)로 만드는 모니터링 시스템

1. Elasticsearch, Kibana

2. Metricbeat - 시스템관리

3. Filebeat - App Log수집

4. Logstash - 통합, 운영

 

2. Beats; 경량 데이터 수집기

Elasticsearch와 Kibana를 체험했으면 이제 실제 모니터링 데이터를 넣을 차례이다. ELK에서 모니터링 정보는 Beats를 통해 쉽게 수집할 수 있고, Agent나 Logstash를 이용해 수집하는 것도 가능하다. Logstash는 Beats로 수집된 정보를 변환하거나 데이터 버퍼를 사용해 부하를 조절할 수 있어 Beats와 함께 사용하기도 한다. 최근에는 여러 개의 Beats를 쓰기보다 Elastic Agent를 각각 모니터링 대상 프로그램에 설치하는 것을 권하고 있지만, Docker나 쿠버네티스 환경에서는 불편한 점이 있다. 어떤 방식을 사용할지 고민된다면, 아래의 Elastic에서 제시한 선택 결정 방법을 참고해도 좋을 것 같다.

 

출처) elastic.co/guide

복잡한 메트릭 정보 수집을 위해서는 보다 정교한 수집 Agent가 사용할 수도 있지만, 대부분 Beats로 수집하는 데이터로도 충분히 모니터링을 수행할 수 있고, 문제가 발생했을 때 경고/알람도 보낼 수 있다.

 

Beats에는 아래와 같이

 

  • Filebeat: Log나 파일 형태로 전달되는 정보를 수집하는 데 사용
  • Metricbeat: Linux, Windows, Docker, Kubernetes, PostgreSQL, 등 수십 가지의 시스템 정보를 수집하는 데 사용
  • Packetbeat: 애플리케이션과 HTTP 간의 통신 시간, 지연, 오류 등 네트워크와 관련된 정보를 수집하는 데 사용
  • Winlogbeat: 로그인 실패, 파일 시스템 마운트와 같은 윈도우 OS의 이벤트를 수집하는 데 사용
  • Auditbeat: Linux OS의 audit정보를 수집하는 데 사용
  • Hearbeat: 모니터링 대상 시스템의 정상 가동시간을 수집하는 데 사용

6개의 beats가 있는데, 대부분 사용법은 유사하기 때문에, Metricbeat로 지난번에 설치한 PostgreSQL을 모니터링하는 방법을 기록해 보기로 했다.

a. Metricbeat로 PostgreSQL 모니터링

  • Metricbeat Docker image를 먼저 내려받는다. 바로 run으로 가도 상관없다.
docker pull docker.elastic.co/beats/metricbeat:7.17.24

 

  • Metricbeat로 모니터링을 시작하기 전에, 먼저 Elasticsearch에 스키마를 만들고, Kibana에 Dashboard 등 템플릿 화면설정을 올린다.

이 작업은 모니터링을 수행하기 전에 Elasticsearch와 Kibana에 필요한 메타데이터를 설정하는 작업이다. 여기서는

 

  1. --net옵션: 앞에서 만든 docker network을 설정하면 name을 사용해서 쉽게 연결할 수 있다.

이 필요하고, metricbeat를 사용한 설정(setup) 작업에서는

 

  1. -E setup.kibana.host=Kibana주소:포트
  2. -E output.elasticsearch.hosts=여러 개의 node이면 모두 Elasticsearch주소:포트

를 지정해야 정상적으로 동작한다.

 

docker run --net elk-net docker.elastic.co/beats/metricbeat:7.17.23 setup -E setup.kibana.host=kibana:5601 -E output.elasticsearch.hosts=["elasticsearch:9200"]

 

실행이 끝나고 Kibana Dashboard에 들어가 보면, 아래와 같이 데이터는 없지만 각종 Dashboard 템플릿 화면이 만들어진 것을 확인해 볼 수 있다.

 

 

  • Metricbeat실행에 필요한 Docker용 설정파일을 내려받는다.
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.17/deploy/docker/metricbeat.docker.yml

 

파일을 열고 module부분에서 docker를 빼고 아래와 같이 postgresql 모니터링에 필요한 내용으로 바꾼다. Metricbeat는 여러 개의 module을 동시에 모니터링하는 것도 가능하기 때문에 Docker도 같이 모니터링하고 싶다면, 삭제하지 않고 postgresql부분을 추가하면 된다.

 

...
metricbeat.modules:
- module: postgresql
  metricsets:
    - database
    - bgwriter
    - activity
  period: 10s
  hosts: ["postgres://192.168.59.102:5432/postgres?sslmode=disable"]
  username: postgres
  password: password
  enabled: true
...

 

  • module설정에 필요한 정보는 metricbeat이미지 내부에서 얻을 수 있다.

Metricbeat이미지의 modlue설정파일을 보기 위해서는 Docker image를 아래와 같이 실행한 뒤

 

docker run --rm -it docker.elastic.co/beats/metricbeat:7.17.23 /bin/bash

 

module.d의 파일목록을 나열하면

 

ls /usr/share/metricbeat/modules.d/

 

모니터링을 할 수 있는 시스템 설정파일들이 보인다.

 

모니터링하고 싶은 대상의 파일을 열고 module부분을 복사한 다음 자신의 시스템에 맞게 내용을 수정하면 모니터링할 수 있다. 만일, Docker를 사용하지 않고 설치를 하였다면

 

metricbeat modules enable apache mysql

 

형식으로 module을 enable 할 수 있지만, Docker를 사용하면 설정파일에 지정해 줘야 한다.

 

  • 수정한 YAML파일을 사용해서 Metricbeat를 실행한다.
docker run -it --net elk-net --name=metricbeat -v /home/docker/metricbeat.docker.yml:/usr/share/metricbeat/metricbeat.yml:ro docker.elastic.co/beats/metricbeat:7.17.23

 

만일 실행하면서 설정파일 권한에 대한 문제가 발생하면 " --strict.perms=false"옵션을 위 명령의 마지막에 추가해서 실행하면 된다. 실행이 정상적으로 되면, PostgreSQL를 사용해서 조회하는 작업을 몇 번 해보면, 모니터링 데이터가 Dashboard에 그래프로 그려지는 것을 확인할 수 있다.

 

Dashboard는 미리 설정된 템플릿이기 때문에, 환경에 맞춰 변경해서 사용하면 된다. PostgreSQL의 경우 수집 데이터에 statement가 빠져 있기 때문에 일부 그래프에 데이터가 빠진 부분이 생겼다.