【深入理解SpringCloud微服务】服务监控解决方案Prometheus+Grafana、Zabbix等介绍与对比
服务监控解决方案Prometheus+Grafana、zabbix等介绍与对比
服务监控
除了日志收集(Logs)和链路追踪(Traces)以外,我们的系统还要有服务监控(Metrics),才满足微服务架构必不可少的可观测性,可观测性包括Metrics、Traces、Logs 3 个维度。

服务监控就是对我们的服务和服务器的各种性能指标进行监控。
比如我们服务应用程序的请求成功率、系统吞吐量、响应时长等,如果是Java程序的话,还可以对JVM的各种指标进行监控。
而服务器的性能指标则包括CPU使用率、内存使用率、系统平均负载(Load1、Load5、Load15)、磁盘吞吐量、网络吞吐量等等。

在服务监控方案,主要的解决方案有:
- Prometheus+Grafana
- Zabbix
Prometheus+Grafana
Prometheus是目前最常用的服务监控组件,原生支持容器监控,最适合在k8s环境下部署Prometheus进行监控。
Prometheus+Grafana整体架构
以下是Prometheus+Grafana的整体架构。

上图橙色的都是Prometheus的部分。
首先Prometheus Server是Prometheus的服务端:
- Retrieval组件通过服务发现机制获取需要收集监控信息的目标,然后拉取外部目标的监控信息。
- TSDB是一个时序数据库,拉取到的监控指标信息会存储到TSDB中。
- 然后HTTP Server组件开启http端口,供外部的UI组件或命令行请求查询监控信息,HTTP Server从TSDB从查询监控信息返回。
- “Rules And Alters”告警规则组件查询TSDB中的监控数据,如果满足告警规则,则通知外部的AlterManager组件发送告警信息。

然后是左边负责收集监控指标的部分:
- Client Library:一般的应用程序可以通过引入客户端依赖包进行监控指标的收集。
- Exporter:像MySQL、MongoDB、Redis这种第三方工具,不支持引入依赖包,那么通过专属的Exporter主动收集对应监控指标。比如MySQL Exporter会主动查询MySQL的相关性能信息,转为标志的监控指标格式的数据,存储起来,等待Prometheus服务端拉取。
- Pushgateway:用于临时性任务的收集,比如一个批处理程序,主动推送监控指标信息到Pushgatew中存储起来,等待Prometheus服务端拉取。

AlterManager则是Prometheus的监控告警组件,会接收Prometheus的告警通知,然后根据配置进行相应的告警通通知操作,比如发生邮件等。

最后还有UI界面或命令行工具。Prometheus是有自己的UI界面的,但是比较简陋,因此一般不使用,而是使用Grafana,Grafana是比较强大的图像界面工具。
UI界面会请求Prometheus服务端查询监控信息,而HTTP Server接收到请求后,会查询TSDB数据库返回相应的监控信息。

Java应用程序通过Actuator整合Prometheus
我们Java应用程序如果要收集监控指标数据到Prometheus的话,需要引入spring-boot-starter-actuator依赖包。
actuator专门用于收集当前应用程序的各种监控指标以及健康状况,然后通过暴露端点的方式供外部查询。外部应用可以通过Actuator提供的端点Endpoint查询到相应的监控信息。

除了引入spring-boot-starter-actuator以外,还要引用一个micrometer-registry-prometheus依赖包,用于将监控数据转为Prometheus的格式。

然后我们要在application.yml中添加以下配置开启Actuator端点:
management:
endpoints:
web:
exposure:
include: "*"
Prometheus的服务端则需要在prometheus.yml进行相应配置:
scrape_configs:
- job_name: 'java_actuator'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['<your_java_app_host>:<your_java_app_port>']
Zabbix
Zabbix也是一款服务监控软件,比Prometheus要早。

Zabbix支持通过Agent和自定义脚本两种方式收集监控数据。Agent是部署在客户端集群上的一个进程,主动监控目标机器以及应用程序,收集监控指标,发送到Zabbix_Server。Zabbix_Server把收集到的监控数据存入数据库中。
Zabbix有一个Web界面,可以查询Zabbix_Server存储的监控数据。
Agent除了可以直接发送监控数据到Zabbix_Server以外,还可以发送到Zabbix_Proxy中,Zabbix_Proxy是一个代理节点,暂存从Agent收到的数据,并提交到Server。这种部署架构一般用在跨网络、跨机房的的网络架构中。
如果是大型网络架构,节点非常多。还可以部署Zabbix_Node,Zabbix_Node可以接收Agent或Proxy发来的监控数据,由Node提交到Server。
对比
Prometheus更侧重于云原生和微服务架构的监控,并且由于其强大的多维数据模型,使得它比Zabbix能提供更多更细的监控指标项,但是配置复杂学习成本高。
Zabbix由于提供了全面的监控功能(可以监控服务器、网络设备、应用程序),因此适合用于企业级监控(需要全面监控服务器、网络设备和各种网络参数的场景),但是对于云原生环境监控则没有Prometheus来的合适。
更多推荐

所有评论(0)