개요

회사의 빅데이터 장비의 시스템 STAT등의 metric을 쌓고 관리/추적 하기 위해 모니터링 데몬을 찾아보았다. 이때 Elastic에서 만든 MetricBeat가 이미 ES 클러스터를 4개나 운영하고 있는 우리회사의 실정과 기술 Stack, 또한 MetricBeat 자체의 장점이 많은것 같아 도입하기로 하였다. 이를 구축하는 과정을 정리하여 공유한다.

모니터링 기술 선택을 고민

필자의 경우 회사에 엔지니어가 많은편이 아니다. 또한 DevOps팀이나 인력이 따로 존재하지 않는다. 따라서 특정 카테고리의 기술을 복수로 선택하지 않는 편이라 빅데이터 쪽 모니터링 기술도 한번 알아보고 선택하면 이 기술을 빅데이터 전체 장비에 활용할 계획을 하였다. 이 과정은 생략하고 MetricBeat를 선택한 이유는 아래와 같다.

MetricBeat의 장점

무료 라이센스

아무래도 필자의 경우 이부분이 매력적이었다.

시계열 모니터링은 ES가 유리

시계열 모니터링 특히 장비 모니터링의 경우 Grafana + Graphite 혹은 Grafana + Influx DB의 조합도 많이 사용하는것으로 알고 있다. 또한 다른 기술 Stack도 존재할 것이다. 하지만 필자는 이 부분에서 적어도 앞선 조합보다는 ES + 키바나 조합이 유리하다고 생각한다. 이유는 metric key + metric value + category 정도의 단순한 조합으로 metric을 쌓는것 대비 ES + 키바나로 기술을 정해놓고 지표를 쌓으면 차후 아래의 장점이 생길 수 있다.

  • 데이터를 쌓을 때 아래와 같이 doc 하나에 다양한 metric을 한번에 쌓기 때문에 데이터 구조가 효율적이다.
    (graphite에서는 key-value로 하나씩 쌓아야하는 것으로 알고 있는데 다른 기술들이 어떤지는 필자도 확실치 않다.)
  • 쌓은 지표에 대한 검색성능이 뛰어나다.
  • ES는 다양하고 강력한 Aggregation 기능을 제공해 준다.

기본 제공되는 자세한 지표

아래에서 소개하는 다양한 기본 지표들이 마음에 들었다.

모니터링용 색인 스키마를 자동 생성

MetricBeat를 사용하면 ES에 시계열로 Metric을 적재할 스키마를 본인들아 알아서 생성해 주는 것이 장점다으로 가왔다. 왜냐하면 직접 ES에 색인 스키마를 설계한다고 하면 또 일이 늘어나기도 하고 MetricBeat만큼 고민을 할 것 같지도 않기 때문이다.

키바나 대시보드 자동 생성가능

위와 같은 맥락에서 대시보드를 기본 생성해주는 것이 장점이라고 판단하였다.

아래와 같은 오버뷰 지표를 제공한다.

CPU에 대한 지표를 드릴다운하며 추적할 수 있다.

프로세스 사용 정보도 장비별로 볼 수 있다.

장비별로 TOP 명령어를 한것과 같은 프로세스 사용 내역이 주기적으로 기록된다.

다양한 Metric 모듈 제공

MetricBeat 6.1기준으로 아래와 같은 모듈들을 제공한다. beta나 experimental이 다수 포함되어 있다는 사실은 유념하자. 가장 기본적으로 물리장비(System)에 대한 metric 수집은 CPU, MEM, DISK, NETWORK등의 정보를 충실하게 수집해 주는 것을 필자가 확인하였다. 또한 빅데이터 관련 기술들 왠만한 것들을 많이 지원해주고 특히 JMX 지원이 되기 때문에 JVM 기반 기술들도 상당수 수집이 가능할듯 하다.

더 자세한 정보는 링크에서 확인하자.

  • System
  • Aerospike
  • Apache
  • Ceph
  • Couchbase
  • Docker
  • Dropwizard
  • Elasticsearch
  • Etcd
  • Golang
  • expvar
  • HAProxy
  • HTTP
  • json
  • Jolokia
  • jmx
  • Kafka
  • Kibana
  • Kubernetes
  • Logstash
  • Memcached
  • MongoDB
  • dbstats
  • MySQL
  • Nginx
  • PHP_FPM
  • PostgreSQL
  • RabbitMQ
  • Redis
  • vSphere
  • Windows
  • ZooKeeper

버전 선정

필자의 회사에서 사용하는 ES중 분석계 클러스터는 버전이 5.5.0이다. 따라서 ES 5.5.0에서 사용할 수 있는 가장 최신의 MetricBeat는 아래와 같이 6.1.x인것을 확인할 수 있었고 따라서 이버전으로 설치를 진행했다.

MetricBeat 5.5에서 지원하는 모듈은 아래와 같았다.

MetricBeat 6.1에서 지원하는 모듈은 아래와 같이 더 많았다.

MetricBeat와 ROOT권한

메트릭비트는 부득이 ROOT 권한으로만 실행되는 점을 반드시 인지하자.

설치방법

메트릭비트 설치 및 설정방법을 2가지 Track으로 설명한다.

  1. 바이너리 다운로드 및 설치
  2. lks21c/metricbeat 이용

메트릭비트를 직접 구성을 해본 뒤 이 부분을 쳬계화/자동화 하였다.

회사에서는 사정상 ansible을 이번경우 사용할 수 없는 환경이었다. 하지만 장비가 50대도 족히 넘기 때문에 SSH + Shell Script로 장비별로 MetricBeat를 설치하는 스크립트를 작성하였다. 이부분을 lks21c/metricbeat로 만들어 두었으니 필요한 분들은 설치 시 참고하자.

이 2가지 방법 중 원하는 방법으로 사용하자.

1. MetricBeat 바이너리로 진행

MetricBeat 다운로드

MetricBeat를 다운로드 한다.

$ wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-5.5.3-linux-x86_64.tar.gz
$ tar xzvf metricbeat-5.5.3-linux-x86_64.tar.gz

metricbeat.yml 수정하기

MetricBeat 파일 중에 metricbeat.yml에서 아래 부분을 ES주소를 원하는대로 지정한다.

hosts: ["localhost:9200"]

또한 metricbeat를 사용하는 장비가 많으면 반드시 샤드 갯수를 조정해준다.

setup.template.settings:
  index.number_of_shards: 5
  index.codec: best_compression
  #_source.enabled: false

start daemon

아래의 명령어로 MetricBeat데몬을 실행하면 데몬이 metric을 주기적으로 위에서 지정한 ES로 쏴준다.(Index 요청을 보낸다.)

$ sudo ./metricbeat -e -c metricbeat.yml

회사에서 사용하려고 만든 start/stop 스크립트는 아래와 같다.

$ nohup sudo /root/metricbeat/metricbeat -e -c /root/metricbeat/metricbeat.yml > /dev/null 2>&1 & # start.sh
$ kill $(ps aux | grep 'metricbeat'| awk '{print $2}') >/dev/null 2>&1 & #stop.sh
$ pkill metricbeat # 위 스크립트가 잘 동작하지 않을때의 stop.sh

키바나에 Index 패턴 등록하기

이부분은 필자 기억에 따로 등록하지 않아도 되었던 것으로 기억하지만 만약 정상 동작 하지 않는 다면 이부분을 등록해주자.

대시보드 import

MetricBeat는 앞서 얘기한것 처럼 키바나에 Default 대시보드를 생성할 수 있다. 아래와 같은 명령어를 실행하고 키바나의 대시보드로 이동하면 관련 대시보드가 생성되어 있는 것을 확인 할 수 있다.

$  ./metricbeat setup -c metricbeat.yml

2. lks21c/metricbeat 이용하기

lks21c/metricbeat를 이용하여 metricbeat 환경을 만들어보자.

MetricBeat 바이너리 압축풀기

$ git clone https://github.com/lks21c/metricbeat
$ ./prepare.sh

metricbeat.yml 수정하기

Repo중에 config/metricbeat.yml에서 아래 부분을 ES주소를 원하는대로 지정한다.

hosts: ["localhost:9200"]

데몬 Sync

아래와 같이 sync를 시도하면 serverlist/serverlist_sample에 기재된 서버 호스트명으로 ssh 및 scp를 통해 바이너리를 /root/metricbeat밑으로 복사한다. 또한 metricbeat.yml은 repo에 기재된 파일을 사용한다.

$ ./sync.sh sample

구동 스크립트

아래의 스크립트를 통해 serverlist/serverlist_sample에 기재된 서버 호스트명으로 ssh로 메트릭비트 시작이나 종료 혹은 프로세스 확인 명령을 내린다.

$ ./start.sh sample
$ ./stop.sh sample
$ ./ps.sh sample

키바나에 Index 패턴 등록하기

이부분은 필자 기억에 따로 등록하지 않아도 되었던 것으로 기억하지만 만약 정상 동작 하지 않는 다면 이부분을 등록해주자.

대시보드 import

MetricBeat는 앞서 얘기한것 처럼 키바나에 Default 대시보드를 생성할 수 있다. 아래와 같은 명령어를 실행하고 키바나의 대시보드로 이동하면 관련 대시보드가 생성되어 있는 것을 확인 할 수 있다.

$  ./metricbeat setup -c metricbeat.yml

module 확장하기

현재 사용되는 모듈 리스트는 아래와 같이 조회 가능하다. 기본 설치에서는 system 모듈만 활성화 되어 있다.

$ ./metricbeat modules list

모듈을 추가로 enable하기 위해서는 아래와 같이 지정하면 된다. 이 원리는 modules.d 디렉토리에 관련 모듈들이 모듈명.yml.disabled 의 규칙으로 파일들이 존재하는데 아래의 명령어를 통해 모듈명.yml로 바뀌고, metricbeat.yml가 자동으로 이 모듈 yml을 include 해서 활성화 되게 만들어준다.

$ ./metricbeat modules enable apache mysql

module 비활성화는 아래와 같이 가능하다.

$ ./metricbeat modules disable apache mysql

결론

현재까지는 장비 60여대에 설치했는데 ES 부하 및 각 에이전트 노드들 부하없이 잘 사용하고 있다. 또한 지표검색 속도가 빠르고 다양하며 필요한 지표들 대시보드가 대부분 이미 만들어져 있는 점이 마음에 들었다.

더불어, 필요시 ES에 색인 구조를 활용하여 필요한 검색이나 집계를 이용하여 추가 대시보드 구성이나 주요 지표 Warning 데몬을 만드는 확장서도 얻을수 있을듯 하다.

참고자료