每天都会发生不同的事件,在软件的世界也不例外,Zabbix 里面所发生的一切也称为事件。Zabbix 的事件类型有如下几种:
- 触发器事件
- 服务事件
- 发现事件
- 自动注册事件
- 内部事件
如何知道这些事件的内容?也是本文要提的事件通知,不过本文的内容只涉及触发器事件,也是我们常说的告警。
正文
Zabbix 的事件是带有时间戳的,因此具备事件通知的基础条件,如果需要查看前端事件的详细信息,可以在 Monitoring ->Prombles 里查看,也可以单击时间查看时间的详细信息。
可以查看问题清单
点击时间戳查看问题详情
本文环境
- RockyLinux 8.5
- Zabbix 6.0.2 LTS
逻辑分析
事件通知用人话来讲,就是通知的内容是什么?通知到谁?通过什么渠道通知到人?如果把这几个问题搞定了其实问题就不大了,全文将通过这三个问句探讨。
模拟主机告警
创建一个模拟主机,挂载 ICMP Ping 模板,该主机是一个不存在的主机。
创建一个不存在的机器
触发告警
查看告警
回到首页,在默认仪表盘里是有问题模块的,可以看到相关告警,可以通过告警查看当前问题为什么 ICMP ping 不可达,这是通过内部的组件告诉你一台主机出现异常了,作为 NOC 团队看这个仪表盘的确就可以了,但前提是24小时得有人盯着这个仪表盘,那么如果相关业务的人员也想看他们的主机情况,就得需要创建相关账号,同时对账号进行资源授权,而细分领域后,告警量级明显会降低很多,此时业务人员也不可能时时刻刻盯着这个仪表盘,所以可以通过一些渠道告知业务人员,例如邮件、一些即时通信软件,本文采用飞书的方式演示。
通过什么渠道告知?
第一个要解决的问题是通过什么渠道来发送通知这件事情,本文确定以飞书的形式通知业务方相关告知内容。由于官方没有相对应的媒介,所以需要自行创建,本文不做媒介创建演示,具体可以参考我之前的文章。
创建的飞书媒介
发送通知的本质就是动作
既然确定了用什么渠道来发送通知,那么怎么发送通知呢?发送通知本身就是一个动作,在 Zabbix 里也是动作(Actions)。
触发器动作(Trigger actions)
点击创建一个动作,动作模块里有两个 tab,分别是动作和操作 动作部分有四块,红星的地方必须填写。
进入触发器动作
动作板块
多个条件才会触发计算类型
name 字段自定义即可:
Type of calculation,关于这个只有在两个条件及以上的的时候才会触发,里面包含四个选项。
- And/Or:和与或同时存在,And 和 Or 的放置方法为同类型条件为 Or,非同类型为 And。
- And:所有条件必须满足。
- Or:满足任意条件即可。
- Custom expression:自定条件组合。
A和D为触发器条件,所以为Or,其他为触发器级别和名称,所以为and
Conditions,点击 Add 后,会弹出条件对话框,会有三个选项:
- Type:包含很多种类型,就不一一赘述了。
- Operator:包含与不包含。
- 根据Type可变。
条件界面
条件类型
操作部分有6块,红星的地方必须填写。
操作部分
Default operation step duration,默认操作步骤的时间,动作内全局变量。
Operations,告警动作。
- Steps:第一个数字代表步骤,后面的数字代表此步骤重复次数,如果是1-10,就证明此步骤每间隔一小时执行此动作。
- Step duration:步骤持续时间,0代表永不过期。
- Send to user groups:发送到用户组。
- Send to users:发送到用户。
- Send only to :推送渠道。
- Custom message:自定义消息模板。
- Conditions:条件(不常用,只有一个条件,就是事件被标记)。
Recovery operations,恢复动作。
- Operation,动作内容。
- Send to user groups,发送到组。
- Send to users,发送到用户。
- Send only to,发送渠道。
- Custom message,自定义消息模板。
- Update operations,更新动作,内容与恢复动作一致。
- Pause operations for suppressed problems,暂停维护期间(被监控设备)的告警通知。
- Notify about canceled escalations 取消通知。
根据环境创建动作
本文的环境是创建一台主机,主机组为 Linux Servers,告警推送给 Admin 用户,根据上文浅析,判断条件只需要一个就够了,主机组为该组即可;动作详情仅修改 Send to users,Send only to 即可。
创建条件
创建动作
建立完成后,首页会出现动作的箭头,此时证明写的动作生效了,但是此时出现红色的箭头,点开查看原因为 No media defined for user,字面意思是用户没有定义媒介,言外之意是该用户没有定义媒介的配置。所以需要进入到用户界面配置,需要配置的部分包括该用户可以通过飞书接受信息,测试用户就随便填写了,和应用无关(邮件与SMS除外),其他的字段分别是什么时间可以接受告警,接受的告警有哪些级别,启用状态。
添加用户媒介配置
调整完用户后,此时会发现依然会出现动作失败的提示,只不过内容变为 No message defined for media type。这个报错为消息模板未定义,即是通知内容模板未写,有两个地方可以填写内容模板,第一个是媒介里的消息模板,第二个为动作里的自定义消息模板,消息模板是支持变量的,具体可以参阅官方文档的宏,也可以参阅笔者的内容美化文章,这里不展开赘述了,至于区别就是媒介里的只需要创建一次,动作里的需要每一条都需要单独写,就这区别,两者任选其一,本文使用媒介里的消息模板。
提示未定义消息模板
媒介里的消息模板
动作里的消息模板
媒介里自定消息模板效果图
当出现下图时候,代表发送已经成功,飞书 APP 也接收到相关信息,恢复和更新动作同理配置,限于篇幅原因不再展开。
写在最后
整个事件通知其实以通知到相关人员为逻辑展开,理解起来就没那么复杂,当然有很多细节需要自己体会,包括后期的事件升级功能、高阶事件通知运用等等,技术本是以人为本,所以大家不理解的时候多想想背后的逻辑,自然简单的多。