youngseo's TECH blog

[ELK] Docker 성능 모니터링: Metricbeat와 ELK 스택 본문

INFRA

[ELK] Docker 성능 모니터링: Metricbeat와 ELK 스택

jeonyoungseo 2023. 9. 11. 18:33

해당 작업은 elastic metricbeat docker moduleDocker Performance Monitoring with Metricbeat and ELK Stack (사진 출처) 을 참고하여 작업하였습니다.

개요

Linux에 ELK Stack(Metricbeat) 를 세팅하여 dashboard에서 확인하는 과정은 여기 에서 확인할 수 있다.
ELK metricbeat는 Docker container 들에서 metric 데이터를 가져올 수 있는 모듈을 제공한다.
추가적으로 아래의 다른 모듈들도 기본적으로 제공되는데, ./metricbeat-7.12.1-linux-x86_64(다운로드 경로)/modules.d 경로에서 확인해볼 수 있다.

activemq.yml.disabled      docker.yml (이후 활성화되면 disabled가 없어짐)                       kibana-xpack.yml.disabled    postgresql.yml.disabled
aerospike.yml.disabled     docker.yml.disabled               kibana.yml.disabled          prometheus.yml
apache.yml.disabled        dropwizard.yml.disabled           kubernetes.yml.disabled      rabbitmq.yml.disabled
appsearch.yml.disabled     elasticsearch-xpack.yml.disabled  kvm.yml.disabled             redisenterprise.yml.disabled
awsfargate.yml.disabled    elasticsearch.yml.disabled        linux.yml.disabled           redis.yml.disabled
aws.yml.disabled           envoyproxy.yml.disabled           logstash-xpack.yml.disabled  sql.yml.disabled
azure.yml.disabled         etcd.yml.disabled                 logstash.yml.disabled        stan.yml.disabled
beat-xpack.yml.disabled    gcp.yml.disabled                  memcached.yml.disabled       statsd.yml.disabled
beat.yml.disabled          golang.yml.disabled               mongodb.yml.disabled         system.yml
ceph-mgr.yml.disabled      graphite.yml.disabled             mssql.yml.disabled           tomcat.yml.disabled
ceph.yml.disabled          haproxy.yml.disabled              munin.yml.disabled           traefik.yml.disabled
cloudfoundry.yml.disabled  http.yml.disabled                 mysql.yml.disabled           uwsgi.yml.disabled
cockroachdb.yml.disabled   ibmmq.yml.disabled                nats.yml.disabled            vsphere.yml.disabled
consul.yml.disabled        iis.yml.disabled                  nginx.yml                    windows.yml.disabled
coredns.yml.disabled       istio.yml.disabled                openmetrics.yml.disabled     zookeeper.yml.disabled
couchbase.yml.disabled     jolokia.yml.disabled              oracle.yml.disabled
couchdb.yml.disabled       kafka.yml.disabled                php_fpm.yml.disabled

docker.yml.disabled 파일의 아래 내용을 주석 해제한다. 아래 코드는 container, cpu, healthcheck 등의 docker metricsets들에 대한 정보가 fetch될 것임을 의미한다.

metricbeat.modules:
- module: docker
  metricsets:
    - "container"
    - "cpu"
    - "diskio"
    - "event"
    - "healthcheck"
    - "info"
    #- "image"
    - "memory"
    - "network"
    #- "network_summary"
  hosts: ["unix:///var/run/docker.sock"]
  period: 10s
  enabled: true

Docker.yml 파일 enabled (활성화) 시키기

./metricbeat modules enable docker

Background에서 metricbeat가 돌아가도록 실행

nohup sudo ./metricbeat -e &

Kibana 작업

kibana > Dashboard > Create New DashBoard > Create New Panel 하여 Kibana로 시각화할 수 있다.
Kibana는 시계열 작업에 유리하며, x축과 y축, 그리고 필드를 이용하여 커스텀화해 나타낼 수 있다.
docker 관련 Kibana구성은 아래 사진과 같이 커스텀화하여 모니터링할 수 있다.

사진 첨부 불가로 예시 사진으로 대체

1. 각 도커 이미지별 CPU 사용률, Docker DISKIO 사용률, Memory 사용률, Memory RSS 사용률 등을 파악할 수 있다.
X-axis에 docker.container.name을, Y-axis에 docker.cpu.usage.total ,docker.memory.usage.total,, 등을 추가한다

2. Memory Usage / CPU Usage Over time
컨테이너별 memory/cpu 세부 사용률을 시간별로 보기 위해서는 X-axis에 @timestamp를, Y-axis에 docker.memory.usage.total을, 세부 항목에 docker.container.name을 추가한다.

3. 도커 컨테이너(Total, Running, Stopped) 개수 조회
Unique Count aggregation 항목과 docker.container.name 항목을 통해 현재 running되고 있는, stopped된 도커 컨테이너 수를 알 수 있다 !


주의할 점

Docker 모니터링에 metricbeats를 도입하려고 하는 사람이라면 Kibana에서 얻을 수 있는 자료의 종류를 미리 알아본 후에 도입해보는 걸 추천한다!