一、报警机制概述
1.什么是报警机制
报警机制在Zabbix中是由两组动作组成的,即触发器+动作
触发器(trigger):一个表达式,或者说一个条件,如用户超过30等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作
动作(Action):动作是条件被触发后的行为,可以是发送一条短信或邮箱,或是重启某个服务
当这二者结合起来时,就构成了我们所说的报警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到我指定的邮箱。然后我们可以及时的去处理这个错误。
2.监控流程
如果要掌握一款监控软件,那么它的报警流程和报警机制则是我们必须要学习和研究的重点内容之一。
应该说Zabbix系统的报警流程还是比较复杂的,因为,首先它有多种类型的事件驱动。其次,它有独特的行为升级机制,特别是对于同一个事件,在不同的时间阶段,可以将不同的信息发送给不同的用户的机制。
应该说,这个机制在许多开源监控系统中都是没有的(至少笔者所了解的开源监控系统中除了Zabbix以外,其他系统都没有这个机制)。再次,在Zabbix系统的报警流程中,用户可以设置灵活和复杂的触发条件,且这些条件还可以支持逻辑运算,而这也是许多监控软件所不具备的。最后,在Zabbix系统的报警流程中增加了用户权限控制功能。
下面是Zabbix系统报警流程图
Zabbix系统中的报警是通过系统中的事件来驱动动作,而后由动作来执行相应的行为,最后由行为通过指定的消息介质接口将报警信息发送给用户的。
下面我们从流程图从上往下进行分解。
1)确定事件源
事件主要来源于三个方面:
- 触发器状态的改变
- 被监控设备代理的自动注册
被监控设备代理的自动发现等
2)事件被触发后执行动作
而一旦系统中有新的事件产生,Zabbix系统中的相关进程就会自动匹配,系统中所有已经存在的动作中所配置的触发条件和事件来源类型,并触发所有触发条件和事件类型都匹配成功的动作。
3)动作评判目标用户或目标组的权限
动作一旦被触发,则系统就会执行对应动作的行为。而在执行动作行为时,系统会根据事件来源所属的主机或主机组,来判断动作行为所指定的目标用户或用户组是否至少具有读取权限。如Zabbix系统中权限最高的是Admin用户,如果你指定的用户不具备权限去执行动作,则视作失败的动作。
Zabbix系统中的动作都是由某个具体用户所执行。
4)确定消息介质,发送消息通知
只有在上述过程都匹配成功以后,系统才能根据行为中所指定的消息接口,调用相应的消息介质所对应的方法和程序,并将报警信息发送给目标用户或用户组中的所有用户。
5.行为升级
什么是行为升级:
比如,我监控用户的数量不超过30,超过30后触发报警,这是第一级行为
我又设置了数量不超过40,超过40后触发报警,这是第二级行为
而从一级行为升级到二级行为就叫做行为升级
对于事件类型是触发器的动作:
系统在完成新事件之后的首次报警信息发送后,如果触发动作的事件类型是触发器类的,且触发器的状态不是由“问题(PROBLEM)”转变为“正常(OK)”,则对应的动作行为将进入升级过程。在动作行为的升级过程中,系统会依据行为中所配置的升级时间间隔,有计划有步骤地执行对应动作中的行为,直到引起对应动作被触发的触发器的状态从“问题”转变为“正常(OK)”为止。
对于事件类型非触发器的动作:
而对于被监控设备代理自动注册、自动发现和触发器从“问题”状态转变为“正常”状态等类型事件所触发的动作,则不会有行为的升级过程。由这些类型事件触发的动作,只会执行一次对应行为,即只会给相应用户发送一次报警信息。
而如果系统在调用某个消息介质时出错,则Zabbix会按照服务器端配置文件中SenderFrequency配置项所指定的时间间隔重复尝试调用出错的消息介质。但是,这样的尝试次数并不是无限制的,在配置动作的时候需要指定次数。
二、Zabbix设置报警装置
本节将通过一个案例来讲解如何这是报警装置
本节需要提前准备好一个模板
[自定义模板教程]
实验流程:
- 监控Linux服务器系统账户
- 创建Action,Triggers,Items,Media,设置邮件服务器及收件人邮箱
- 当系统账户数量超过30人时发送报警邮件
步骤一:创建触发器规则
1)创建触发器
创建触发器时强烈建议使用英文的语言环境,通过Configuration--> Templates,找到我们之前创建的count.line.passwd模板,点击模板后面的triggers
点击triggers后,点击右上角创建Trigger,进去之后看到的界面如下,写入一个名称
2)触发器表达式
创建触发器时需要定义表达式,触发器表达式(Expression)是触发异常的条件,触发器表达式格式如下:
{<server>:<key>.<function>(<parameter>)}<operator><constant>
{主机:key.函数(参数)}<表达式>常数
在如图-2所示的蓝色方框中编写触发器表达式,可以直接手写,也可以通过add选择表达式模板。
下面,我们看几个表达式的案例:
如果web1主机最新的CPU平均负载值大于5,则触发器状态Problem:{web1:system.cpu.load[all,avg1].last(0)}>5 //0为最新数据
根分区,最近5分钟的最大容量小于10G,则状态进入Problem:{vfs.fs.size[/,free].max(5m)}<10G //5m为最近5分钟
最新一次校验/etc/passwd如果与上一次有变化,则状态进入Problem:{vfs.file.cksum[/etc/passwd].diff(0)}>0 //0为最新数据
大多数函数使用秒作为参数,可以使用#来表示其他含义(具体参考表-1)。
avg, count, last, min and max 等函数支持额外的第二个参数time_shift(时间偏移量),这个参数允许从过去一段时间内引用数据。
3)创建表达式
名称的格式最好能体现这个动作的内容,点击Add
如图所示,第一行为Item,即触发事件,选择相匹配的事件,本节并没有教大家如何配置事件,我在本节开始出给出了一个链接,里面有配置事件的教程。
Function:函数,可以选择zabbix提供的函数
Time shift : 间隔秒数,当用户在最近60秒 用户数量超过30后触发动作,(若在60秒内降到30以下则不会触发)
N:数量,这里写30
完了之后,将安全级别设置为Warring,点击添加
步骤二:设置邮件
1)创建Media
通过Administration(管理)-->Media Type(报警媒体类型)-->选择Email(邮件)
2)修改参数
SMTP修改为本地邮件服务器
步骤三:设置动作执行人
我们这个发邮件的动作需要一个用户执行,并且这个用户需要有执行的权限
我们选择Admin,即Zabbix的管理员来执行这个动作
点击Admin,选择Media,添加一个媒介
点击Add,只需要修改Send to 即可
步骤四:创建Action动作
1)创建动作,设置触发器触发动作
填写Action动作的名称,配置什么触发器被触发时会执行本Action动作(账户数量大于30)
点击Select后选择一个触发器即可
2)配置Action的具体行为
点击Operations,点击New
Steps代表动作的执行次数,1-0代表无限次执行,一般1-3即可
Step duration 持续时间,写60秒,合理即可
Send to Users:发送给某个用户,为什么这个动作触发后发送给Admin?因为Admin的媒介配置中,我们为其设置的Linux媒介用户是root@localhost,即本地的root用户,所所以实际上这封邮件是发送给root用户的
点击Add
步骤五:测试
在被监控主机创建账户(让账户数量大于30),然后登录监控端Web页面,在仪表盘中查看问题报警(需要等待一段时间),如图-16所示。
多添加几个用户(一定要在被监控服务器上)
观察到一根警戒线,我们使用户数量超过警戒线
查看报警邮件,在监控服务器上使用mail命令查收报警邮件
如果没有邮件你需要耐心等待一下,2分钟之后任然没有可能是上面步骤出现了问题