一、监控项简介
监控项是Zabbix中最常见的概念,它代表你要检查的一个对象的属性。在Zabbix中,每个监控项都对应着一个唯一的键名,通过该键名可以在Zabbix中查看和控制监控项的运行。Zabbix可以监控的对象很多,包括但不限于服务器的CPU、内存和磁盘使用率、网络带宽和响应速度、应用程序的运行状态等等。
除了Zabbix自带的监控项之外,Zabbix还支持用户自定义监控项,它允许用户通过自定义键名和对应的监控脚本来监控自己需要的对象或指标。例如,用户可以监控某个应用程序的未响应请求数量,或者监控某个自己开发的业务系统的并发连接数。
二、自定义监控项的实现方式
Zabbix中实现自定义监控项的方式有多种,包括但不限于:
使用Zabbix Agent的UserParameters
Zabbix Agent是一个运行在被监控主机上的代理程序,它负责采集监控数据并将其传递给Zabbix Server。Zabbix Agent可以通过UserParameters来扩展监控能力,即通过用户自定义的键名和对应的监控脚本来读取和采集监控数据。
下面是一个示例:
UserParameter=nginx.status[*],/usr/bin/curl -L -s -o /dev/null -w %{http_code} http://localhost:$1/nginx_status
该UserParameter定义了一个名为nginx.status的监控项,通过curl命令读取本地nginx服务器的状态信息,并返回HTTP响应状态码作为监控数值。
使用SNMP监控
SNMP(Simple Network Management Protocol)是一种面向网络管理的协议,它定义了管理信息基础架构(MIB)和协议数据单元(PDU),支持对网络设备、操作系统和应用程序进行远程监控和管理。Zabbix中可以通过SNMP监控协议和MIB来对网络设备的性能和状态进行监控。
下面是一个示例:
Type: SNMPv2 agent
Key: net.if.in[lo]
SNMP OID: .1.3.6.1.2.1.2.2.1.10.1
Update interval: 60s
Units: B
该监控项通过SNMP OID _.1.3.6.1.2.1.2.2.1.10.1_,监控本地(lo)网络接口的输入流量,并以字节(B)为单位进行显示。
三、更多自定义监控项示例
1. 监控Nginx日志文件的访问次数和错误率
该自定义监控项用于监控Nginx Web服务器的访问次数和错误率,首先需要在Nginx的配置文件中启用访问日志和错误日志:
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log;
然后在Zabbix Agent的配置文件中加入以下UserParameter:
UserParameter=nginx.access_log.hits,/usr/bin/grep -c -E "HTTP/1.[01]" /var/log/nginx/access.log
UserParameter=nginx.access_log.errors,/usr/bin/tail -n 1000 /var/log/nginx/error.log | /usr/bin/grep -c "error"
最后在Zabbix中添加两个监控项,一个是nginx.access_log.hits,另一个是nginx.access_log.errors。
2. 监控MySQL数据库的查询次数和响应时间
该自定义监控项用于监控MySQL数据库的查询次数和平均响应时间,首先需要在MySQL的配置文件中启用slow query日志:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
然后在Zabbix Agent的配置文件中加入以下UserParameter:
UserParameter=mysql.queries,/usr/bin/tail -n 500 /var/log/mysql/slow.log | /usr/bin/grep -c "Query_time"
UserParameter=mysql.response_time,/usr/bin/tail -n 500 /var/log/mysql/slow.log | /usr/bin/awk '{sum+=$NF} END {print sum/NR}'
最后在Zabbix中添加两个监控项,一个是mysql.queries,另一个是mysql.response_time。
3. 监控关键业务系统的关键指标
该自定义监控项用于监控自己开发的关键业务系统的关键指标,例如并发连接数、请求数、响应时间等等,需要自己编写监控脚本,然后通过UserParameter来定义监控项的键名和数值。
以下是一个示例监控脚本:
#!/bin/bash
url=http://localhost:8080/mysystem/status
threads=$(curl -s $url | jq -r '.threads')
requests=$(curl -s $url | jq -r '.requests')
response_time=$(curl -s $url | jq -r '.response_time')
echo "$threads $requests $response_time"
以上脚本可以通过HTTP请求获取关键业务系统的状态信息(假设其URI为/mysystem/status),并返回并发连接数、请求数和平均响应时间三个数值。
然后在Zabbix Agent的配置文件中加入以下UserParameter:
UserParameter=mysystem.threads,/usr/local/bin/myscript.sh | awk '{print $1}'
UserParameter=mysystem.requests,/usr/local/bin/myscript.sh | awk '{print $2}'
UserParameter=mysystem.response_time,/usr/local/bin/myscript.sh | awk '{print $3}'
最后在Zabbix中添加三个监控项,分别是mysystem.threads、mysystem.requests和mysystem.response_time。