1. 实验内容简述
本次实验, 旨在通过 zabbix 监控, 实现对告警信息的实时通知, 主要用到了 zabbix 中的 item,trigger,action,user,user group,media 等内容, 通过 item 监控特定的对象, 当 item 返回值满足一定条件的时候, 触发触发器的 action 动作, 通知相关的用户. 实现的功能有以下几点:
监控的内容是什么
在什么样的情况下属于异常, 需要通知
以什么样的方式通知用户, 怎么通知
通知用户的内容是什么
2. 实验步骤
2.1 创建触发器
在之前创建的 item 上, 直接创建一个触发器, 使用的 item 是 nginx.active, 当该 item 获取的最后的值, 大于 1 时, 就产生 trigger, 所以条件就是大于 1 或者是大于等于 2.
在这里选择的是 configuration-template-trigger, 直接在模板里面创建触发器, 关联该模板的所有主机就都会有这个触发器了. 输入触发器的名称, 该触发器触发之后的服务级别 (未定义, information,warnning,average,high,disater), 输入触发器的表达式, 可以直接通过表达式向导编写, 选择所需要的 item, 然后获取该 item 的指定规则的值, 条件是该值大于 1 即可. 生成的结果就是:
{Template Nginx Status:nginx.status[8080,active].last()}>=2
添加完成后就可以开始添加 action 了.
2.2 创建告警介质 media
默认的告警介质有 Email,jabber 和 SMS, 实际上还可以通过脚本的形式, 生成告警介质, 在这里为了模拟介质, 我们选择将告警内容输入到一个文本文件中, 假装是通过短信接口发送出去了. 首先是要找到 zabbix-server 上关于告警脚本的配置路径, 也就是 alertscripts 的路径, 在 zabbix-server 的配置文件中:
- VIM /etc/zabbix/zabbix_server.conf
- AlertScriptsPath=/usr/lib/zabbix/alertscripts
所以我们需要将编写的发送脚本, 放在该目录下, 而且还是能有可执行权限的 shell 脚本, 这里我们写的很简单, 对于发送短信, 一般都是有三个参数, 收件人, 收件主题和收件内容. 所以我们这里面模拟的时候也是需要三个参数, 然后将内容写入到一个临时文件中. 具体脚本如下:
- #/bin/bash
- ALERT_TO=$1
- ALERT_TITLE=$2
- ALERT_MESSAGE_BODY=$3
- echo "-------A NEW MESSAGE-------">> /tmp/sms.log
- echo "$ALERT_TO">> /tmp/sms.log
- echo "$ALERT_TITLE">> /tmp/sms.log
- echo "$ALERT_MESSAGE_BODY">> /tmp/sms.log
在这脚本中, 先获取三个变量参数值, 然后将对应的内容写入到临时文件中. 在这个地方有个小坑, 就是 message 字段是换行的多个字段, 如果直接用变量写入文件, 只写入了最后一行, 其他的内容内容都丢了, 这是 shell 脚本应该注意的地方. 其中这三个参数分别代表着收件人联系方式, 收件主题和收件内容.
脚本编写完成之后, 要添加可执行权限, 一会是 zabbix 用户去调用该脚本写入, 所以这涉及到权限问题, 如果是先执行了脚本, 生成了 / tmp/sms.log 文件, 则当出现告警的时候, zabbix 用户是无法写入的, 因为该文件的属主是 root, 其他用户无法写入, 需要重新修改权限. 所以建议是删除该文件, 由 zabbix 用户去创建.
脚本编写完成之后, 就需要去 web 页面上进行配置了, 主要是配置告警媒介 media, 在 administration-media type 中, 我们选择新建, 然后选择 scripts, 输入不带路径的脚本名称, 因为脚本就存放在默认路径下. 在这里, 升级改版之后, 需要输入参数, 因为我们的脚本有三个参数, 所以我们在这里也需要输入三个参数, 分别是 {ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}. 这三个参数, 分别对应的内容是这样的:
{ALERT.SENDTO}: 对应的是在 user 中用户的联系方式, 可以是电话号码, Email-address 等
{ALERT.SUBJECT}: 对应的是在 action 中的 subject 主题
{ALERT.MESSAGE}: 对应的是在 action 中的 message 信息, 包含 operation 和 recovery operation
2.3 创建用户和用户组
用户和用户组, 是用来接收告警信息的, 所以需要创建, 在 trigger 触发器中, 可以选择将告警信息内容, 发送给用户组或单独用户, 比较关键的一点时, 对于主机或主机组的权限, 只能授权给用户组, 不能单独授权给某一个用户, 所以需要创建用户组. 在这里我们创建的用户组是 test, 用户是 zhangsan. 在用户的 media 配置中, 可以选择刚刚创建的 sms 媒介 media. 然后就完成用户和用户组的创建了.
2.4 创建 action
创建 action, 就是将之前创建的触发器, 和用户关联起来, 并设置通知用户的内容, 配置路径在 configuration-action, 选择新建 action.
创建 action 的时候, 需要选定条件, 也就是触发器的名称. 这里我们选择的是刚才创建的触发器, Template Nginx Status: Nginx Active link overload
创建了 action 之后, 需要在 operation 中进行操作了, 编写告警内容信息, 以及发送对象. 对于告警信息, 默认给了一个模板, 如果技术比较好, 完全可以自己写, 这里我就完全是照搬了. 选择 operation 的操作内容, 选择操作方式和发送方式, send message.
配置完成之后, 就可以通过来模拟触发器告警, 来收信息了.
2.5 模拟告警
在这里, 通过对 nginx 的多次访问, 就能触发告警, 在出发告警之后, 在 monitor 中的 problem, 就能直接看到告警的概要, 包含告警内容, 操作 action 方式, 是否发送成功等, 点击前面的时间, 可以看到详细的事件信息.
来源: http://www.bubuko.com/infodetail-3013551.html