1.ELK简介
ELK是ElasticSearch+LogStash+Kibana的缩写,是现代微服务架构流行的分布式日志解决方案,旨在大规模服务的日志集中管理查看,极大的为微服务开发人员提供了排查生产环境的便利 。如果规模较小的日志量,直接使用ElasticSearch、Logstash、Kibana是可以满足其应用的,但是对于日志量较大的中大规模服务集群来说,这3个中间会引入Filebeat、Kafka、Zookpeer三个中间来大幅度提升采集性能、可靠性、可扩展性 。目前来说,大部分公司使用的解决方案架构如下图:

文章插图
此篇文章,我们一起来熟悉整个流程的搭建,为了方便演示,环境基于docker(正常情况下,因为这套系统是直接linux部署的,因为开销实在是很大) 。
2.API服务
先建一个api服务,使用过滤器,让请求前后都会产生日志

文章插图
我这里,将日志写到根目录下logs文件夹,以MyDockerApi *.log产生日志文件,接下来,发布,并上传到linux服务器,并用docker启动,不会的同学传送门:https://www.cnblogs.com/saltlight-wangchao/p/16646005.html 。

文章插图
由于docker的隔离性,想要采集日志,必须给服务docker挂载到linux宿主机的盘内,上图就是我为该API服务创建的日志写入目录,因为可能一个宿主机上可能有多个API服务,所以,可以按照规则,继续新建服务文件夹,用于存放不同API服务的日志,我这里就弄了一个先 。
docker run --name API8082 -p 8081:5000 -v /etc/localtime:/etc/localtime--解决 docker 容器时间与本地时间不一致 -v /home/fileBeate/logs/mydockerapi1:/app/logs--挂载目录,降容器的app/logs目录挂载到宿主机,我们要指定该服务采集的目录 my1api 启动后,请求该服务

文章插图
至此,api服务所产生的日志,已经写到我们要采集的指定目录里 。
3.Filebeat
Filebeat是用于监视、采集、转发指定位置的文件轻量级开源工具,使用golang编写,就采集来说,其性能和资源利用率远好于基于jvm的logstash 。
在这里,filebeat做为kafka的生产者
1)拉取filebeat镜像
docker pull docker.elastic.co/beats/filebeat:6.4.22)创建filebeat.yml配置文件,进行vim修改
基础的配置
---filebeat.inputs:- type:logenabled: truefields:log_topics: mydockerapi1--命名以服务名字,注意,因为一台宿主机可能有多个服务,而我们采集也要分开,再来一组-typepaths:- /usr/share/filebeat/mydockerapi1-logs/*.log--这里是docker内的路径,千万别写错了 。如果是output.kafka:hosts:- "10.0.8.17:9092"--kafka的地址topic: "elk-%{[fields][log_topics]}"--消息队列的topic3)运行
【微服务系列之分布式日志 ELK】docker run --restart=always--name filebeat -d -v /home/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /home/fileBeate/logs/mydockerapi1/:/usr/share/filebeat/mydockerapi1-logsdocker.elastic.co/beats/filebeat:6.4.2进入filebeat容器内部如下图,可以看到已经采集到日志文件

文章插图
使用 docker logs -f filebeat 命令,查看filebeat日志

经验总结扩展阅读
- 快速安装 服务器之Apollo单机部署
- 正谊服务区属于哪个市
- 什么是微笑抑郁症
- 七夕节红包发多少合适
- 适合长期不换的微信极简风格置顶签名 很火又很干净的签名
- 29 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-终篇
- 资生堂护肤品有哪些系列?
- 男朋友不回微信就会胡思乱想的星座女
- 二 Selenium+Python系列 - 元素定位那些事
- 安装与配置FTP服务器