앞서 Docker를 활용한 ELK 구성에 이어서, 이번에는 Metricbeat를 붙여보았다
📌 Contents.
Metricbeat
**Metricbeat란? **컴퓨터나 서버의 상태를 모니터링하는 도구. 쉽게 말하면, 컴퓨터의 ‘건강 검진’을 자동으로 해주는 프로그램
예를 들어:
CPU 사용량이 얼마나 되는지
메모리가 얼마나 남았는지
디스크 공간은 충분한지
이런 정보들을 주기적으로 수집해서 보고해주는 프로그램
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에서 시스템 메트릭 확인을 위한 인덱스 구성 및 차트 확인
좌측
Stack Management>Data View>Create Data View인덱스 명: metricbeat (중요X)
인덱스 패턴:
metricbeat-*← (MetricBeat가 기본적으로 사용하는 인덱스 패턴)Time field:
@timestamp
Kibana 초기 화면 Dashboard > Create dashboard> Add visuallization > host.cpu.usage 필드를 차트로 끌어와보면 시스템 메트릭이 정상적으로 수집되고있는 것을 확인할 수 있다.