컨테이너 로깅
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7
이렇게 mysql 을 깔아준다.
json-file log
docker logs 컨테이너name 를 이용해서 컨테이너 내부의 표준 출력을 볼 수 있다.
--tail 을 써서 마지막 로그 줄부터 출력할 수 있다.
ex) docker logs --tail 2 mysql 설명 : 마지막 2줄 확인
--since 유닉스 시간을 입력해 특정 시간 이후의 로그를 확인할 수 있다.
-t 옵션을 추가로 줘서 타임스탬프를 표시할 수도 있다.
-f 는 컨테이너에서 실시간으로 출력되는 내용을 확인할 수 있다 (유용하다)
기본적으로 컨테이너 로그는 JSON 형식으로 도커 내부에 저장된다. 이때 파일 경로는
cat /var/lib/docker/container/${CONTAINER_ID}/${CONTAINER_ID}-json.log 에 저장된다.
그러나 컨테이너 내부의 출력이 너무 많은 상태로 방치하면 json 파일의 크기가 계속해서 커질 수 있다.
그래서 !!!!
--log-opt를 사용하여 컨테이너 json 로그 파일의 최대 크기를 지정할 수 있다.
docker run -it
--log-opt max-size=10k --log-opt max-file=3
--name log-test ubuntu:14.04
syslog log
위와 다르네 syslog를 사용해 log를 저장할 수도 있는데 다음 명령어를 사용해야한다.
docker run -d --name syslog_container
--log-driver=syslog
ubuntu:14.04
echo syslogtest
syslog 로깅 드라이버는 기본적으로 로컬호스트의 syslog에 저장, 그러므로 파일 위치를 알아야 한다.
우분트 14.04 -> /var/log/syslog
우분트 16.04 -> docker.service 명령어로 확인
CentoOS, RHEL -> /var/log/messages
CentoOS -> jourmalctl -u 명령어로 확인
rsyslog
서버 구동
docker run -i -t
-h rsyslog
--name rsys_server
-p 514:514 -p 514:514/udp
ubuntu:14.04
서버 컨테이너 내부에서
vi /etc/rsyslog.conf
파일로 들어가 서버를 구동시키는 항목의 주석을 해체한다.
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
$ModLoad imtcp
$INPUTTCPServerRun 514
그후 service rsyslog restart로 재구동
그후 클라이언트에서
docker run -i -t
--log-driver=syslog
--log-opt syslog-address=tcp"///[serverIP:port]
--log-opt tag="mylog"
ubuntu:14.04
이런식으로 사용
fluentd logging
fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 도구이다. 도커 엔진의 컨테이너의 로그를 fluentd를 통해 저장할 수 있도록 플로그인을 공식적으로 제공해준다.
-> 데이터 셋은 JSON으로 사용한다.
예를 들어보자.
도커 서버 : 192.168.0.100
fluentd 서버 : 192.168.0.101
몽고DB 서버 : 192.168.0.102
몽고 컨테이서 생성
docker run --name mongoDB -d -p 27017:27017 mongo
그후
fluentd 서버 호스트에서 fluen.conf 파일을 수정한다.
로그 데이터 -> 몽고DB에 전송, access라는 이름의 컬렉션에 로그 저장, 몽고 컨테이너 호스트 주소와 포트를 지정
<match docker.**>
@type mongo
database nginx
collection access
host 192.168.0.102
port 27017
flush_interval 10s
</match>
그후 fluen.conf 파일이 있는 디렉터리에서 작업 수행
docker run -d --name fluentd -p 24224:24224
-v $(pwd)/fluen.con:/fluentd/etc/fluen.conf
-e FLUENTD_CONF=fluen.conf
alicek106/fluentd:mongo
그후 도커 서버에서로그를 수집할 컨테이너 생성한다.
docker run -p80:80 -d
--log-driver=fluentd
--log-opt fluentd-address=192.168.0.101:24224
--log-opt tag=docker.nginx.webserver
nginx
위와 같이 하면 호스트 80번 포트에 nginx 웹 서버에 접근할 수 있다.
docker exec -it mongoDB mongo 명령어를 사용해서 결과를 확인해보자.
그외 아마존 클라우드워치 로그가 있다. 다루지는 않겠다.