命令记不住

登陆

Zabbix 自定义监控项

Zabbix自定义监控项

1.zabbix自定义监控深入

  • 1.详细介绍基础模板中的监控项, 以及自定义添加监控项中的每一个参数的作用和使用方法。
  • 2.自定义监控tcp11种状态(传参方式)

tcp11种状态

1.ESTABLISHED
2.SYN_SENT
3.SYN_RECV
4.FIN_WAIT1
5.FIN_WAIT2
6.TIME_WAIT
7.CLOSE
8.CLOSE_WAIT
9.LAST_ACK
10.LISTEN 
11.CLOSING

1.增加监控键值UserParameter

[root@zabbix01 ~]#cat  /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp_state[*],netstat -antup |grep -c $1
// 使用传参的方式一条命令监控11种TCP状态
[root@zabbix-agent ~]#  systemctl restart zabbix-agent

2.zabbix-server测试

1.权限不足示例

[root@zbx_server ~]#zabbix_get -s 10.10.40.10 -k tcp_state['ESTABLISHED']
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)

2.解决权限不足(u+s)

[root@zabbix01 ~]#ll /usr/bin/netstat
-rwxr-xr-x. 1 root root 155000 Aug  3  2017 /usr/bin/netstat
[root@zabbix01 ~]#chmod u+s /usr/bin/netstat
[root@zabbix01 ~]#ll /usr/bin/netstat
-rwsr-xr-x. 1 root root 155000 Aug  3  2017 /usr/bin/netstat

[root@zbx_server ~]#zabbix_get -s 10.10.40.10 -k tcp_state['ESTABLISHED']
  • 3.在zabbixWeb端进行添加
    注意[ ]中填入的变量不可有其它不支持的符号

1


  • 4.TCP有11种状态, 如何快速添加监控项,可以对针对我们刚才添加过的监控项进行克隆。

点击克隆按钮,填入新变量如SYN_SENT


2


2.zabbix自定义配置阈值

触发器的函数方法:

  • abschange
参数:忽略
支持类型:float,int,str,text,log
作用:返回最近获得的值与之前获得值差的绝对值,对于字符串类型:0表示相等,1表示不同
  • avg
参数:秒或#num
支持类型:float,int
作用:返回一段时间的平均值
举例:
avg(5):最后5秒的平均值
avg(#5):表示最近5次得到值的平均值
avg(3600,86400):表示一天前的一个小时的平均值
如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,
#n表示最近n次的值
示例:
触发器名称:Comparing average load today with average load of the same time yesterday (使用 time_shift 时间偏移量参数).
{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2
This expression will fire if the average load of the last hour tops the average load of the same hour yesterday more than two times. 
  • max
参数:秒或#num
支持值类型:float,int
描述:返回指定时间间隔的最大值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#).从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法.
示例:
触发器名称:Free disk space is too low Problem: 最近5分钟内剩余磁盘空间小于10GB
({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G)
  • min
参数:秒或#num
支持值类型:float,int
描述:返回指定时间间隔的最小值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#).从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法.
示例:
触发器名称:Free disk space is too low Problem:最近10分钟内磁盘空间大于40GB
({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)
  • nodata
参数:秒
支持值类型:any
描述:当返回值为1表示指定的间隔(间隔不应小于30秒)没有接收到数据,0表示其他.
示例:
触发器名称:No heartbeats within last 3 minutes 使用函数 nodata():
{zabbix.zabbix.com:tick.nodata(3m)}=1
  • change
参数:忽略
支持类型:float,int,str,text,log
作用:返回最近获得值与之前获得值的差值,对于字符串0表示相等,1表示不同
举例:
change(0)>n:忽略参数一般输入0,表示最近得到的值与上一个值的差值大于n
  • count
参数:秒或#num
支持类型:float,int,str,text,log
作用:返回指定时间间隔内数值的统计,
举例:
count(600)最近10分钟得到值的个数
count(600,12)最近10分钟得到值的个数等于12
count(600,12,"gt")最近10分钟得到值的个数大于12
count(#10,12,"gt")最近10个值中,值大于12的个数
count(600,12,"gt",86400)24小时之前的10分钟内值大于12的个数
count(600,6/7,"band")-thenumberofvaluesforlast10minuteshaving'110'(inbinary)inthe3leastsignificantbits.
count(600,,,86400)24小时之前的10分钟数据值的个数
第一个参数:指定时间段
第二个参数:样本数据
第三个参数:操作参数
第四个参数:漂移参数

#支持的操作类型 
eq: 相等 
ne: 不相等 
gt: 大于 
ge: 大于等于 
lt: 小于 
le: 小于等于 
like: 内容匹配
  • date
参数:忽略
支持类型:any
作用:返回当前的时间,格式YYYYMMDD
  • dayofmonth
返回当前是本月的第几天
  • dayofweek
返回当前是本周的第几天
  • delta
参数:秒或#num
支持类型:float,int
作用:返回时间间隔内的最大值与最小值的差值
  • diff
参数:忽略
支持值类型:float,int,str,text,log
作用:返回值为1表示最近的值与之前的值不同,0为其他情况
示例:
触发器名称:/etc/passwd has been changed 使用函数 diff():
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0
  • fuzzytime
参数:秒
支持值类型:float,int
作用:返回值为1表示监控项值的时间戳与ZabbixServer的时间多N秒,0为其他.常使用system.localtime来检查本地时间是否与Zabbixserver时间相同.
示例:
触发器名称:Check if client local time is in sync with Zabbix server time 使用函数 fuzzytime():
{MySQL_DB:system.localtime.fuzzytime(10)}=0
主机MySQL_DB当前服务器时间如果与zabbix server之间的时间相差10秒以上,表达式返回true,触发器状态改变为“problem” 
  • last
参数:秒或#num
支持值类型:float,int,str,text,log
作用:最近的值,如果为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的
例子:
last(0)等价于last(#1)last(#3)表示最近**第**3个值(并不是最近的三个值)
本函数也支持第二个参数**time_shift**,例如
last(0,86400)返回一天前的最近的值
如果在history中同一秒中有多个值存在,Zabbix不保证值的精确顺序
#num从Zabbix1.6.2起开始支持,timeshift从1.8.2其开始支持,可以查询avg()函数获取它的使用方法
  • logeventid
参数:string
支持值类型:log
描述:检查最近的日志条目的EventID是否匹配正则表达式.参数为正则表达式,POSIX扩展样式.当返回值为0时表示不匹配,1表示匹配。该函数从Zabbix1.8.5起开始支持.
  • logseverity
参数:忽略
支持值类型:log
描述:返回最近日志条目的日志等级(logseverity).当返回值为0时表示默认等级,N为具体对应等级(整数,常用于Windowseventlogs).Zabbix日志等级来源于Windowseventlog的Information列.
  • logsource
参数:string
支持值类型:log
描述:检查最近的日志条目是否匹配参数的日志来源.当返回值为0时表示不匹配,1表示匹配。通场用于Windowseventlogs监控.例如logsource["VMWareServer"]
  • now
参数:忽略
支持值类型:any
描述:返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数
  • prev
参数:忽略
支持值类型:float,int,str,text,log
描述:返回之前的值,类似于last(#2)
  • regexp
参数:第一个参数为string,第二个参数为秒或#num
支持值类型:str,log,text
描述:检查最近的值是否匹配正则表达式,参数的正则表达式为POSIX扩展样式,第二个参数为秒数或收集值的数目,将会处理多个值.本函数区分大小写。当返回值为1时表示找到,0为其他.
  • str
参数:第一个参数为string,第二个参数为秒或#num
支持值类型:str,log,text
描述:查找最近值中的字符串。第一个参数指定查找的字符串,大小写敏感。第二个可选的参数指定秒数或收集值的数目,将会处理多个值。当返回值为1时表示找到,0为其他.
示例:
触发器名称:Zabbix agent needs to be upgraded 使用函数str():
{zabbix.zabbix.com:agent.version.str("beta8")}=1
如果当前zabbix agent版本包含beta8(假设当前版本为1.0beta8),这个表达式会返回true. strlen 参数:秒或#num 支持值类型:str,log,text 描述:指定最近值的字符串长度(并非字节),参数值类似于last函数.例如strlen(0)等价于strlen(#1),strlen(#3)表示最近的第三个值,strlen(0,86400)表示一天前的最近的值.该函数从Zabbix1.8.4起开始支持 sum 参数:秒或#num 支持值类型:float,int 描述:返回指定时间间隔中收集到的值的总和.时间间隔作为第一个参数支持秒或收集值的数目(以#开始).从Zabbix1.8.2开始,本函数支持time_shift作为第二个参数。可以查看avg函数获取它的用法 time 参数:忽略 支持值类型:any 描述:返回当前时间,格式为HHMMSS,例如123055

1.演示取出内存的百分比(取出内存的可用的MB大小 / 总的内存大小 = 实际可用的百分比)
1.定义剩余内存百分比

[root@web03 ~]# vim /etc/zabbix/zabbix_agentd.d/oldboy.conf
UserParameter=Mem_pre,free -m|awk '/^Mem/{print $NF*100/$2}'
[root@web03 ~]# systemctl restart zabbix-agent

2.在ZabbixServer验证监控项是否可用

[root@ZabbixServer ~]# zabbix_get -s 10.0.0.30 -k 'Mem_pre'
72.1766

3.Zabbix-Web页面配置监控项


4


2.自定义单条件触发器,设置内存低于 30% 进行报警
1.创建触发器


5


2.填写表达式
问题表达式:{Web03-10.0.0.30:Mem_pre.last()}30
恢复表达式:{Web03-10.0.0.30:Mem_pre.last()}30


6


3.压低内存,检查报警邮件(以内存1G为例,使用下面方式进行消耗内存)
dd if=/dev/zero of=/dev/null bs=500M count=1024


7


3.生产建议:内存低于百分之10加上,swap使用超过百分之5,再次进行监控报警(更精准)
1.增加swap的监控

[root@web03 ~]# vim /etc/zabbix/zabbix_agentd.d/oldboy.conf
UserParameter=Swap_pre,free -m|awk '/^Swap/{print $3*100/$2}'
[root@web03 ~]# systemctl restart zabbix-agent

2.在ZabbixServer使用zabbix_get命令测试

[root@ZabbixServer ~]# zabbix_get -s 10.0.0.30 -k 'Swap_pre'
0

3.在ZabbixWeb创建监控项


8


4.基于之前建立的触发器进行修改,修改为多条规则同时满足才触发

{Web03-10.0.0.30:Mem_pre.last()}<30 and {Web03-10.0.0.30:Swap_pre.last()}>1


9


5.使用dd命令消耗客户端内存(只满足内存低于30%,所以不会进行报警)

dd if=/dev/zero of=/dev/null bs=300M count=1024
6.使用dd命令消耗客户端内存(满足内存低于30%,并且swap使用率超过1%)

dd if=/dev/zero of=/dev/null bs=800M count=1024


9


7.常用的触发器表达式,常用的函数,触发器表达式参考url

and 并且    or 或者
last()      比对最新的值
avg()       平均值
diff()      比对上一次文件的内容
nodata()    收不到数据进行报警nodata(5m)

(5m)        表示最近5分钟得到值
(#5)        表示最近5次得到的值