原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://gzsamlee.blog.51cto.com/9976612/1865878
一个完善的监控系统需要一定的报警机制,什么时候告警警需要触发器,怎么告警,在什么情况下如何告警取决于action动作:
创建触发器(trigger)
**"监控项"仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,"触发器"正是用于为监控项所收集的数据定义阈值。
**每个触发器仅能关联至一个监控项,但可以为一个监控项或同时使用多个触发器:
事实上,为一个监控项定义多个具有不用阈值的触发器,可以实现不用级别的报警功能
**一个触发器由一个表达式构成,它定义监控项所采取的数据的一个阈值。
**一旦某次采集的数据超出了此触发器定义的阈值,触发器状态将会转换为"Problem";而当采取的数据再次回归至合理范围内时,其状态将重新返回到"OK"
触发器表达式
**触发器表达式高度灵活,可以创建出非常复杂的测试条件
**基本的触发器表达式如下所示:
1
|
{
function
>(
|
-->server : 主机名称
-->key : 主机上关系的相应监控项的key;
-->funtion:评估采集到的数据是否合理范围内时所使用的函数,其评估过程可以根据采集的数据、当前时间及其它因素进行;
-->目前,触发器所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等
-->parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用"#"作为前缀,则表示为最近几次的取值,如果sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
-->此外,avg、count、last、min和max还支持使用第二个参数,用于完成时间限定;例如,max(1h,7d)将返回一周之前的最大值;
operator:表达式所支持的运算符及其功能如下所示:
PRIORITY |
OPERATOR |
DEFINITION |
1 |
/ |
Division |
2 |
* |
Multiplication |
3 |
- |
Arithmetical minus |
4 |
+ |
Arithmetical plus |
5 |
< |
Less than. The operator is defined as: A (A<=B-0.000001) |
6 |
> |
More than. The operator is defined as: A>B <=> (A<=B+0.000001) |
7 |
# |
Not equal. The operator is defined as:A#B <=>(A<=B-0.000001)|(A>=B+0.000001) |
8 |
= |
Is equal. The operator is defined as:A=B <=>(A<=B-0.000001)|(A>=B+0.000001) |
9 |
& |
Logical AND |
10 |
| |
Logical OR |
触发器表达式例子:
1
|
{www.samlee.com:system.cpu.load[all,avg1].last(0)}>3
|
1
2
|
-->表示主机
-->对last函数来说,last(0)相当于last(
#1)
|
创建触发器:
创建触发器各种可用的属性说明:
-->Name: 触发器名称,可以使用宏,如$1、$2、....、$9等;
-->Expression:逻辑表达式,用于评估触发器状态;
-->Multiple PROBLEM events generation:依赖于当前触发器的"Problem"状态生成其他事件;
-->Description: 当前触发器的描述信息;
-->URL:在screen的"Status of Trigger"中显示的内容的链接;
-->Severity: 当前触发器的严重级别;
-->Enabled:是否启用当前触发器;
下面我们通过实例演示应用Zabbix触发器:
(1)创建触发器trigger:入站流量过大
(2)触发器触发后执行动作(action)及媒介定义
-->在配置好监控项和触发器之后,一旦正常工作中的某触发器状态发生改变,一般意味着有异常情况发生,此时通常需要采取一定动作(action),如告警或者执行远程命令等。
-->并非所有的触发器状态发生改变的场景都需要对其进行干预,如转变为"OK"状态时,相应地,如果触发器的状态转变为"Problem",就需要告知所有关心其相关监控指标的人员了。
-->"通知(notification)"是zabbix中最常用的"动作"之一。
实现zabbix通知功能,一般需要两个步骤:
-->定义所需的"媒介(media)": 通常指发送信息的途径,如邮件、Jabber和SMS等;
-->配置一个"动作(action)": 发送信息至某"媒介";
动作由"条件"和"操作"组成,它的逻辑为当"条件"满足时,就执行相应的"操作"
"发送通知"和"执行远程命令"是两个最基本的操作
zabbix事件(event)
Zabbix的时间是基于时间戳进行标记,它们是采取动作(action)如发送邮件通知的基础,其主要来源于三种途径:
-->触发器(trigger)事件:触发器状态每次发生改变,都会生成相应"事件",且通常包含详细信息,如发生的时间及新的状态等;
-->发现(discovery)事件: zabbix会周期期性扫描"网络发现规则"中指定的IP范围,一旦发现主机或服务,就会生成一个或几个发现时间;
-->发现事件有8类: Service Up、Service Down、Host Up、Host Down、Service Discovered、Service Lost、Host Discovered和Host Lost;
-->主动agent自动发现事件(也称为"自动注册事件"): 当一个此前状态未知的主动agent发起检测请求时会生成此举事件;
因此,在Zabbix的通知机制也称做基于事件的通知机制,也只有理解了事件本身,才能定制符合需求的通知系统。
告警媒介类型(Media type)
在zabbix中,媒介指发送通知信息的通道,其通常有以下几种类型:
-->E-mail: 电子邮件,即通知邮件的方式传送通知信息;
-->SMS: 手机短信,即通过连接至zabbix服务器GSM Modem发送通知;
-->Jabber: jabber消息;Jabber是一个开发的、基于XML的协议,能够实现基于Internet或LAN的即时通讯服务;
-->自定义的通知脚本:以上方式不能满足需求时,Zabbix可以调用位于其配置文件"AlertScriptPath"变量所定义的脚本查找目录中的脚本来完成通知功能;
创建zabbix用户组及用户:
(1)创建组:Managers CTOs zabbix_user
(2)创建用户:tom隶属CTOs 修改Admin媒介为loclhost_mailservice
定义动作action,实现第1步和第2步实现先远程执行命令重启服务,第3步至最后一步发送信息至相关人员通知:
以上图为测试条件
最后测试如下:
启动postfix服务然后就是等待那个阈值出现,你可以在shell里面watch -n 1 'ifconfig eth0',如果想快点直接测试lo,通过ab压力测试,那个流量刚刚的,或者直接看screen,当我们定义了阈值,阈值设定较低 虚实线图下面:
首先zabbix主页会有action成功,在命令行就可以看到自己的mail了
定义Zabbix模板快速部署主机监控
(1)定义zabbix模板:
(2)定义监控项item及Graph
(3)定义监控Screens
(4)定义模板触发器
(5)定义动作action指定触发器都执行
实现一个action为多个触发器报警。
zabbix模板定义完成。
最后添加监控主机,调用模板快速部署:
使用模板快速部署完成。