Zabbix---UserParameters --监控项 --触发器
用户自定义参数(UserParameters)
当zabbix内置的监控项(item:key)不能满足需求时, 例如对nginx连接状态进行监控, 监控MySQL连接状态, 监控tomcat状态等
用户自定义参数要在zabbix-agent上定义
语法格式:UserParameter=key,command
例1: 监控可用内存大小:
# vim /etc/zabbix_agentd.conf
UserParameter=mem.available,awk '/^MemAvailable/{print $2}' /proc/meminfo
在zabbix-server上测试
# zabbix_get -s 192.168.10.12 -k mem.free
15
例2: 监控内存的很多参数, 如下图列出的所有参数:
按照前面的方法, 我们需要定义很多UserParameters, 有没有更简单的方法呢?
可以通过传参的形式
语法格式: UserParameter=key[*],command #在使用时,[]中的第一个参数会传递给命令中的$1, 第二个参数传递给命令中的$2 ...
# vim /etc/zabbix/zabbix_agentd.d/meminfo.conf
UserParameter=memory.info[*],awk '/^$1/{print $$2}' /proc/meminfo
# zabbix_get -s 192.168.10.12 -k memory.info[MemFree]
# zabbix_get -s 192.168.10.12 -k memory.info[MemTotal]
# zabbix_get -s 192.168.10.12 -k memory.info[Buffers]
# zabbix_get -s 192.168.10.12 -k memory.info[Cached]
**在创建监控项时, 充分利用"克隆", 提高效率
练习一: 配置Zabbix, 监控TCP各种连接状态的数量
练习二: 配置一个MySQL应用集, 监控MySQL运行情况, 实时连接数, 慢查询数量, 平均查询时间等参数 (提示: 在mysql中使用 status 命令)
监控项(Items)
• 获取监控数据方式
• 取值的数据类型
• 获取数据的间隔
• 历史数据保存的时间
• 趋势数据保存的时间
• 监控Key Applications
在监控项的右边还有 进程 标签 , 简单介绍一下
用于对监控项值预处理
预定步骤 选项卡允许为接收的值定义转换规则。在将值保存到数据库之前,可以进行一次或多次转换。 转换按照定义的顺序执行。
• 正则表达式: 将值与<pattern>匹配,并将值替换为<output>。 支持使用\N序列提取最多10个捕获的组。 无法匹配输入值将使监控项不受支持。
• 修整: 从值的起始和结尾删除指定的字符。
• 修整右边: 从值的末尾删除指定的字符。
• 修整左边: 从值的起始处删除指定的字符。
• 自定义倍数: 将值乘以指定的整数或浮点值。
• 简单更改: 计算当前值和上一个值之间的差值。
• 每秒更改: 计算每秒速度的值变化(当前值和上一个值的差值), 以获得每秒不断增长的速度值。
获取数据的方式:
Zabbix_agent, Simple check, SNMP, Calculated...
Items 可以作用于Host 及 Template
应用集(Applications)
应用集,是一种用于把监控项分组的逻辑组。
举个例子:一个叫MySQL服务器应用集,它关联了MySQL服务器相关的所有监控项:MySQL的可用性、磁盘空间、处理器负载、每秒事务数、慢查询数等。
应用集也用于给Web场景分组。
如果你正在使用应用集,那么在监控中-最新数据 中,你将看到按各应用分组下的监控项和Web场景。
配置应用集
要使用应用,你必须先创建它们,然后将监控项或Web场景链接到它们。
要创建应用,请执行下述操作:
• 前往配置 → 主机 或 模板
• 点击应用集 然后通过右上角的菜单跳转到指定主机或模板
• 点击 创建应用集
• 键入应用的名称,然后单击 添加 以将修改保存。
你也可以直接创建一个新应用集,在监控项属性表单页面中。
一个监控项可以属于多个应用集。
触发器
触发器用于界定某特定的item采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。
逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下:
OK(不符合条件):正常状态
PROBLEM(符合条件):非正常状态
一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果
这个最后N次通常有两种定义方式:
• 最近N分钟所得结果的平均值
• 最近N次所得结果的平均值
触发器的依赖关系
我们的触发器彼此之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警。
我们可以来试想一下这样的场景:
我们的多台主机是通过交换机的网络连接线来实现被监控的。如果交换机出了故障,我们的主机自然也无法继续被监控,如果此时,我们的所有主机统统报警……想想也是一件很可怕的事情。要解决这样的问题,就是定义触发器之间的依赖关系,当交换机挂掉,只它自己报警就可以了,其余的主机就不需要在报警了。这样,也更易于我们判断真正故障所在。
注意:目前zabbix不能够直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义。
我们来简单举一个例子,示范一下如何定义一个依赖关系:
例:
我们在 host2 上定义两个触发器:
1. 监控httpd的状态, 当httpd没有运行时就报警
2. 监控web资源,比如/index.html, 如果 get 不到这个资源就报警
很明显, 如果apache宕机了, 这两个触发器的条件都会满足.
如果不定义依赖关系, 必然会触发两个报警
如果在定义第2个触发器时依赖第1个, 那么当apache宕机了, 则只会触发第1个报警
实验过程
1. 在 host2 上安装apache并运行起来, 测试OK
2. 配置第1个监控项及触发器, 这个比较简单, 直接关联HTTP模板即可
更新一下,可以看到第 1 个监控项和触发器已经添加好了
3. 配置第2个监控项和触发器
在 host2 上写一个监控脚本
# cd /etc/zabbix/zabbix_agentd.d/
# vim /httpd_index.sh
#!/bin/bash
stats=$(curl -Is 127.0.0.1 |awk 'NR==1{print $2}')
[[ $stats =~ ^(2|3) ]] && echo 0 || echo 1
# vim /httpd_service.sh
#!/bin/bash
proc=$(netstat -tlnp |grep httpd |awk '{print $7}'|awk -F/ '{print $2}')
[ "$proc" == "httpd" ] && echo 0 ||echo 1
# chmod +x httpd_*
修改 agent 配置文件
# vim /etc/zabbix/zabbix_agentd.d/UserParameter.conf
UserParameter=httpd.service,/etc/zabbix/zabbix_agentd.d/httpd_service.sh
UserParameter=httpd.index,/etc/zabbix/zabbix_agentd.d/httpd_index.sh
如有报无root权限错误!!!
visudo
zabbix ALL=(ALL) NOPASSWD: /usr/bin/sh
export EDITOR=vim #临时修改默认编辑器
UserParameter=httpd.service,sudo /usr/bin/sh /etc/zabbix/zabbix_agentd.d/httpd_service.sh
UserParameter=httpd.index,sudo /usr/bin/sh /etc/zabbix/zabbix_agentd.d/httpd_index.sh
重启服务
# systemctl restart zabbix-agent
在server端测试
# zabbix_get -s 192.168.10.12 -k httpd.index
1 # 在 host2 上能正常 GET 到 /index.html 文件时, 值为1, 否则为 0
在web界面上配置监控项
配置 -->主机 -->监控项 -->创建监控项
创建触发器(无依赖关系)
配置 -->主机 -->触发器 -->创建触发器
创建完成后, 我们查看一下触发器列表
现在将 host2 上的 http 关掉
查看仪表板,发现两个都触发了

浙公网安备 33010602011771号