利用ELK搭建Docker容器化应用日志中心
概 述
最近自己疯狂地迷上了Docker容器技术!!!
的确,容器化是现如今互联网软件的大趋势,应用一旦容器化以后,需要考虑的就是如何采集位于Docker容器中的应用程序的打印日志供运维进行分析。
典型的比如Spring Boot应用的日志收集。本文将阐述如何利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,本文实验架构如下图所示:
ELK = Elasticsearch + Logstash + Kibana,是一套实时数据收集,存储,索引,检索,统计分析及可视化的解决方案。用它来作为我们项目的可视化日志中心是最合适不过的,互联网大厂基本家家都在用!!!
Elasticsearch
:它是一个实时全文搜索和分析引擎,用于存储和分析数据Logstash
:它是一个用来搜集、过滤日志的工具Kibana
:它是一个基于Web的图形界面工具,可以方便地用来进行数据可视化工作
另外本文所有软件环境均基于Docker容器来搭建,这也再次说明了Docker技术在环境搭建方面的得天独厚的优势!你一旦用上就停不下来了!
镜像准备
ElasticSearch镜像
Logstash镜像
Kibana镜像
Nginx镜像(作为容器化应用来生产日志)
开启Linux系统Rsyslog服务
修改Rsyslog服务配置文件:
vim /etc/rsyslog.conf
开启下面三个参数:
$ModLoad imtcp
$InputTCPServerRun 514
*.* @@localhost:4560
意图很简单:让Rsyslog加载imtcp模块并监听514端口,然后将Rsyslog中收集的数据转发到本地4560端口!
然后重启Rsyslog服务:
systemctl restart rsyslog
查看rsyslog启动状态:
netstat -tnl
部署Elasticsearch搜索引擎
docker run -d -p 9200:9200 \ -v ~/elasticsearch/data:/usr/share/elasticsearch/data \ --name elasticsearch elasticsearch
打开浏览器访问:
部署Logstash服务
添加 ~/logstash/logstash.conf
配置文件如下:
input {
syslog {
type => "rsyslog"
port => 4560
}
}
output {
elasticsearch {
hosts => [ "elasticsearch:9200" ]
}
}
配置中我们让Logstash从本地的Rsyslog服务中取出应用日志数据,然后转发到ElasticSearch数据库中!
配置完成以后,可以通过如下命令来启动Logstash容器:
docker run -d -p 4560:4560 \-v ~/logstash/logstash.conf:/etc/logstash.conf \--link elasticsearch:elasticsearch \--name logstash logstash \logstash -f /etc/logstash.conf
部署Kibana服务
docker run -d -p 5601:5601 \--link elasticsearch:elasticsearch \-e ELASTICSEARCH_URL=http://elasticsearch:9200 \--name kibana kibana
启动Nginx容器产生日志
docker run -d -p 90:80 --log-driver syslog --log-opt \syslog-address=tcp://localhost:514 \--log-opt tag="nginx" --name nginx nginx
很明显Docker容器中的Nginx应用日志转发到本地syslog服务中,然后由syslog服务将数据转给Logstash进行收集。
至此,日志中心搭建完毕,目前一共四个容器在工作:
试验验证
浏览器打开
localhost:90
来打开Nginx界面,并刷新几次,让后台产生GET请求的日志打开Kibana可视化界面:
localhost:5601
收集Nginx应用日志
查询应用日志
在查询框中输入 program=nginx
可查询出特定日志
看到没,有Docker技术在,无论搭建什么复杂的试验环境都是一两句命令的事情,反正我是离不开它了!
更多相关文章
- Apollo 源码解析 —— Config Service 操作审计日志 Audit
- 【从0到1学习边缘容器系列-4】弱网环境利器之分布式节点状态判定
- Docker容器跨主机通信之:直接路由方式
- Spring Boot日志框架实践
- 利用TICK搭建Docker容器可视化监控中心
- SpringBoot应用部署于外置Tomcat容器
- Python 中更优雅的日志记录方案
- 一看就懂,Python 日志模块详解及应用
- Pandas高端操作:10行代码解决用户游览日志合并排序问题