ELK专题:Day8——使用Metricbeat和X-Pack监控ELK集群
1. 前言
我们搭建这一套ELK以来,一直都只是在关注怎么去使用和配置,截止至Day7,我们这一套基于ELK的日志监控和统计方案已经初具雏形,是时候考虑一下监控ELK本身了。
完善的监控有助于让我们实时了解到集群的运行状况,及时发现故障或者是高负载的情况,避免影响业务。同时,在足够多的监控数据的支持下,我们可以提前预知系统负载,提前做好扩容准备;或者是及时发现性能瓶颈或者是不合理的配置项,避免引起更大的问题。
在接下来的内容,我们会通过Metricbeat的简单示例配置,再配合Elastic Stack中的X-Pack实现集群的性能监控。
2. 实现原理
2.1 架构图
官方文档里面的架构图看上去很复杂,拆开来说就是几点:
- 运行Elasticsearch、Logstash、Kibana服务的服务器中都安装一个Metricbeat服务,监控具体服务的性能的同时,也监控操作系统的基础性能(CPU、内存等)
- 所有Metricbeat都把收集到的监控信息汇总到Monitoring Elasticsearch中(可以和被监控的Elasticsearch是同一个)
- Metricbeat也可以监控Metricbeat自己(自省 ; -) )
- Kibana通过读取Monitoring Elasticsearch的数据,展示监控界面
2.2 监控原理介绍
Metricbeat服务会定期收集服务器的监控信息,以JSON格式发送到ES,并存放在特定的Index中,每一次性能数据就是一条单独的数据(文档)。ES默认会有一套索引模板metrics
,用于管理从Metricbeat收集回来的性能数据。
同时,Metricbeat自带有非常丰富的模块,在模块中已提前定义好了如何接入具体服务、如何采集指标、需要采集什么指标。只需在Metricbeat中完成简单的接入配置,Metricbeat就能自动地根据不同的服务类型自动采集需要的指标数据,如:Mysql、Redis、Apache、Nginx等。
和传统的监控方法(如Zabbix)不一样,Metricbeat在采集数据的时候,采用一次采集多个指标的模式。例如,在采集Redis的性能数据时,Metricbeat接入到redis服务中,再运行一个info
命令,就会把所有的数据都一次性收录到ES中。这样的好处是,大大节省了TCP/IP连接数;而且,每次采集回来的结果是一个时间戳对应一组不同的指标数据,能提高数据的可靠性,使其更具有参考价值。
2.3 监控数据结构
Metricbeat收集到的CPU使用率监控数据:
点击展开完整json内容
1 | { |
2.4 什么是X-Pack
从6.3版本开始,Elastic Stack默认自带X-Pack。
X-Pack是Elastic Stack中用于支持安全、告警、监控、可视化等功能的插件的统称,在新版本的Elastic Stack中,很多方便易用的功能其实都是通过X-Pack实现的。
在后面的监控方案中,我们也会调用各个服务的X-Pack扩展去实现性能数据的采集。
3. 安装及配置Metricbeat
我们以Elasticsearch监控为例子,介绍Metricbeat的安装和配置,对于其他服务种类,也是类似的原理。
3.1 实验架构图
先来回顾一下,在本次实验中使用的架构:
3.2 在ubuntu系统使用DEB包安装
1 | curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.14.1-amd64.deb |
在其他系统上的安装方法,可以参考官方文档:Quick start: installation and configuration
3.3 metricbeat.yml配置示例
我们使用最简单的配置:
1 | metricbeat.config.modules: |
3.4 示例:在Metricbeat启用Elasticsearch模块
3.4.1 启用Elasticsearch模块
1 | metricbeat modules enable elasticsearch-xpack |
3.4.2 查看可用的模块
1 | metricbeat modules list |
输出结果示例:
1 | Enabled: |
3.4.3 修改elasticsearch模块监控配置
在默认情况下,在路径/etc/metricbeat/modules.d
中会包含大量的预设模块,根据metricbeat.yml
中的配置我们可以看到,只要满足*.yml
的模块配置文件都会被加载到。
在这里,我们使用的elastic search模块配置文件(elasticsearch-xpack.yml
)如下:
1 | # Module: elasticsearch |
3.4.4 Metricbeat服务的启停
使用deb安装后,会自动在系统创建metricbeat.service
服务,我们按照正常的systemctl
操作即可。
1 | systemctl start metricbeat.service |
3.4.5 在Kibana中查看监控数据
进入Kibana后,在Discover页面中选择metricbeat-*
pattern,即可查看metricbeat收集回来的监控数据:
4. 在Kibana展示监控数据
4.1 配置监控看板
我们使用Metricbeat可以解决监控数据的采集,但采集完后,还需要考虑监控数据可视化的问题。幸好,我们可以使用Kibana的插件Stack Monitoring
。正如前面提到的,Kibana中的Stack Monitoring
功能,正是X-Pack插件的其中一个,当你把Metricbeat安装好,并启用相应服务的x-pack模块之后,只需要简单的步骤就可以在Kibana页面中搭建一个性能看板。
但是笔者在撰文的时候,监控面板已经完成搭建了,无法重新演示最初的步骤。简单说,在进入到Stack Monitoring
页面后,页面上会有步骤指引,按照步骤指引数据填写即可。
下面是一个不完全的例子:
4.2 性能监控看板介绍
4.2.1 Stack Monitoring
主要针对的是Elastic Stack中各个服务的业务监控,如ES中的Indexing Time
或者是Logstash中队列。
4.2.2 Observability
侧重于展示各个安装了Metricbeat服务的节点的基础性能监控,可以直观地看到节点的CPU使用率、内存使用率、网络流量等。
5. 总结
在知道现在这个ELK Stack版本可以支持这么方便的性能监控可视化方案之前,我原来是计划使用传统的Zabbix/Grafana方案的,也查了一些资料,计划使用各个服务的API去调取性能数据。但是在一番摸索之后发现有了这么强大的监控插件之后,我只想说一句“真香”。也因为Kibana的页面提供了太详细的指引了,我甚至觉得自己的步骤说明只会是狗尾续貂,所以就没有多作介绍。
值得一提的是,如果我们的服务器本身是运行在云平台上,云平台本身会有服务器的基础监控,我们就不需要考虑通过Metricbeat去做基础性能监控了。在这种情况下,如果集群中的服务不多,只部署一个metricbeat服务就足够。需要提醒的是,Metricbeat默认会通过/etc/metricbeat/modules.d/system.yml
这个配置文件开启系统监控,如果不需要了记得去禁用掉。
metricbeat modules disable system
说那么多,也还是绕不去那句“纸上得来终觉浅,绝知此事要躬行”。在这里,我也只是为大家提供一个思路,展示的都是最简单的配置,具体要如何实施,还是要根据实际情况做灵活的调整。