Docker日志管理

一、docker日志

1.docker引擎日志

Docker 引擎日志一般是交给了Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7, Ubuntu 16.04)

前者:一般位于/var/log/upstart/docker.log下

后者:我们一般 通过journalctl -u docker来进行查看

2.docker容器日志

docker日志驱动程序有:

none:运行的容器没有日志,docker logs也不返回任何输出

local:日志以自定义格式存储,旨在实现最小开销

json-file:日志格式为JSON。Docker的默认日志记录驱动程序

syslog:将日志消息写入syslog。该syslog守护程序必须在主机上运行

journald:将日志消息写入journald。该journald守护程序必须在主机上运行

gelf:将日志消息写入Graylog扩展日志格式(GELF)端点,例如Graylog或Logstash

fluentd:将日志消息写入fluentd(转发输入)。该fluentd守护程序必须在主机上运行

awslogs:将日志消息写入Amazon CloudWatch Logs

splunk:使用HTTP事件收集器将日志消息写入splunk

etwlogs:将日志消息写为Windows事件跟踪(ETW)事件。仅适用于Windows平台

gcplogs:将日志消息写入Google Cloud Platform(GCP)Logging

logentries:将日志消息写入Rapid7 Logentries

docker常用日志驱动程序:

json-file:日志格式化为JSON,这是 Docker 默认的日志驱动程序

journald:将日志消息写入journald,journald 守护程序必须在主机上运行

syslog:将日志消息写入syslog 工具,syslog 守护程序必须在主机上运行

gelf:将日志消息写入Graylog扩展日志格式(GELF)端点,例如Graylog或Logstash

查看docker当前日志驱动程序:docker info | grep "Logging Driver"

修改日志驱动程序:vim /etc/docker/daemon.json

{
		  "log-driver": "syslog"   \\修改的日志驱动类型
		}

给指定容器修改日志驱动

docker run -itd  --log-driver syslog daocloud.io/nginx

三、日志收集方案

基于rsyslog的日志收集方案

日志收集服务器:syslog-server

1.修改rsyslog配置文件启动TCP/UDP的端口

vim /etc/rsyslog.conf

# Provides UDP syslog reception
$ModLoad imudp       \\接收使用UDP协议转发过来的日志,开启514端口
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp       \\接收使用TCP协议转发过来的日志,开启514端口
$InputTCPServerRun 514

2.修改rsyslog配置文件定义日志模板

vim /etc/rsyslog.conf

$template RemoteLogs,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
\\定义日志模板格式目录
*.*?RemoteLogs
&~        \\处理所有远程日志,后续规则不再处理

3.重启rsyslog服务,查看端口情况

docker java日志 时间 docker build 日志_驱动程序

启动服务之后便会生成目录,浏览网页生成日志

docker java日志 时间 docker build 日志_驱动程序_02

发送日志服务器:syslog-client

通过rsyslog发送

vim /etc/rsyslog.conf

#随便选择一种就可以了
*.* @@192.168.0.101:514  \\TCP协议发送,资源占用高,可靠
*.* @192.168.0.101:514    \\UDP协议发送,传送速度快,占用小,容易丢失数据
*.* @(z9)192.168.0.101:514   \\压缩发送,减少流量消耗,额外磁盘消耗,可用性高

收集docker容器日志到日志服务器中

docker容器日志默认是json-file日志驱动程序

方法一:

1.修改日志驱动程序

vim /etc/docker/daemon.json

{
		  "log-driver": "syslog"
		}

2.通过某个容器修改

docker run -itd --log-driver syslog daocloud.io/nginx

方法二:

修改/etc/docker/daemon.json文件

在Docker配置文件中设置全局转发,注释掉syslog client配置文件中内容

#*.* @@192.168.0.101:514

{
		  "log-driver": "syslog"
		  " log-opt syslog-address" : tcp://192.168.0.101:514
		}

创建容器直接指定日志服务器

docker run -d -p 8080:80 --log-driver syslog --log-opt syslog-address=tcp://localhost:514 --log-opt tag="nginx" --name nginx nginx

四、Logstash日志收集方案

Logstash需要依赖JDK的运行环境

1.安装JDK环境

tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/

vim /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

source /etc/profile

查看是否安装成功:java -version

docker java日志 时间 docker build 日志_docker java日志 时间_03

2.下载安装Logstash

tar zxf logstash-6.2.4.tar.gz -C /usr/local/

3.配置Logstash(该软件不需要编译安装,直接到目录配置使用)

docker java日志 时间 docker build 日志_vim_04

创建简单的配置文件在该目录的bin目录里

input常用的输入源有:file、syslog、redis、log4j、apache log、nginx log

output常用的输出有:Elasticsearch 、file、redis、hdfs(安装插件)、zabbix、mongodb

vim bin/logstash.conf

input {
        file {
                path => "/var/log/docker-client/dockerd-current.log"  \\读取日志的位置
             }
      }
output {
        stdout {
                codec => rubydebug              \\输出到屏幕
                }
        }

检查配置文件:./bin/logstash -f bin/logstash.conf -t

启动Logstash:./bin/logstash -f bin/logstash.conf

五、基于ELK的日志分析/存储/展示

ELK分别是ElasticSearch、Logstash、Kibana这三款开源软件组成

ELK工作原理

1.先部署好Logstash,使用Logstash设置一个叫grok的过滤器

2.下载安装ElasticSearch(跟Logstash一样不需要编译安装)

tar zxf elasticsearch-6.2.4.tar.gz -C /usr/local/

cd /usr/local/elasticsearch-6.2.4/

docker java日志 时间 docker build 日志_驱动程序_05