EFK安装配置
前言
微服务使用Docker部署后,日志处理就是一个问题。我所知道的目前是两种处理方式。
1. 如果项目业务量不大,则可以在docker run的时候通过-v命令把容器内的日志目录挂载到宿主物理机的真实目录上。这样就能直接在物理主机上查看。
例:假设当前主机要运行三个微服务,则三个微服务镜像启动的时候,docker run后面跟 -v /logs:/home/opt/logs则可以将容器内的logs目录挂载到物理主机的/home/opt/logs中。
2. 上面的方法有个最明显的弊端就是如果容器运行在不同的物理主机上,则如果要查看各个微服务的日志,则需要登录各自机器。业务量小还好,如果业务量大,单个微服务势必做负载均衡,运行多个实例,这时候,要每台机器登录,则很耗费时间。还有一点,业务发展到后期,由于应用日志中的数据记录了用户的行为,所以需要做分析提取出有用的数据。
这时候,日志集中式解决框架就派上用场了,我用的是现在泛滥的EFK解决方案,它包办了数据采集,数据分析,数据展示,而且网上中文资源也多。
EFK简介
-
EFK就是elasticsearch+filebeat+kibana,其中elasticsearch是核心,负责数据的存储,分析,检索,filebeat负责数据采集,轻量级的logstash。如果用logstash,就叫ELK,这个简称目前在网上更普遍一点。kibana负责数据展示,用的nodeJs写的一个web网站。
三者的大致工作流程我画了一张图,如下:
-
filebeat轻量级的缘故,所以一般和容器安装在一起,采集本地日志然后发送给elasticsearch,官网上介绍filebeat传送数据的时候使用了敏感压力协议,如果检测到elasticsearch接收数据变慢,则会自动调整传输速率。
- kibana 通过rest请求elasticsearch获取数据,并展示在web页面上,自带多种图表和开发者工具。
-
图中的app可以理解成某些微服务内置的应用,需要从elasticsearch中进行读写,例如在程序中使用jest直接操作elasticsearch。
elasticsearch:这套日志方案中的核心,它的搜索引擎用的是lucene,所以可以胜任数据的检索。它有自己一套基于restful风格的查询语言。
EFK安装
前提: 官方说明三个套件的版本必须一致,我用的是6.1.0。efk迭代很快,现在已经是6.2.x了。我的机器是ubuntu64,如果是别的OS,则需要去官网查看对应的安装方式
elasticsearch安装
使用命令行安装
- 下载安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.0.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.0.tar.gz.sha512 - 检查包的合法来源性
shasum -a 512 -c elasticsearch-6.1.0.tar.gz.sha512 - 解压安装包
tar -xzf elasticsearch-6.1.0.tar.gz - 启动
cd elasticsearch-6.1.0/
sudo sysctl -w vm.max_map_count=262144 #启动需要检查这个参数,一般linux这个参数值都偏小
./bin/elasticsearch -d #跟上-d表示后台运行 - 检查启动是否正常
curl ‘http://localhost:9200/?pretty‘,出现一串信息json串表示安装成功
elasticsearch配置
elasticsearch的配置文件是elasticsearch.yml,在elasticsearch-6.1.0/config目录下,IP,port,集群都在这里面配置,每个配置项上面都有英文说明。具体深入需要自行查看官网文档。
kibana安装
-
kibana安装非常简单,按如下步骤执行即可:
- wget https://artifacts.elastic.co/downloads/kibana/kibana-6.1.0-linux-x86_64.tar.gz #下载
- tar -xzf kibana-6.1.0-linux-x86_64.tar.gz #解压
- cd kibana-6.1.0-linux-x86_64/ #进入安装目录
- ./bin/kibana #运行
- 浏览器中打开 http://ip:6501
PS:通过ps -ef | grep kibana是找不到kibana进程的,而是用ps - ef | grep node
filebeat安装
filebeat就是一个采集日志的工具,虽然简单,但是它的网上中文资料最少,所以折腾它的时间最长。
它的安装方式也是很多样,官方提供docker镜像,也提供apt/yum安装,我用的是后者,参考这里
官网上列出的安装命令比较多,也比较全面规范,先要在apt上下载elastic的公钥,添加elastic的仓储,下载安装apt-transport-https,我的ubuntu比较新,所以省略了,直接用了一条命令就安装成功了:
sudo apt-get update && sudo apt-get install filebeat
启动:
service filebeat start
关闭,重启同理
filebeat配置
filebeat的配置文件是filebeat.yml,在/etc/filebeat目录下,里面配置参数有很多,具体参考官网。用于基本的数据采集以及数据数据发送,只要配置这两处:
1. 采集日志文件位置,如下图,表示采集该主机下所有容器的日志:
2. elasticsearch和kibana的host地址,如下图:
配置完毕后,重启filebeat
登录kibana,进行Index patern页面
添加一个index patern:filebeat-
discoverytab页就有日志展示和统计了,如下图:
至此,配合微服务容器化的日志解决方案,EFK的安装配置就结束了。目前只是用到了它的初级功能,真正想要发挥elasticsearch的优势,这点操作远远不不够,需要深入了解它的倒排索引,查询语言,数据存储等等。