使用docker-compose快速搭建ELK日志分析系统
作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
ELK是一个非常常用的日志收集系统,它是由elasticsearch,logstash,kibana组成。本文通过docker-compose来快速搭建起一个ELK日志栈,使用了最简化的配置,可以立即用于开发环境或测试环境。如果用于生产环境的日志收集和分析,还需要进一步的完善。
首先简单了解一下ELK框架的概览,可通过下图来说明:
- ElasticSearch:有强大的搜索功能的无模式数据库,可以简单的横向扩展,索引每一个字段,可以聚合分组数据,索引收集的日志数据并使它更易于查询。
- Logstash:一个用于读取原始日志的工具,然后对日志进行分析和过滤,最后可以将其发送到另外一个服务,如索引或者存储系统,这里它将数据发送到ElasticSearch中。
- Kibana:一个基于JavaScript的关于Elasticsearch的图形化接口。它可以用来运行Elasticsearch的查询,并且将结果以各种图表的方式可视化。支持Lucene的查询字符串的语法和Elasticsearch的过滤功能。
下面就来进行ELK栈的搭建。所用的环境机器名为centos7,ip地址为192.168.71.131。
我们首先进行logstash配置文件的编写,如下:
在上面的配置文件中,input部分配置logstash的input plugin,这里设置为在tcp和udp端口5000进行监听。logstash支持多种input插件,可以通过这些插件收集不同数据源的日志。详细信息参考Input plugins。
类似的,output部分配置其output plugin,这里设置将数据发送到elasticsearch进行进一步处理。详细信息参考output plugin.
还可以在配置文件中配置Filter plugins,以便对于原始的日志数据进行过滤。这里没有配置filter部分。关于logstash配置文件的完整说明可以参考官方文档。
完成了logstash的配置文件,下一步就可以编写ELK的docker-compose的配置文件了:
在启动此compose file之前,需要将主机的vm.max_map_count值调高(链接),命令如下:
[yangdong@centos7 ~]$ sudo sysctl -w vm.max_map_count=262144
[sudo] password for yangdong:
vm.max_map_count = 262144
然后在docker-compose.yml和logstash.conf所在的文件夹下启动docker-compose:
[yangdong@centos7 logging]$ docker-compose up
...
观察程序的日志输出,确认启动正常,这样我们的ELK栈就快速搭建成功了。
目前只是搭建了ELK栈,还没有日志传输到logstash上面,下面就使用上篇文章“通过Logspout路由docker容器日志”中构建的logspout来将另外一台主机上的docker日志发送到logstash上。这个主机的机器名为centos7-A,ip地址为192.168.71.167。整个架构如下图所示:
通过如下命令启动logspout容器:
[yangdong@centos7-A ~]$ docker run -d --name="logspout" \
--volume=/var/run/docker.sock:/var/run/docker.sock \
-e ROUTE_URIS=logstash+tcp://192.168.71.131:5000 \
registry.cn-beijing.aliyuncs.com/andyyoung01/logspout-logstash
这样,整个centos7-A机器上的docker日志都能收集到ELK所在的机器上了。类似的,如果有多台docker主机,都可以在其主机上运行此命令来将日志集中收集到ELK机器上。
本篇通过docker-compose快速搭建了ELK日志栈,没有考虑生产环境中可能遇到的各种情况。如果要搭建ELK日志分析系统的生产环境,或者需要保存一定时间长度的日志,需要考虑使用docker中的volume来将数据保存到特定位置,也可以通过搭建elasticsearch集群的方式进行扩展。