앞서 Docker를 활용한 ELK 구성에 이어서, 이번에는 Metricbeat를 붙여보았다

📌 Contents.


Metricbeat

ℹ️

**Metricbeat란? **컴퓨터나 서버의 상태를 모니터링하는 도구. 쉽게 말하면, 컴퓨터의 ‘건강 검진’을 자동으로 해주는 프로그램

예를 들어:

  1. CPU 사용량이 얼마나 되는지

  2. 메모리가 얼마나 남았는지

  3. 디스크 공간은 충분한지

이런 정보들을 주기적으로 수집해서 보고해주는 프로그램

Metricbeat 추가구성 방법

지난 번에 다뤘던 docker-compose.yml 파일 내용에서 metricbeat 관련 추가된 설정

  metricbeat:
    build:
      context: ../elk/metricbeat/
      args:
        ELASTIC_VERSION: ${ELASTIC_VERSION}
    container_name: metricbeat
    user: root  # needed to access host metrics
    volumes:
      - ../elk/metricbeat/config/metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro,Z
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=metricbeat_internal
      - METRICBEAT_INTERNAL_PASSWORD=${METRICBEAT_INTERNAL_PASSWORD:-}
    networks:
      - nginx_proxy_manager
    depends_on:
      - elasticsearch
      - kibana

docker-compose.yml

elasticsearch/config/elasticsearch.yml에 아래 내용 추가

# Metricbeat 관련 추가 항목
xpack.monitoring.collection.enabled: true

metricbeat/Dockerfile

ARG ELASTIC_VERSION

FROM docker.elastic.co/beats/metricbeat:${ELASTIC_VERSION}

USER root

RUN mkdir /var/log/metricbeat && chown metricbeat /var/log/metricbeat

metricbeat/config/metricbeat.yml

metricbeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

metricbeat.modules:
  - module: system
    metricsets:
      - cpu
      - load
      - memory
      - network
      - process
      - process_summary
    enabled: true
    period: 10s
    processes: ['.*']

  - module: docker
    metricsets:
      - container
      - cpu
      - diskio
      - healthcheck
      - info
      - memory
      - network
    hosts: ["unix:///var/run/docker.sock"]
    period: 10s

output.elasticsearch:
  hosts: ['elasticsearch:9200']
  username: 'metricbeat_internal'
  password: '${METRICBEAT_INTERNAL_PASSWORD}'

setup.kibana:
  host: "kibana:5601"

setup/roles/metricbeat_writer.json

{
  "cluster": ["monitor", "manage_index_templates", "manage_ilm"],
  "indices": [
    {
      "names": ["metricbeat-*"],
      "privileges": ["manage", "index", "create_index", "view_index_metadata", "read"]
    }
  ]
}

⚠ Metricbeat 테스트

참고로, Mac OS 환경에서는 Metricbeat 도커 컨테이너가 Mac의 시스템 메트릭을 수집하는 것에 보안상의 제한사항이 존재했다. 뭔가 방법이 없나 찾아보았지만 결국 Mac OS에서 메트릭 수집 테스트를 하기위해서는 Mac 호스트에 직접 Metricbeat 별도 설치가 필요했다.

따라서 이에 대한 가이드를 아래에 별도로 정리하였다.

Mac OS에서의 Metricbeat 로컬 설치

curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.14.3-darwin-x86_64.tar.gz

tar xzvf metricbeat-8.14.3-darwin-x86_64.tar.gz

cd metricbeat-8.14.3-darwin-x86_64

# metricbeat.yml 생성
vi metricbeat.yml

아래 내용 metricbeat.yml에 추가

metricbeat.modules:
- module: system
  metricsets:
    - cpu             # CPU usage
    - load            # CPU load averages
    - memory          # Memory usage
    - network         # Network IO
    - process         # Per process metrics
    - process_summary # Process summary
    - uptime          # System Uptime
    - socket_summary  # Socket summary
    - core            # Per CPU core usage
    - diskio          # Disk IO
  processes: ['.*']
  process.include_top_n:
    by_cpu: 5      # include top 5 processes by CPU
    by_memory: 5   # include top 5 processes by memory

output.elasticsearch:
  hosts: ["localhost:9200"]
  username: "metricbeat_internal"
  password: "{metricbeat 비밀번호(※초기 changeme로 설정한상태)}"

setup.kibana:
  host: "localhost:5601"

Metricbeat 실행 및 Kibana에서 메트릭 확인하기

# Metricbeat 실행
./metricbeat -e

Kiabana에서 시스템 메트릭 확인을 위한 인덱스 구성 및 차트 확인

  1. http://localhsot:5601 접속

  2. 좌측 Stack Management > Data View > Create Data View

  3. 인덱스 명: metricbeat (중요X)

  4. 인덱스 패턴: metricbeat-* ← (MetricBeat가 기본적으로 사용하는 인덱스 패턴)

  5. Time field: @timestamp

Kibana 초기 화면 Dashboard > Create dashboard> Add visuallization > host.cpu.usage 필드를 차트로 끌어와보면 시스템 메트릭이 정상적으로 수집되고있는 것을 확인할 수 있다.