容器的日志管理ELK

序言

    在各种系统中,最关键的部分莫过于日志了,各种各样的应用的日志,系统的日志,从而需要监控,在查看容器的日志的时候,最常的命令应该就是docker logs cointainerid来查看日志了。


docker logs命令介绍

    docker info可以查看日志记录的驱动程序,如下所示,使用的驱动为json文件。

容器的日志管理ELK

    日志路径如下:

容器的日志管理ELK

    docker logs主要就是读取容器控制台的错误输出和正常输出,这些日志也就是存放在json文件中,也就是说是,无论容器是running状态还是其他的状态,都是可以读取的。

    当应用程序的输出不是在控制台的时候,那么在使用docker logs是看不到日志的,另外当容器运行很久之后,这个日志可能很大,从而可以使用重定向写入到文件中保存,如下帮助文件:

容器的日志管理ELK

    -f的主要作用表示和linux上的top是一样的,用来持续的输出日志文件。

    -t 可以使用时间进行过滤。

使用ELK收集日志

    在使用ELK来收集各个主机的日志的时候,主要就是使用filebeat来监控和收集日志,然后发送给es,然后在kibana中显示。

容器的日志管理ELK


1、 安装filebeat

    filebeat服务主要用来设置监控哪些日志,将日志发送到哪里进行存储。配置文件路径为/etc/filebeat/filebeat.yml。

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.3-x86_64.rpm

sudo rpm -vi filebeat-6.1.3-x86_64.rpm

    修改配置文件如下所示(主要启用日志监控功能,设置需要监控的日志路径):

容器的日志管理ELK

    设置日志发送给elasticsearch(如果不在本主机上,那么就写上远程主机的ip和端口):

容器的日志管理ELK

    启动服务,需要查看日志检查服务是否正常启动(配置文件为yaml格式的文件,修改错误的话会导致服务无法启动):

容器的日志管理ELK

    

2、 安装ELK容器

    ELK容器官方有镜像,从而可以直接进行运行。

容器的日志管理ELK

    5601端口主要是kibana的web访问接口,而9200主要是elasticsearch的json端口,用来接收日志信息,和上面的filebeat的端口相对应。

    访问9200端口,在没有接受到日志的时候,显示如下(http://192.168.1.222:9200/_search?pretty):

容器的日志管理ELK

    在新启动一个容器之后,那么就会收到日志信息,如下:

容器的日志管理ELK

    访问kibana,进行配置(http://192.168.1.222:5601):

容器的日志管理ELK


容器的日志管理ELK

容器的日志管理ELK

    点击创建index,然后显示如下:

容器的日志管理ELK

    多主机的时候,可以根据主机名来搜索日志:    

容器的日志管理ELK

    3、 可能出现的问题

    无法启动elk容器:报错如下:

elasticsearch max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] 

    主要原因是因为内核参数设置问题,在测试的时候,可能因为虚拟机的内存过小,而ELK属于重量级的产品,所以将vm的内存可以设置为4G,然后再修改内核参数如下:

容器的日志管理ELK

在kibana上显示无数据,如下:

容器的日志管理ELK

    主要检查时区的设置,当时间不一致的时候,是不能够正确显示日志信息的。


一键运行脚本

    主要是用来直接执行安装容器,设置相关参数,不过kibana的配置还是需要手动进行配置。

[root@docker2 ~]# cat collectlog.sh 

#!/usr/bin/bash


#run the elk containser's host ip

IP=192.168.1.222

#install filebeat

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.3-x86_64.rpm

sudo rpm -vi filebeat-6.1.3-x86_64.rpm

sed -i 's/  enabled: false/  enabled: true/' /etc/filebeat/filebeat.yml

sed -i "s/localhost/$IP/" /etc/filebeat/filebeat.yml

systemctl start filebeat.service

ps -ef|grep filebeat |grep -v grep 

if [ $? == 0 ];then

echo "filebeat service is OK"

else

echo "filebeat service is fail,check var/log/messages"

fi


#change the kernel settings

sysctl -w vm.max_map_count=262144

echo "vm.max_map_count=262144">> /etc/sysctl.d/99-sysctl.conf


#start elk container

docker run -p 5601:5601 -p 9200:9200  -itd --name elk kellyseeme/elk


netstat -ntlp |grep 9200  &>/dev/null && echo "elk container is running" || echo "must restart elk"


    

容器的日志管理ELK


上一篇:elasearch命令


下一篇:Kibana的安装及配置应用