[docker]로깅

코드깎는 노인·2021년 7월 30일
0
post-thumbnail

로깅

json-file 로그

도커는 도커컨테이너의 표준출력(stdOut)과 에러(stdErr)로그를 메타파일로 저장한다.

docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
mysql:5.7

mysql이미지는 포그라운드모드로 실행되어 -d로 백그라운드로 실행한다.
docker logs -ft --tail 2 mysql
--tail:마지막 2줄 로그확인
-f:스트림으로 로그확인(실시간)
-t:타임스탬프찍기
/var/lib/docker/containers/${container_ID}/${container_ID}-json.log
컨테이너 로그 경로

docker run -it \
--log-opt max-size=10k --log-opt max-file=3 \
--name log-test
ubuntu:14.04

로그파일 최대사이즈및 갯수 설정

syslog

syslog는 유닉스계열 운영체제의 표준중 하나이다.logentries,loganalyzer같은 툴을 이용해 웹 인터페이스로 확인가능하다.

docker run -d --name syslog_container \
--log-driver=syslog \
ubuntu:14.04 \
echo syslogtest

/var/log/syslog
데비안계열 시스로그경로
/var/log/messages
레드헷계열 시스로그경로
journalctl -udocker.service
시스로그 출력

syslog서버와 클라이언트로 분리하여 로그저장하기

docker run -it -h rsyslog --name rsyslog_server -p 514:514 -p 514:514/udp ubuntu:14.04

1.514포트를 오픈한 컨테이너 생성. -h는 컨테이너호스트ip의 alias옵션이다.

#provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

#provides TCP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

2./etc/rsyslog.conf의 syslog설정 주석을 해제한다.
3.service rsyslog restart

docker run -it \
--log-driver=syslog \
--log-opt syslog-address=tcp://172.17.0.2:514 \
--log-opt tag="mailing" \
--name mailClient \
ubuntu:14.04

4.로그가 생성되는 클라이언트를 생성한다.syslog-address주소는 서버주소를 입력한다.udp로 하고자 하면 tcp=>udp로 변경한다.tag옵션은 로그마다 설정한 태그가 붙는다.클라이언트에서 echo hello를 생성후 서버에서
tail /var/log/syslog를 실행하면 로그를 확인할 수 있다.

docker run -it \
--log-driver=syslog \
--log-opt syslog-address=tcp://172.17.0.2:514 \
--log-opt tag="mailing" \
--log-opt syslog-facility="mail" \
--name mailClient \
ubuntu:14.04

log-opt syslog-facility="mail"옵션을 통해 /var/log/mail.log라는 별도의 로그파일을 생성하였다.

fluentd

오픈소스 로깅툴이다.포맷으로 JSON을 사용하며 AWS S3,HDFS,MongoDB등에 저장가능하다.

docker run --name mongoDB -d \
--name mongo \
-p 27017:27017 \
mongo

1.몽고db컨테이너를 생성한다.

<source>
 @type forward
</source>

<match docker.**>
@type mongo
database nginx
collection access 
host 172.17.0.6 
port 27017
flush_interval 10s
user myUser
password myPassword
</match>

collection access:저장할 컬렉션명
host 172.17.0.6 :mongo컨테이너 주소
user : mongodb유저(미설정시 삭제)
password:mongodb패스워드(미설정시 삭제)

docker run -d --name fluentd -p 24224:24224 \
-v $(pwd)/fluent/conf:/fluentd/etc/fluent.conf \
-e FLUENTD_CONF=fluent.conf \
alicek106/fluentd:mongo

2.fluent.conf파일을 생성하고 파일을 공유한 fluentd컨테이너 생성

docker run -p 80:80 -d \
--log-driver=fluentd \
--log-opt fluentd-address=<fluentdIpAddress>:24224 \
--log-opt tag=docker.nginx.webserver \
nginx

3.브라우저로 80포트에 접근하면 로그가 mongodb에 저장된다.<match docker.** >에 맞게 tag를 docker.nginx.webserver로 설정하였다.

docker exec -it mongDB mongo
show dbs
use nginx
show collections

4.생성된 데이터를 확인한다.

profile
내가 볼려고 만든 블로그

0개의 댓글