容器日志实战

一、容器日志摘要
通常Docker的日志信息存储在计算机本地,当在分布式环境当中,日志会被分散到不同的服务器,导致日志查阅繁琐及效率低下,最好的办法就是集中化的日志管理方式。使用rsyslog可以将所有服务器上的Docker日志手机汇总到一台服务器上统一管理。

二、常见日志手机方式

1、基于rsyslog的日志收集方案

    Linux系统通常使用rsyslog来实现系统日志的集中管理(6.0版本之前为syslog),采用服务器端和客户端的模式。客户端只需要在本地syslog服务配置中添加日志服务器端的IP和端口号(514)就可以将日志发送到日志服务器。

(1)日志收集服务器(syslog-server)

①在配置文件/etc/rsyslog.conf中启用TCP/UDP端口,用于接收远程日志客户端传送过来的日志信息

使用ELK来收集docker日志 docker日志收集方案_vim

②定义日志模板并用于远程日志,将远程主机上传输的日志单独存放

$template RemoteLogs,"/var/log/%FROMHOST-IP%.log"
 *.* ?RemoteLogs
 & ~


(2)发送日志服务器(syslog-client)

vim /etc/rsyslog.conf
 *.* @@192.168.11.50:514
 *.* @192.168.11.50:514
 *.* @(z9)192.168.11.50:514


(3)收集docker容器日志到日志服务器中
docker容器日志默认是json-file日志驱动程序,需修改默认日志驱动

①全局修改
 /etc/docker/daemon.json
 {
     "log-driver": "syslog"
 }
 ②某个容器修改
 docker run -itd  --log-driver syslog daocloud.io/nginx


(4)配置Docker的log-driver直接把日志发送到远端

①取消rsyslog配置文件中的转发选项
 ②配置Docker全局变量(如docker无法启动,将后缀json修改为conf)
 /etc/docker/daemon.json
 {
     "log-driver": "syslog"
     " log-opt syslog-address" : tcp://192.168.11.243:514
 }
 ③或者运行容器时添加选项
 docker run -d -p 8080:80 --log-driver syslog --log-opt syslog-address=tcp://localhost:514 --log-opt tag="nginx" --name nginx nginx


2、Logstash日志收集方案

(1)安装JDK环境
 tar zxf jdk-8u91-linux-x64.tar.gz
 mv jdk1.8.0_91 /usr/local/java
 vim /etc/profile
 export JAVA_HOME=/usr/local/java
 export PATH=$JAVA_HOME/bin:$PATH
 export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
 source /etc/profile
 (2)安装Logstash
 tar xf logstash-5.2.2.tar.gz -C /usr/local/
 ln -s /usr/local/logstash-5.2.2/bin/* /usr/local/bin/
 (3)配置Logstash
 vim /usr/local/logstash-5.2.2/bin/logstash.conf
 input {
         file {
                 path => "/data/log/slave1/dockerd-current.log"
         }
 }output {
         stdout {
                 codec => rubydebug              //输出到屏幕
         }
 }

(4)测试

使用ELK来收集docker日志 docker日志收集方案_zookeeper_02

(5)一般使用rsyslog收集系统日志,logstash收集日志,两者配合,解析后的数据可以写入Elasticsearche/Kafka/MQ等等。

三、基于ELK的日志分析/存储/展示
1、ELK简介
ELK是一套完整的日志解决方案,由ElasticSearch、Logstash、Kibana三款开源软件组成。ElasticSearch是基于Lucene开发的愤怒时存储检索引擎,用来存储各类日志;Logstash对日志进行收集、分析爱,并将其存储供以后使用;Kibana是基于Node.js开发的展示工具,为前者提供用于日志展示的Web界面。
2、ELK单ElasticSearche平台部署

(1)安装ElasticSearch
 tar xf elasticsearch-5.2.2.tar.gz -C /usr/local/
 (2)修改配置文件
 vim /usr/local/elasticsearch-5.2.2/config/elasticsearch.yml
 network.host: 192.168.11.50
 (3)直接启动会报错,elasticsearch不允许用root用户启动
 useradd elas
 chown -R elas /usr/local/elasticsearch-5.2.2/
 vim /etc/security/limits.conf
     * hard nofile 65536
     * soft nofile 65536
 vi /etc/sysctl.conf
     vm.max_map_count=655360
 sysctl -p
 (4)切换到用户elas进行启动
 nohup /usr/local/elasticsearch-5.2.2/bin/elasticsearch &>/dev/null &
 (5)配置好之后可以浏览器登录192.168.11.50:9200查看软件版本
 (6)创建logstash的配置文件,并启动logstash
 vim /usr/local/logstash-5.2.2/bin/logstash-test.conf
 input {
         file {
                 path => "/data/log/slave1/dockerd-current.log"
         }
 }output {
         elasticsearch{
                 hosts => "192.168.11.50"
         }
 }
 (7)访问测试
 url 'http://192.168.100.14:9200/_search?pretty'


3、Kibana部署

(1)tar xf kibana-5.2.2-linux-x86_64.tar.gz -C /usr/local/
 (2)修改配置文件
 elasticsearch.url: "http://192.168.100.14:9200"
 (3)启动kibana
 /usr/local/kibana-5.2.2-linux-x86_64/bin/kibana


4、填坑
(1)如果ElasticSearch与logstash安装在同一机器,如果内存不足将导致ElasticSearch被kill掉
(2)在日志未生成前,kibana可能无法创建索引(没有create键)