컨테이너에서 호스트 메트릭스 수집

김대권(nacyot)




gmVCfyp.png


Monitoring

  • Metrics
    • 시스템 자원 정보
    • 수치로 된 모든 정보
  • Log
    • (한줄로 완결되는) 이벤트 정보의 스트림
    • 파일 / STDOUT 등등

로그 수집 (2*2)

  • 컨테이너 로그
  • 컨테이너 메트릭스
  • 호스트 로그
  • 호스트 매트릭스

Docker와 모니터링

http://www.slideshare.net/ext/docker-37592250

GcuIoLo.png

Dockerize?

  • 모든 모니터링을 컨테이너로 할 수 있지 않을까?

Dockerize의 장점

image.png

Dockerize 구상도

cpysQdX.png

Host Metrics 수집

  • 수집 대상
    • /proc
    • /system/fs/cgroup
  • 수집 도구
    • Diamond
    • Sensu
    • Munin …

문제

  • 컨테이너 안에서 호스트 정보에 어떻게 접근할까?

Solution 1 - Mount?

Nuxeo Blog - CoreOS Monitoring with Diamond and Graphite

$ sudo docker run -t -i -v /proc:/var/host_proc:ro ubuntu bash

Diamond Colletor의 수집 경로 문제

  • /proc -> /host_proc
  • 대부분의 경로가 하드 코딩 되어있음

Solution 2 - mount & chroot

chroot

  • pivot root 기능
  • 파일, 라이브러리는 직접 준비
  • 사용이 까다로움

nacyot/docker-logs

https://github.com/nacyot/docker-logs/tree/master/diamond

Dockerfile

FROM nacyot/ubuntu:14.04
MAINTAINER Daekwon Kim <propellerheaven@gmail.com>

# Install diamond
# ...

# Initialize chroot
RUN bash -c "mkdir -p /chroot/{root,tmp,opt}"
RUN wget -O /chroot/opt/diamond.conf https://gist.githubusercontent.com/nacyot/d0f9c491f8aa8ff42f16/raw/
RUN bash -c "cp -r /{lib,lib64,bin,usr,etc,var} /chroot/"

CMD chroot /chroot /usr/bin/diamond -f -c /opt/diamond.conf --skip-pidfile --skip-change-user -l

Diamond Collector & Handler

  • Collector : 메트릭스 수집기
  • Handler : 데이터 처리 / 저장
[[GraphiteHandler]]
host = 172.17.42.1
port = 2003
timeout = 15
batch = 1

Graphite

Run Container

$ docker run -it\
           -v /proc:/chroot/proc:ro \
           -v /sys:/chroot/sys:ro \
           -v /dev:/chroot/dev:ro \
           -v /run:/chroot/run:ro \
           nacyot/diamond

문제

  • 정말 Host의 정보를 가져오는 걸까?

결과(Grafana)

호스트에서 수집한 정보와 비교

zSkSpyd.png

Q / A