Zabbix获取Prometheus上的监控数据
1 zabbix安装
官方文档参考
https://www.zabbix.com/download?zabbix=6.0&os_distribution=centos&os_version=7&components=proxy&db=mysql&ws=
https://www.zabbix.com/download?zabbix=4.0&os_distribution=centos&os_version=7&components=server_frontend_agent&db=mysql&ws=apache
1.1 zabbix软件安装
[root@zabbix zabbix]# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm ## 安装zabbix仓库
[root@zabbix zabbix]# yum clean all
[root@zabbix zabbix]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent ##安装zabbix server、前端、代理
1.2 数据库安装配置
1.2.1 数据库安装
[root@zabbix zabbix]# yum install mariadb-server
[root@zabbix zabbix]# systemctl start mariadb
[root@zabbix zabbix]# systemctl enable mariadb
[root@zabbix zabbix]# mysql_secure_installation ##设置数据库root密码并进行安全配置
1.2.2 创建zabbix用户并授权
[root@zabbix zabbix]# mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
1.2.3 导入数据库
[root@zabbix zabbix]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
1.3 配置文件中修改zabbix用户数据库密码
[root@zabbix zabbix]# cat /etc/zabbix/zabbix_server.conf |grep -v "^#"|grep DBPassword
1.4 修改前端显示时区
[root@zabbix zabbix]# grep timezone /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
1.5 启动zabbix相关服务
[root@zabbix zabbix]# systemctl restart zabbix-server zabbix-agent httpd
[root@zabbix zabbix]# systemctl enable zabbix-server zabbix-agent httpd
1.6 访问zabbix
ui上输出zabbix服务器地址加/zabbix即可访问到zabbix初始化页面
http://172.18.100.137/zabbix
2 zabbix初始化
2.1 环境检查
查看是否有包或插件不满足条件
2.2 数据库配置
根据实际情况配置zabbix使用的数据库及用户名密码等信息
2.3 zabbix服务配置
2.4 信息确认
2.5 配置完成
2.6 登录zabbix
配置完成以后即可登录zabbix,默认zabbix的用户名为Admin,密码为zabbix
2.7 修改页面为中文显示
3 zabbix对接prometheus
3.1 前提条件
- zabbix版本要大于4.2版本
- zabbix服务器需要能访问被管控节点的9100端口
在4.2及以上版本的zabbix中,提供了prometheus pattern和prometheus to json两种监控项预处理方式来处理prometheus的监控数据,我们可以通过http代理的方式无需安装agent来管理prometheus中的主机。
3.2 zstack中主机监控介绍
ZStack云平台集成了promehtus来获取物理机及云主机的监控数据。其中cpu、内存、磁盘、网络等监控数据来源由安装在物理机上的Prometheus客户端node_exporter提供。node_exporter相关信息可参考
https://github.com/prometheus/node_exporter
可以通过http://{物理机ip}:9100/metrics来查看node_exporter获取到的监控数据
上述输出中高亮部分,node_cpu_guest_seconds_total为metric名,cpu、mode为label名,26和user为两个lable的值。55184.82为metric的实际值。
3.3 创建一个主机群组
创建一个名为prometheus_node的主机群组
3.4 创建一个主机
创建一个主机,填写好以下信息,主机无需安装任何zabbix代理
- 主机名称:填写好主机名称
- 群组:选择我们刚创建好的群组
- 接口:填写要添加的主机的ip地址,后面的端口无需配置保持默认即可
- 代理程序检测:选择无agent代理程序
3.5 创建一个http代理类型的监控项
该代理的作用为为后续的监控项提供数据来源,进入刚创建的主机页面,点击监控项,填写以下信息,创建一个http代理类型的监控项。
- 名称:填写监控项的名称
- 类型:http代理
- 键值:master
- URL:填写物理机的监控数据地址
- 主机接口:选择我们刚刚创建的主机
- 信息类型:文本
- 更新间隔:5s
- 历史数据保留时长:do not keep history
其余项保持默认即可,设置完成后点击添加。

3.6 监控单项指标
下面通过创建一个指标来获取网卡br_bond1的传输包总量
3.6.1 创建一个Dependent item
首先查看相关的指标信息。监控项相关信息参考
https://lnsyyj.github.io/2019/05/27/prometheus-node-exporter-%E7%9B%91%E6%8E%A7%E9%A1%B9/
主机下新建一个监控项
- 名称:填写监控项的名称,可以以metric name和label name命名
- 类型:相关项目(Dependent item)
- 键值:transmit_br_bond1
- 主要项:选择前面创建好的主要项(prometheus node exporter)
- 信息类型:根据监控项的情况进行选择。数据包总量是一个非负整数,所以信息类型选择数字(无正负)
其它值保持默认
给监控项配置一个进程
- 名称:prometheus pattern
- 参数:node_network_transmit_packets_total{device="br_bond1"}。参数的形式为"metric name{label name = label value}",根据具体的监控项而定。
3.6.2 查看创建好的监控项的数据
在监测-->最新数据一栏可以看到监控项已经获取到了数据
点击图形可以查看该监控项的相关监控图形信息
3.7 同时监控多项相同的指标
单个监控项的配置相对简单,但当服务器上存在多个网卡需要监控时,一个个去配置监控项显然是非常麻烦的,而且当服务器上的网卡有增加或删除时,我们需要手动的去增加和删除监控项,非常的麻烦。这个时候就可以使用zabbix的低级自动发现(LLD)来自动发现相关的监控项。
3.7.1 prometheus to json介绍
https://www.zabbix.com/documentation/current/en/manual/discovery/low_level_discovery/examples/prometheus
zabbix的Prometheus to json预定步骤会将获取到的metrics数据转换为json格式。例如有以下metrics数据。
# HELP wmi_logical_disk_free_bytes Free space in bytes (LogicalDisk.PercentFreeSpace)
# TYPE wmi_logical_disk_free_bytes gauge
wmi_logical_disk_free_bytes{volume="C:"} 3.5180249088e+11
wmi_logical_disk_free_bytes{volume="D:"} 2.627731456e+09
wmi_logical_disk_free_bytes{volume="HarddiskVolume4"} 4.59276288e+08
获取到的json格式类似于下
[
{
"name": "wmi_logical_disk_free_bytes",
"help": "Free space in bytes (LogicalDisk.PercentFreeSpace)",
"type": "gauge",
"labels": {
"volume": "C:"
},
"value": "3.5180249088e+11",
"line_raw": "wmi_logical_disk_free_bytes{volume=\"C:\"} 3.5180249088e+11"
},
{
"name": "wmi_logical_disk_free_bytes",
"help": "Free space in bytes (LogicalDisk.PercentFreeSpace)",
"type": "gauge",
"labels": {
"volume": "D:"
},
"value": "2.627731456e+09",
"line_raw": "wmi_logical_disk_free_bytes{volume=\"D:\"} 2.627731456e+09"
},
{
"name": "wmi_logical_disk_free_bytes",
"help": "Free space in bytes (LogicalDisk.PercentFreeSpace)",
"type": "gauge",
"labels": {
"volume": "HarddiskVolume4"
},
"value": "4.59276288e+08",
"line_raw": "wmi_logical_disk_free_bytes{volume=\"HarddiskVolume4\"} 4.59276288e+08"
}
]
3.7.2 LLD macro和JSONPath
宏
https://www.zabbix.com/documentation/4.4/zh/manual/config/macros
https://www.zabbix.com/documentation/3.4/zh/manual/config/macros/usermacros
宏的格式为{#var_name}
jsonPath
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/items/jsonpath?hl=JSONPath
macro是定义的一个变量。jsonPath指定变量的值从哪里获取
例如有下面这段数据
{
"name": "wmi_logical_disk_free_bytes",
"help": "Free space in bytes (LogicalDisk.PercentFreeSpace)",
"type": "gauge",
"labels": {
"volume": "HarddiskVolume4",
"disk": "C"
},
"value": "4.59276288e+08",
"line_raw": "wmi_logical_disk_free_bytes{volume=\"HarddiskVolume4\"} 4.59276288e+08"
}
通过以下定义就能获取到name、help、lables等值
3.7.3 创建LLD
在配置-->主机中选择我们之前创建好的主机,点击自动发现,创建自动发现规则
- 名称:输入LLD的名称
- 类型:相关项目
- 键值:net_transmit_pack_total
- 主要项:选择前面创建的prometheus node exporter
- 资源周期不足:0
添加进程预处理步骤
- 名称:prometheus to json
- 参数:node_network_transmit_packets_total{device=~".*"} , 其中~". *"表示label value可以是任意值。
添加LLD宏
我们添加三个宏,LLD宏分别为
- {#DEVICE}
- {#HELP}
- {#METRIC}
json路径分别为
- $.labels['device']
- $['help']
- $['name']
设置完成后点击添加
3.7.4 设置自动发现规则的监控项原型
选择刚创建好的LLD自动发现规则,点击监控项原型,创建监控项原型。
- 名称:
- 类型:相关项目
- 键值:Total_transmit_packets[{#DEVICE}],如果有多个宏需要将宏都写在[]中,如[{#DEVICE},{#MODE}]
- 主要项:此前创建的prometheus node exporter
- 信息类型:数字(无正负)
其余信息保持不变
为监控项原型添加预处理步骤
一共需要添加两个预定步骤:
第一个:
- 名称:prometheus pattern
- 参数:{#METRIC}{device="{#DEVICE}"}
第二个:
- 名称:每秒更改
配置完成后点击添加
3.7.5 查看通过自动发现规则创建的监控项
点击配置-->主机-->监控项可以发现通过我们刚刚配置的自动发现规则已经自动创建了多个网卡相关的监控项
3.7.6 查看监控数据
点击监测-->最新数据,可以看到各项监控项的监控数据
浙公网安备 33010602011771号