도커(Docker) 메트릭스 & 로그 수집
@nacyot
0
naycot
Leevi Inc.
http://leevi.co.kr/
목차
메트릭스 & 로그 수집
로그
메트릭스
수집 시스템 구성
도커 메트릭스 & 로그 수집
도커 호스트 시스템 로그
도커 호스트 시스템 메트릭스
컨테이너 어플리케이션 로그
컨테이너 어플리케이션 메트릭스
컨테이너 모니터링
최종 구상도
메트릭스 & 로그 수집의 미래
Just Docker
어플리케이션
기획
구현(프로그래밍)
운영
운영
서비스 환경 구축
서버에서 어플리케이션 가동
서버 운영
메트릭스 수집
로그 수집
피드백
장애 대응
어플리케이션 개선
스케일 아웃 & 인
모니터링 & 로그 수집
메트릭스 로그
수치 정보
리소스 모니터링
Munin, Diamond, Sensu, …
CPU, Load Avarage,
Memory, …
쿼리수, 접속자수, 부하, …
어플리케이션 모니터링
대개 직접 구현
접속자수, 에러수, …
임의 수치
행으로 구분되는 데이터셋
비정형 데이터
시스템 로그
사용자 정보, 로그인 정보
각종 시스템 서비스 로그
어플리케이션 로그
대개 직접 구현
로그
행으로 구분되는 데이터셋
비정형 데이터
어플리케이션마다 독자적인 포맷 사용
CSV, XML, JSON, …
완전한 독자적 형식
어플리케이션마다 독자적인 출력 사용
파일
표준 출력
아파치 로그 예제
195.140.144.83 - - [16/Aug/2011:00:49:33 +0900] "GET …
195.140.144.83 - - [16/Aug/2011:00:49:37 +0900] "GET …
121.3.24.52 - - [17/Aug/2011:03:23:12 +0900] "GET …
로그 수집기(어플리케이션, 시스템)
시스템
Syslog
어플리케이션
Fluentd
LogStash
로그 저장소
ElasticSearch
MongoDB
Datadog
PaperTrail
메트릭스
시간 + 수치 정보
[Timestamp, Namespace, ]
[1406886733, us-west1.node1.cpu.usage, 83]
[1406886734, us-west1.node1.cpu.usage, 50]
[1406886735, us-west1.node1.cpu.usage, 3]
메트릭스 수집
시스템
Diamond
Sensu
Munin
Fluentd(?)
어플리케이션
어플리케이션에서 자체 구현
시계열 데이터베이스
RRDtool
Munin
GrowthForecast
Graphite
InfluxDB
Hosted Graphite
시스템 구성 예제(1)
시스템 구성 예제(2)
결론
2 (시스템, 어플리케이션) by 2 (로그, 메트릭스)
1. 시스템 로그
2. 시스템 메트릭스
3. 어플리케이션 로그
4. 어플리케이션 메트릭스
Docker
An open platform for distributed applications for developers
and sysadmins.
경량 가상화
로그 & 모니터링
2 (시스템, 어플리케이션) by 2 (로그, 메트릭스)
1. 시스템 로그
2. 시스템 메트릭스
3. 어플리케이션 로그
4. 어플리케이션 메트릭스
도커 로그 & 모니터링 구조도 (1)
도커 로그 & 모니터링 구조도 (2)
도커 로그 & 모니터링
1. 도커 호스트 시스템 로그
2. 도커 호스트 시스템 메트릭스
3. 컨테이너 어플리케이션 로그
4. 컨테이너 어플리케이션 메트릭스
5. 컨테이너 메트릭스
도커 호스트 시스템 로그
기존 방식과 다르지 않음
뒤에서 다시
도커 호스트 시스템 메트릭스
기존 방식과 다르지 않음
뒤에서 다시
컨테이너 어플리케이션 로그
생각해볼 수 있는 방법
컨테이너 안에서 수집
어플리케이션 컨테이너에서 수집기 운용
컨테이너 외부에서 수집
Docker 로그 파일 직접 사용
서비스(컨테이너)적인 사고법
로그는 서비스의 일부분이 아님
컨테이너에는 데이터가 저장되어서는 안 됨
The Twelve Factor App
http://the-twelve-factor-app.herokuapp.com/
The Twelve Factor App - Log (1)
로그는 모든 실행중인 프로세스와 백엔드 서비스의 누적되며
시간순으로 수집되고 정렬되는 이벤트 스트림이다. 일반적으
로 어플리케이션이 직접 생성하는 로그는 한 줄에 하나의 이
벤트를 텍스트 포맷으로 기록한다(예외를 추적하는 로그는
여러줄로 쓰여지기도 한다). 로그는 고정된 시작과 끝이 없으
면 어플리케이션이 실행되는 한 계속된다.
Twelve Factor App은 어플리케이션의 출력 스트림의 목적지
나 어디에 저장되는 지 일체 간섭하지 않는다. 어플리케이션
은 로그를 작성하거나 로그 파일을 관리하려고 해서는 안된
다. 로그 파일을 관리하는 대신 각각의 실행중인 프로세스는
자신의 이벤트 스트림을 버퍼없이 stdout에 출력한다.
The Twelve Factor App - Log (2)
로그는 시간순으로 수집되고 정렬되는 이벤트 스트림이다.
-> 표준 출력에 출력!
출력 스트림의 목적지나 어디에 저장되는 지 일체 간섭하지
않는다.
-> 어플리케이션에는 로그에 대한 설정/로직이 없어야함!
도커 로그(로그 파일을 통한 수집)
docker logs 명령어
json으로 저장
docker inspect로 위치 파악
/var/lib/docker/containers 디렉터리의 {containerid}-json.log
접근시 root 권한 필요
progrium/logspout
Docker Log Router
컨테이너로 실행
syslog 지원
HTTP API 지원
progrium/logspout 구조도
progrium/logspout 장단점
장점
logspout 컨테이너 하나면 됨
매우 일관적인 로그 수집 시스템(표준 출력)
12 Factor App에서 환경변수로 설정을 관리하는 것과 비슷
단점
컨테이너에 문제가 생기면 로그 수집 정지(?!)
약간의 딜레이
stdout과 stderr만 수집 가능
어플리케이션 설계시 고려가 필요
컨테이너 어플리케이션 메트릭스
기존과 크게 다르지 않음
메트릭스는 대개 실시간 데이터
어플리케이션에서 라이브러리로 직접 보냄
필요한 경우 파일이나 다른 수집기 사용
컨테이너 모니터링
cgroup
가상화된 컨테이너별 데이터 수집
Resouce 메트릭스
sys/fs/cgroup 에서 수집 가능
Network & Exit Time …
Gathering LXC and Docker containers metrics
sys/fs/cgroup
/sys/fs/cgroup/
├── cpu
│ ├── docker
│ │ ├── 0660f4e1d4054d4ebb6a3212a35b8ba1593dee7e26a6cc96999f796
465bce9f7
│ │ ├── 09ecfbb7a3cffbd0860a7ae163bfa6bbf5ad73c730932df62127531
1ef16d04d
│ │ ├── 2ab6917f2711586438b8ade5b55b55a15e94ae6209831f8fc4dd47e
4b288cafe
│ │ ├── 42e782ffcceafbdb6e939abbf6a4f71b9089ccd06dae3349b3429ad
651bf5814
│ │ ├── 61a8ffc27ad4f2d4c81b4b70d1f575b5593df8433c7edf47231efb4
7fd3607a7
│ │ ├── afb4bfe3db0ddf38db9ac4b2b08150885ddf090696722e066a07923
5b4ce964d
│ │ └── b6b689622627c477b298a1da6d9020ce517ef5ca9f45ca392e51e29
7c962d469
│ └── user
│ └── 1000.user
│ └── c1.session
...
cgroup 데이터 수집기
Diamond collector
CpuAcctCgroupCollector
MemoryCgroupCollector
Sensu
Cgroup Metrics Plugin
docker-metricsd
Diamond 예제
[[MemoryCgroupCollector]]
enabled = True
[[CpuAcctCgroupCollector]]
enabled = True
docker-metricsd + fluentd
$ curl http://host.example.com:12375/containers/f9093f3df8d8/json |
jq
.
{
"ID":
"f9093f3df8d84db914f544139d828e3c7ba7f5a353f83220c0580536b61ec5c3",
...
"Metrics": {
"memory": {
"failcnt": 0,
"stats": {
"unevictable": 0,
"total_unevictable": 0,
"total_swap": 0,
"total_rss": 380928,
"total_pgpgout": 681084,
도커 메트릭스 & 로그 수집 최종 구조도
도커 메트릭스 & 로그 수집 최종 구조도
(2)
도커 로그 & 모니터링 결론
1. 도커 호스트 시스템 로그
기존과 같음(ex - host에서 syslog-ng 사용)
2. 도커 호스트 시스템 메트릭스
기존과 같음(ex - host에서 diamond 사용)
3. 컨테이너 어플리케이션 로그
표준 출력으로 로그 기록
json 파일 / logspout으로 수집
4. 컨테이너 어플리케이션 메트릭스
기존과 비슷함(ex - 어플리케이션에서 직접 데이터 저장소로)
5. 컨테이너 메트릭스
Diamond or docker-metricsd(Cgroup 메트릭스 데이터 수집)
Configuration Management
Docker Base Image
Syslog
Diamond
docker-metricsd
Docker
Logspout
Demo
Metrics Server
ElasticSearch & Kibana
Graphite & Grafana
App Server
diamond
system
cgroup
syslog-ng
logspout
Demo - Metrics-Server
Digital Ocean
Image
Docker 1.1.1
Ubuntu 14.04
Fig 설치
$ curl -L https://github.com/orchardup/fig/releases/download/0.5.2/
linux > /usr/local/bin/fig
$ chmod +x /usr/local/bin/fig
ElasticSearch & Grafana Setup
$ git clone https://gist.github.com/f0dc7d9e05238ffd0f2f.git ~/moni
toring
$ cd monitoring
$ fig up
ElasticSearch Dashboard - Kibana
Graphite Dashboard - Grafana
Demo - App-Server
Digital Ocean
Image
Docker 1.1.1
Ubuntu 14.04
Diamond 설치
$ apt-get update
$ apt-get install make pbuilder python-mock python-configobj python
-support cdbs
$ git clone https://github.com/BrightcoveOS/Diamond.git
$ cd Diamond/
$ make builddeb
$ dpkg -i build/diamond_3.4.573_all.deb
$ git clone https://gist.github.com/d0f9c491f8aa8ff42f16 /etc/diamo
nd/gist
$ cp /etc/diamond/gist/diamond.conf /etc/diamond/diamond.conf
$ service diamond start
Diamond 설정
Graphite Handler 설정
[[GraphiteHandler]]
host = 0.0.0.0
port = 2003
timeout = 15
batch = 1
수집 간격 설정
[collectors]
interval = 5
Grafana & Diamond
Diamond - cgroup 설정
[collectors]
[[MemoryCgroupCollector]]
enabled = True
[[CpuAcctCgroupCollector]]
enabled = True
Grafana & Diamond(Cgroup)
syslog-ng
$ apt-get install -y syslog-ng-core syslog-ng
$ git clone https://gist.github.com/87d0d902663390b11ff6 /etc/syslo
g-ng/gist
$ cp /etc/syslog-ng/gist/syslog-ng.conf /etc/syslog-ng/syslog-ng.co
nf
syslog-ng.conf
@version: 3.5
@include "scl.conf"
options {
time_reap(30);
mark_freq(10);
keep_hostname(yes);
};
source src {
unix-stream("/dev/log");
internal();
system();
};
destination d_network { udp( "0.0.0.0" port(5140) ); };
log { source(src); destination(d_network); };
agent-td:syslog_to_elasticsearch
$ docker run -d -p 5140:5140/udp 
-e SYSLOG_TAG=syslog.system -e SYSLOG_FORMAT= -e SYSLO
G_TIME_FORMAT= 
-e ES_HOST=<ES_HOST> -e ES_TAG=syslog.** nacyot/syslog
_to_elasticsearch
syslog-ng & Kibana
logspout
테스트 컨테이너 실행
$ docker run -d busybox /bin/sh -c "while true; do echo Container 1
; sleep 1; done"
$ docker run -d busybox /bin/sh -c "while true; do echo Container 2
; sleep 5; done"
logspout 실행
$ docker run -d --name log -p 9500:8000 -v=/var/run/docker.sock:/tm
p/docker.sock progrium/logspout
$ curl $(docker port log 9500)/logs
Syslog로 보내기
$ docker run -v=/var/run/docker.sock:/tmp/docker.sock progrium/logs
pout 
syslog://0.0.0.0:5141
agent-td:syslogtoelasticsearch
$ docker run -d -p 5141:5140/udp 
-e SYSLOG_TAG=docker.log -e ES_TYPE=docker 
-e ES_HOST=<ES_HOST> -e ES_TAG=docker.** nacyot/syslog
_to_elasticsearch
logspout & Kibana
메트릭스 & 로그 수집의 미래
도커다운 해결책
로그 수집기의 컨테이너화
메트릭스 수집기의 컨테이너화
앞서 미뤄둔 이야기
호스트에서 돌려야하는 수집기
도커 호스트 시스템 로그
도커 호스트 시스템 메트릭스
(컨테이너 메트릭스)
구상도
Just Docker
Docker Base Image
Docker
Logspout
Syslog-ng
Diamond
docker-metricsd
비교
Host + Docker Docker
Docker Base Image
Syslog
Diamond
docker-metricsd
Docker
Logspout
Docker Base Image
Docker
Logspout
Syslog-ng
Diamond
docker-metricsd
장점
Stateless한 수집 시스템
컨테이너로 로그 수집 시스템 추상화
컨테이너로 수집기 논리적 분리
사용하고 싶은 수집기로 쉽게 변경 가능
컨테이너 교체
단점 / 문제점
컨테이너에 문제가 생겼을 때 대응
필요한 건 컨테이너의 정보가 아닌 호스트의 정보
호스트의 정보를 어떻게 가져올 수 있을까?
호스트의 정보를 가져올 수 있을까?
해결법
$ docker run -d -v /proc:/host_proc:ro -link nuxeoServer:nuxeo -nam
e collector nuxeo/diamond
-v /proc:/hostproc:ro
로그 수집 모듈의 로직을 일일히 다 바꿔줘야함
아직은 비현실적인 해결책
Q/A

도커(Docker) 메트릭스 & 로그 수집

  • 1.
    도커(Docker) 메트릭스 &로그 수집 @nacyot 0
  • 2.
  • 3.
    목차 메트릭스 & 로그수집 로그 메트릭스 수집 시스템 구성 도커 메트릭스 & 로그 수집 도커 호스트 시스템 로그 도커 호스트 시스템 메트릭스 컨테이너 어플리케이션 로그 컨테이너 어플리케이션 메트릭스 컨테이너 모니터링 최종 구상도 메트릭스 & 로그 수집의 미래 Just Docker
  • 4.
  • 5.
    운영 서비스 환경 구축 서버에서어플리케이션 가동 서버 운영 메트릭스 수집 로그 수집 피드백 장애 대응 어플리케이션 개선 스케일 아웃 & 인
  • 6.
    모니터링 & 로그수집 메트릭스 로그 수치 정보 리소스 모니터링 Munin, Diamond, Sensu, … CPU, Load Avarage, Memory, … 쿼리수, 접속자수, 부하, … 어플리케이션 모니터링 대개 직접 구현 접속자수, 에러수, … 임의 수치 행으로 구분되는 데이터셋 비정형 데이터 시스템 로그 사용자 정보, 로그인 정보 각종 시스템 서비스 로그 어플리케이션 로그 대개 직접 구현
  • 7.
    로그 행으로 구분되는 데이터셋 비정형데이터 어플리케이션마다 독자적인 포맷 사용 CSV, XML, JSON, … 완전한 독자적 형식 어플리케이션마다 독자적인 출력 사용 파일 표준 출력 아파치 로그 예제 195.140.144.83 - - [16/Aug/2011:00:49:33 +0900] "GET … 195.140.144.83 - - [16/Aug/2011:00:49:37 +0900] "GET … 121.3.24.52 - - [17/Aug/2011:03:23:12 +0900] "GET …
  • 8.
  • 9.
  • 10.
    메트릭스 시간 + 수치정보 [Timestamp, Namespace, ] [1406886733, us-west1.node1.cpu.usage, 83] [1406886734, us-west1.node1.cpu.usage, 50] [1406886735, us-west1.node1.cpu.usage, 3]
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
    결론 2 (시스템, 어플리케이션)by 2 (로그, 메트릭스) 1. 시스템 로그 2. 시스템 메트릭스 3. 어플리케이션 로그 4. 어플리케이션 메트릭스
  • 16.
    Docker An open platformfor distributed applications for developers and sysadmins.
  • 17.
  • 18.
    로그 & 모니터링 2(시스템, 어플리케이션) by 2 (로그, 메트릭스) 1. 시스템 로그 2. 시스템 메트릭스 3. 어플리케이션 로그 4. 어플리케이션 메트릭스
  • 19.
    도커 로그 &모니터링 구조도 (1)
  • 20.
    도커 로그 &모니터링 구조도 (2)
  • 21.
    도커 로그 &모니터링 1. 도커 호스트 시스템 로그 2. 도커 호스트 시스템 메트릭스 3. 컨테이너 어플리케이션 로그 4. 컨테이너 어플리케이션 메트릭스 5. 컨테이너 메트릭스
  • 22.
    도커 호스트 시스템로그 기존 방식과 다르지 않음 뒤에서 다시
  • 23.
    도커 호스트 시스템메트릭스 기존 방식과 다르지 않음 뒤에서 다시
  • 24.
    컨테이너 어플리케이션 로그 생각해볼수 있는 방법 컨테이너 안에서 수집 어플리케이션 컨테이너에서 수집기 운용 컨테이너 외부에서 수집 Docker 로그 파일 직접 사용
  • 25.
    서비스(컨테이너)적인 사고법 로그는 서비스의일부분이 아님 컨테이너에는 데이터가 저장되어서는 안 됨 The Twelve Factor App http://the-twelve-factor-app.herokuapp.com/
  • 26.
    The Twelve FactorApp - Log (1) 로그는 모든 실행중인 프로세스와 백엔드 서비스의 누적되며 시간순으로 수집되고 정렬되는 이벤트 스트림이다. 일반적으 로 어플리케이션이 직접 생성하는 로그는 한 줄에 하나의 이 벤트를 텍스트 포맷으로 기록한다(예외를 추적하는 로그는 여러줄로 쓰여지기도 한다). 로그는 고정된 시작과 끝이 없으 면 어플리케이션이 실행되는 한 계속된다. Twelve Factor App은 어플리케이션의 출력 스트림의 목적지 나 어디에 저장되는 지 일체 간섭하지 않는다. 어플리케이션 은 로그를 작성하거나 로그 파일을 관리하려고 해서는 안된 다. 로그 파일을 관리하는 대신 각각의 실행중인 프로세스는 자신의 이벤트 스트림을 버퍼없이 stdout에 출력한다.
  • 27.
    The Twelve FactorApp - Log (2) 로그는 시간순으로 수집되고 정렬되는 이벤트 스트림이다. -> 표준 출력에 출력! 출력 스트림의 목적지나 어디에 저장되는 지 일체 간섭하지 않는다. -> 어플리케이션에는 로그에 대한 설정/로직이 없어야함!
  • 28.
    도커 로그(로그 파일을통한 수집) docker logs 명령어 json으로 저장 docker inspect로 위치 파악 /var/lib/docker/containers 디렉터리의 {containerid}-json.log 접근시 root 권한 필요
  • 29.
    progrium/logspout Docker Log Router 컨테이너로실행 syslog 지원 HTTP API 지원
  • 30.
  • 31.
    progrium/logspout 장단점 장점 logspout 컨테이너하나면 됨 매우 일관적인 로그 수집 시스템(표준 출력) 12 Factor App에서 환경변수로 설정을 관리하는 것과 비슷 단점 컨테이너에 문제가 생기면 로그 수집 정지(?!) 약간의 딜레이 stdout과 stderr만 수집 가능 어플리케이션 설계시 고려가 필요
  • 32.
    컨테이너 어플리케이션 메트릭스 기존과크게 다르지 않음 메트릭스는 대개 실시간 데이터 어플리케이션에서 라이브러리로 직접 보냄 필요한 경우 파일이나 다른 수집기 사용
  • 33.
  • 34.
    cgroup 가상화된 컨테이너별 데이터수집 Resouce 메트릭스 sys/fs/cgroup 에서 수집 가능 Network & Exit Time … Gathering LXC and Docker containers metrics
  • 35.
    sys/fs/cgroup /sys/fs/cgroup/ ├── cpu │ ├──docker │ │ ├── 0660f4e1d4054d4ebb6a3212a35b8ba1593dee7e26a6cc96999f796 465bce9f7 │ │ ├── 09ecfbb7a3cffbd0860a7ae163bfa6bbf5ad73c730932df62127531 1ef16d04d │ │ ├── 2ab6917f2711586438b8ade5b55b55a15e94ae6209831f8fc4dd47e 4b288cafe │ │ ├── 42e782ffcceafbdb6e939abbf6a4f71b9089ccd06dae3349b3429ad 651bf5814 │ │ ├── 61a8ffc27ad4f2d4c81b4b70d1f575b5593df8433c7edf47231efb4 7fd3607a7 │ │ ├── afb4bfe3db0ddf38db9ac4b2b08150885ddf090696722e066a07923 5b4ce964d │ │ └── b6b689622627c477b298a1da6d9020ce517ef5ca9f45ca392e51e29 7c962d469 │ └── user │ └── 1000.user │ └── c1.session ...
  • 36.
    cgroup 데이터 수집기 Diamondcollector CpuAcctCgroupCollector MemoryCgroupCollector Sensu Cgroup Metrics Plugin docker-metricsd
  • 37.
    Diamond 예제 [[MemoryCgroupCollector]] enabled =True [[CpuAcctCgroupCollector]] enabled = True
  • 38.
    docker-metricsd + fluentd $curl http://host.example.com:12375/containers/f9093f3df8d8/json | jq . { "ID": "f9093f3df8d84db914f544139d828e3c7ba7f5a353f83220c0580536b61ec5c3", ... "Metrics": { "memory": { "failcnt": 0, "stats": { "unevictable": 0, "total_unevictable": 0, "total_swap": 0, "total_rss": 380928, "total_pgpgout": 681084,
  • 39.
    도커 메트릭스 &로그 수집 최종 구조도
  • 40.
    도커 메트릭스 &로그 수집 최종 구조도 (2)
  • 41.
    도커 로그 &모니터링 결론 1. 도커 호스트 시스템 로그 기존과 같음(ex - host에서 syslog-ng 사용) 2. 도커 호스트 시스템 메트릭스 기존과 같음(ex - host에서 diamond 사용) 3. 컨테이너 어플리케이션 로그 표준 출력으로 로그 기록 json 파일 / logspout으로 수집 4. 컨테이너 어플리케이션 메트릭스 기존과 비슷함(ex - 어플리케이션에서 직접 데이터 저장소로) 5. 컨테이너 메트릭스 Diamond or docker-metricsd(Cgroup 메트릭스 데이터 수집)
  • 42.
    Configuration Management Docker BaseImage Syslog Diamond docker-metricsd Docker Logspout
  • 43.
    Demo Metrics Server ElasticSearch &Kibana Graphite & Grafana App Server diamond system cgroup syslog-ng logspout
  • 44.
    Demo - Metrics-Server DigitalOcean Image Docker 1.1.1 Ubuntu 14.04
  • 45.
    Fig 설치 $ curl-L https://github.com/orchardup/fig/releases/download/0.5.2/ linux > /usr/local/bin/fig $ chmod +x /usr/local/bin/fig
  • 46.
    ElasticSearch & GrafanaSetup $ git clone https://gist.github.com/f0dc7d9e05238ffd0f2f.git ~/moni toring $ cd monitoring $ fig up
  • 47.
  • 48.
  • 49.
    Demo - App-Server DigitalOcean Image Docker 1.1.1 Ubuntu 14.04
  • 50.
    Diamond 설치 $ apt-getupdate $ apt-get install make pbuilder python-mock python-configobj python -support cdbs $ git clone https://github.com/BrightcoveOS/Diamond.git $ cd Diamond/ $ make builddeb $ dpkg -i build/diamond_3.4.573_all.deb $ git clone https://gist.github.com/d0f9c491f8aa8ff42f16 /etc/diamo nd/gist $ cp /etc/diamond/gist/diamond.conf /etc/diamond/diamond.conf $ service diamond start
  • 51.
    Diamond 설정 Graphite Handler설정 [[GraphiteHandler]] host = 0.0.0.0 port = 2003 timeout = 15 batch = 1 수집 간격 설정 [collectors] interval = 5
  • 52.
  • 53.
    Diamond - cgroup설정 [collectors] [[MemoryCgroupCollector]] enabled = True [[CpuAcctCgroupCollector]] enabled = True
  • 54.
  • 55.
    syslog-ng $ apt-get install-y syslog-ng-core syslog-ng $ git clone https://gist.github.com/87d0d902663390b11ff6 /etc/syslo g-ng/gist $ cp /etc/syslog-ng/gist/syslog-ng.conf /etc/syslog-ng/syslog-ng.co nf
  • 56.
    syslog-ng.conf @version: 3.5 @include "scl.conf" options{ time_reap(30); mark_freq(10); keep_hostname(yes); }; source src { unix-stream("/dev/log"); internal(); system(); }; destination d_network { udp( "0.0.0.0" port(5140) ); }; log { source(src); destination(d_network); };
  • 57.
    agent-td:syslog_to_elasticsearch $ docker run-d -p 5140:5140/udp -e SYSLOG_TAG=syslog.system -e SYSLOG_FORMAT= -e SYSLO G_TIME_FORMAT= -e ES_HOST=<ES_HOST> -e ES_TAG=syslog.** nacyot/syslog _to_elasticsearch
  • 58.
  • 59.
    logspout 테스트 컨테이너 실행 $docker run -d busybox /bin/sh -c "while true; do echo Container 1 ; sleep 1; done" $ docker run -d busybox /bin/sh -c "while true; do echo Container 2 ; sleep 5; done" logspout 실행 $ docker run -d --name log -p 9500:8000 -v=/var/run/docker.sock:/tm p/docker.sock progrium/logspout $ curl $(docker port log 9500)/logs Syslog로 보내기 $ docker run -v=/var/run/docker.sock:/tmp/docker.sock progrium/logs pout syslog://0.0.0.0:5141
  • 60.
    agent-td:syslogtoelasticsearch $ docker run-d -p 5141:5140/udp -e SYSLOG_TAG=docker.log -e ES_TYPE=docker -e ES_HOST=<ES_HOST> -e ES_TAG=docker.** nacyot/syslog _to_elasticsearch
  • 61.
  • 62.
    메트릭스 & 로그수집의 미래 도커다운 해결책 로그 수집기의 컨테이너화 메트릭스 수집기의 컨테이너화
  • 63.
    앞서 미뤄둔 이야기 호스트에서돌려야하는 수집기 도커 호스트 시스템 로그 도커 호스트 시스템 메트릭스 (컨테이너 메트릭스)
  • 64.
  • 65.
    Just Docker Docker BaseImage Docker Logspout Syslog-ng Diamond docker-metricsd
  • 66.
    비교 Host + DockerDocker Docker Base Image Syslog Diamond docker-metricsd Docker Logspout Docker Base Image Docker Logspout Syslog-ng Diamond docker-metricsd
  • 67.
    장점 Stateless한 수집 시스템 컨테이너로로그 수집 시스템 추상화 컨테이너로 수집기 논리적 분리 사용하고 싶은 수집기로 쉽게 변경 가능 컨테이너 교체
  • 68.
    단점 / 문제점 컨테이너에문제가 생겼을 때 대응 필요한 건 컨테이너의 정보가 아닌 호스트의 정보 호스트의 정보를 어떻게 가져올 수 있을까? 호스트의 정보를 가져올 수 있을까?
  • 69.
    해결법 $ docker run-d -v /proc:/host_proc:ro -link nuxeoServer:nuxeo -nam e collector nuxeo/diamond -v /proc:/hostproc:ro 로그 수집 모듈의 로직을 일일히 다 바꿔줘야함 아직은 비현실적인 해결책
  • 70.