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服务,查看端口情况
启动服务之后便会生成目录,浏览网页生成日志
发送日志服务器: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
2.下载安装Logstash
tar zxf logstash-6.2.4.tar.gz -C /usr/local/
3.配置Logstash(该软件不需要编译安装,直接到目录配置使用)
创建简单的配置文件在该目录的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/