Docker 용기 로그 수집

2535 단어 Docker
Nginx 로그 절단 스 크 립 트
[root@node1 ]# cat ngxlog.sh
#!/bin/bash
nginx_logs_dir="/var/log/nginx/web/"
#nginx_pid_file="/var/log/nginx/nginx.pid"

pid=`ps -ef|grep nginx|grep apache|awk '{print $3}'`
nginx_log_today="$nginx_logs_dir/access_`date +%Y%m%d`.log"

[ -f "$nginx_log_today" ] && exit 1

mv $nginx_logs_dir/access.log $nginx_log_today
/bin/kill -USR1 ${pid}

[ -f $nginx_pid_file ] && /bin/kill -USR1 $(cat $nginx_pid_file)

syslog 드라이버 설정:
rsyslog 에 대한 자세 한 사용 설명 보기
새 고 리 눅 스 개인 요리 문서 - 제1 9 장, 인식 과 분석 로그 인 파일
[root@node1 ]# cat /etc/rsyslog.conf
.........
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none;local2.none     /var/log/messages  //         messages  
local1.*                        /var/log/nginx     //     
& ~
local2.*                        /var/log/web2log    //     
& ~
.........
[root@node1 ]# vim /etc/logrotate.d/syslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/nginx     //    
/var/log/web2log    //     ,     /var/log             
{
    missingok
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

    [syslog-facility -->          ]
[root@node1 ]# docker run -d --name nginx --log-driver=syslog --log-opt syslog-facility=local1 -p 81:80 nginx:v1
[root@node1 ]# docker run -d --name web2 --log-driver=syslog --log-opt syslog-facility=local2 -p 82:80 nginx:v1
        :
[root@node1 ]# ll -h /var/log/{nginx,dp1web}
-rw------- 1 root root  89K 9   30 10:45 /var/log/dp1web
-rw------- 1 root root 6.0K 9   30 10:48 /var/log/nginx

journald 로그 구동
우선 미 러 로그 출력 을 stdout, stderr 로 확보 합 니 다.
[root@node1 ]# docker run -d --name n1 --log-driver=journald -p 90:80 nginx
[root@node1 ]# journalctl CONTAINER_NAME=n1
  python      :
[root@node1 ]# yum install python2-systemd -y
[root@node1 ]# cat log.py
#!/usr/bin/python
import systemd.journal
reader = systemd.journal.Reader()
reader.add_match('CONTAINER_NAME=web')

for msg in reader:
  print '{CONTAINER_ID_FULL}: {MESSAGE}'.format(**msg)

fluentd 로그 구동 다운로드 미 러
fluentd 홈 페이지 문서
우선 미 러 로그 출력 을 stdout, stderr 로 확보 합 니 다.
응용 예시 보기
check config file:
[root@node1 ]# fluentd --dry-run -c fluent.conf*

좋은 웹페이지 즐겨찾기