Zabbix4.2新功能实践3-集成Prometheus
zabbix 能够以多种不同的方式(推/拉)从各种数据源收集数据,包括 JMX,SNMP,WMI,HTTP / HTTPS,RestAPI,XML Soap,SSH,Telnet,代理,脚本和其他数据源。4.2 版本支持了 Prometheus 数据源,同时可使用 PromQL 语言。使用单个 HTTP 调用获取所有数据,通过依赖指标高效的收集大量的 Prometheus 指标,然后仅将其用于相关指标监控,还可以将 Prometheus 数据转换为 JSON 格式,直接用于低级别发现。
Prometheus Exporter
Prometheus 提供了基本的采集客户端称为: Exporter,下载对应的 Exporter 运行,采集指标通过 http 暴露。已采集主机信息的 node_exporter 为例
安装
以 Linux node_exporter 为例
下载并运行
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
tar zxvf node_exporter-0.17.0.linux-amd64.tar.gz
cd node_exporter-0.17.0.linux-amd64
./node_exporter
启动之后可以看到
表示启动成功,访问http://Ip:9100/metrics 可以看到所有采集的 Metrics
Prometheus 数据结构
通过 http 可以看到所有的 Metrics,Metrics 按照一定的数据格式排列
主要分为几种:
帮助
以#号开头 HELP 表示对 Metrics 的帮助,前面为指标名称 空格厚为说明
类型
以#号开头的 TYPE 表示了指标的类型,前面为指标名称 空格后为类型
四种类型如下
指标类型 | 描述 | 说明 |
---|---|---|
Counter | 只增不减的计数器,其值只能增加或在重启时重置为零 | 例如,您可以使用计数器来表示服务的总请求数 |
Gauge | 用来存放一个可以任意变大变小的数值 | 例如温度或当前内存使用情况,或者运行的 goroutine 数量 |
Histogram | 主要用于表示一段时间范围内对数据进行采样 | 通常我们用它计算分位数的直方 |
Summary | 客户端定义的数据分布统计图 | 统计事件发生的次数或者大小,以及其分布情况 |
Counter 和 Gauge 最为常用
Metirc
Metric 分为几个部分
集成 Prometheus
Prometheus 的 Exporter 为 http 方式,因此需要使用 Zabbix 的 http 采集。可使用 Zabbix 的 Dependent items 做到一次采集所有指标。用于 Prometheus 较为通用化,建议配置独立的模版。
建立一个模版,配置如下宏变量,地址为 node_exporter 的地址
添加一个 Master tem,主要配置如下
关键配置
Metric 地址配置为宏
配置好之后如下
一般采集
配置好之后,配置一个操作系统 Load5 的 Item
配置之后要配置数据预处理,策略如下,parameters 为 Metric name
配置之后关联到主机,之后查看数据,已经采集
低级别发现
在 zabbix agent 中,采用 LLD 可实现自动发现磁盘空间,网卡等不定项的指标,使用 Prometheus 也可以实现 LLD。如下配置自动发现网卡流量
配置自动发现规则
配置数据预处理
这里使用通配符,获取所有网卡,支持的通配符可以查看https://www.zabbix.com/documentation/4.2/manual/config/items/itemtypes/prometheus#Query%20language%20comparison
复制 Metric(完成的 metric,包括 value),点击 test,如没有错误,下方会出现 json,如提示错误,表示规则配置有问题。复制 Json 文本,格式化之后如下
根据 Json 格式配置如下宏,提取 lables 里的 interface 即网卡名称作为宏
配置如下过滤规则,过滤 lo 网卡
网卡分为发送和接收 2 个方向,因此需要创建 2 个基本的 Item 发现原型
配置网卡接收 Item 原型
node_exporter 的网卡接收 Metrics 如下
# HELP node_network_receive_bytes_total Network device statistic receive_bytes.
# TYPE node_network_receive_bytes_total counter
node_network_receive_bytes_total{device="enp0s3"} 5.703155e+06
node_network_receive_bytes_total{device="enp0s8"} 6.303864e+06
node_network_receive_bytes_total{device="lo"} 3.00503e+07
配置数据预处理,如图
配置 Prometheus pattern 参数配置为
node_network_receive_bytes_total{device="{#INTERFACE}}
由于网卡流量为 bytes,Metric 类型 counter,因此需要选择方式进行处理,将网卡流量处理为 bps。同样方法配置网卡发送 Item 原型如下图
网卡发送 Metrics 如下
# HELP node_network_transmit_bytes_total Network device statistic transmit_bytes.
# TYPE node_network_transmit_bytes_total counter
node_network_transmit_bytes_total{device="enp0s3"} 1.4358114e+07
node_network_transmit_bytes_total{device="enp0s8"} 9510
node_network_transmit_bytes_total{device="lo"} 3.00503e+07
Prometheus pattern 参数配置为
node_network_transmit_bytes_total{device=“{#INTERFACE}}
注意配置 2 个 Item 的 key 要不同
最后创建一个图形原型
最终效果