Zabbix企业微信告警
1 模板概述
在本节中,你将会学习如何配置一个模版。
我们在之前的章节中学会了如何配置监控项、触发器,以及如果从主机上获得问题的通知。
虽然这些步骤提供了很大的灵活性,但仍然需要很多步骤才能完成。如果我们需要配置上千台主机,一些自动化操作会带来更多便利性。
模版(templates)功能可以实现这一点。模版允许对有用的监控项、触发器和其他对象进行分组,只需要一步就可以对监控主机应用模版,以达到反复重用的目的。
当一个模版链接到一个主机后,主机会继承这个模版中的所有对象。简单而言,一组预先定义好的检查会被快速应用到主机上。
2 新建模板
开始使用模版,你必须先创建一个。在配置(Configuration) → 模版(Templates)中,点击创建模版(Create template)。这将会像我们展现一个模版配置表格。
所有必填字段以红色星标标示。
需要输入以下必填字段:
模版名称(Template name)
输入一个模版名称。名称自定义,不支持中文,可以使用数字、字母、空格及下划线。自定义名称:Custom Templates
组(Groups)
使用选择(Select)按钮选择一个或者多个组。模版必须属于一个组,自定义组名: Custom Templates group
完成后,点击添加(Add)。你新建的模版可以在模版列表中查看。
3 在模版中添加监控项
为了在模版中添加监控项,在配置(Configuration) → 主机(Hosts),点击主机旁边的监控项(Items)。
然后:
选中列表中监控项的选择框
点击列表下方的复制(Copy)
选择想要复制这个监控项的目标模版
点击复制(Copy)
你现在可以前往配置(Configuration) → 模版(Templates),'新模版(New template)'中看到新的监控项。
我们目前只创建了4个监控项,但你可以用同样的方法在模版中添加其他的监控项,触发器以及其他对象,直到完成满足特定需求(如监控OS,监控单个应用)的完整的对象组合。
4 自定义监控项
本章将学习如何通过脚本来自定义zabbix的监控项
自定义nginx的监控项,首先要通过脚本将各种状态的值取出来,然后通过zabbix监控
#创建目录,然后将脚本上传到该目录
[root@web26 ~]# mkdir /etc/zabbix/script/
#脚本内容主要是利用shell脚本中的函数定义nginx状态页面的各个字段,然后结合awk进行取值,最后在通过case语句控制脚本输出
[root@web26 ~]# vim /etc/zabbix/script/ngx_status.sh
#定义Nginx status页面
ngx_status="http://127.0.0.1/status"
#判断status页面是否存活
ngx_status_code() {
http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`
if [ ${http_code} == "200" ];then
return 1
else
echo "Nginx status is not running."
fi
}
#获取当前活动用户的连接数量
active() {
ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}
#获取接受的客户端连接数量
accepts() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}
#获取处理的连接总数量
handled() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}
#获取客户端请求的总数量
requests() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}
#获取正在读取请求标头的当前连接数量
reading() {
ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}
#获取正在将响应写回到客户端的当前连接数量
writing() {
ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}
#获取当前正在等待响应的客户端连接数量
waiting() {
ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}
#使用位置变量控制脚本输出
case $1 in
active)
active;;
accepts)
accepts;;
handled)
handled;;
requests)
requests;;
reading)
reading;;
writing)
writing;;
waiting)
waiting;;
*)
echo "Unknown options"
esac
#添加执行权限
[root@web26 script]# chmod +x ngx_status.sh
#修改zabbix agent配置文件,开启以定义监控功能
[root@web-26 nginx-1.18.0]# vim /etc/zabbix/zabbix_agentd.conf
...
311 Include=/etc/zabbix/zabbix_agentd.d/*.conf #自定监控路径
330 UnsafeUserParameters=1 #开启自定义监控功能,默认该功能为关闭状态
#进入自定义监控路径
[root@web-26 nginx-1.18.0]# cd /etc/zabbix/zabbix_agentd.d/
#创建自定义监控文件(文件名要求以 .conf结尾)
[root@web-26 zabbix_agentd.d]# vim custom_nginx_status.conf
UserParameter=nginx.active,bash /etc/zabbix/script/ngx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/ngx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/ngx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/ngx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/ngx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/ngx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/ngx_status.sh waiting
#解释
UserParameter= #自定义监控固定格式
nginx. #监控项名称
#重启zabbix-agent服务
[root@web26 zabbix_agentd.d]# systemctl restart zabbix-agent
5 获取监控项数据
#服务端下载zabbix get软件包,用于在命令行获取客户端监控项的值
[root@zabbix-server ~]# yum -y install zabbix-get
#获取客户端监控项值
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k nginx.active #当前活动用户的连接数量
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k nginx.accepts #接受的客户端连接总数量
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k nginx.handled #处理的连接总数量
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k nginx.requests #客户端请求的总数量
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k nginx.reading #正在读取请求标头的当前连接数
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k nginx.writing #将响应写回客户端的当前连接数
[root@zabbix-server ~]# zabbix_get -s 192.168.0.111 -k nginx.waiting #当前客户端正在等待服务器的响应数量
6 在模板中添加监控项
在 配置 → 模板 页面查找到我们自建的模板,点击模板中的 ‘监控项’ 然后 创建监控项
当完成后,点击 添加(Add),新的监控项将出现在监控项列表中。
我们按照上述方法在将其余的监控项添加至模板中。最终的效果如下图:
7 绑定模板
由于模板中又增加了多个监控项,所以我们将绑定到主机。
点击 配置 → 主机 找到你的主机,然后选择 '模板',选择好模板后,点击更新
随后点击配置栏中的监测(Monitoring) → 最新数据 (Latest data)以查看具体细节。
8 应用集
模板中的应用集我们可以理解为监控项的分组,可以将相同类型的监控项分配到同一个应用集内。
创建应用集:**配置 → 模板** 找到对应的模板选择 应用集 → 创建应用集
9 批量更新
有时您可能需要同时更改模板中的某些属性,模板中的批量更新功能可以让我们更加方便的对模板进行修改。
例如:我们可以将前边模板中的监控项批量更新至CPU 负载量的应用集内。
在模板列表中,标记要更新的监控项,点击列表下面的 批量更新
页面跳转到带有所需属性的选项卡,标记要更新的属性的复选框, 并输入新的值。
当选择 应用集 复选框时,可以使用以下的选项:
添加 - 从现有的模板中添加新的应用集。
替换 - 将现有应用集中的监控项替换
移除 - 将从应用集中删除特定监控项。
默认为 '添加' 即可,点击 更新 所有选择模板的属性都会相应地更新。
更新后可通过监测 → 最新数据查看
10 Zabbix企业微信报警
zabbix具备灵活的故障告警功能,允许用户几乎为任何的故障配置基于电子邮件、短信、企业微信、钉钉等告警通知,这样管理员就可以快速响应服务器出现的问题
企业微信告警配置步骤:
登录企业微信官网,准备zabbix企业微信的应用ID与密码
准备企业微信号的企业ID
准备企业微信的个人账号ID
测试zabbix应用ID与企业微信接口是否可以正常建立连接
准备企业微信报警脚本,并指定企业微信账号信息
配置报警媒介(收件人、消息主题、具体告警信息)
创建告警动作(针对监控的具体对象,配置告警,例如:网站的访问量告警)
配置触发器(条件达到预设的值,即可触发告警)
测试告警
zabbix应用ID:1000003
zabbix应用ID密码:MZCdWfnhDTMetH2QnyCNuJQxE8bH96UPrTVQWVt3qdU
企业ID:ww457b60803c0eff36
个人ID:ZhouLe
10.1 准备企业微信信息
登录企业微信:work.weixin.qq.com
查看企业ID
查看个人账号ID
微信企业号接口调试工具:https://open.work.weixin.qq.com/wwopen/devtool/interface/combine
测试zabbix应用能否访问企业微信
10.2 配置报警脚本
zabbix要求故障报警脚本必须放在指定路径,通过下边命令过滤配报警脚本的存放路径
[root@zabbix-server ~]# egrep -v '^$|#' /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts //存放报警脚本路径
将脚本放至该路径
[root@zabbix-server ]# cd /usr/lib/zabbix/alertscripts/
添加执行权限
[root@zabbix-server alertscripts]# chmod +x wechat.py
修改脚本添加企业微信信息
[root@zabbix-server alertscripts]# vim wechat.py
Data = {
"touser": "User", # 企业号中的用户帐号
#"totag": Tagid,
#"toparty": Partyid, #部门ID
"msgtype": "text",
"agentid": "Agentid", # Zabbix应用ID
...
Corpid = "wxaf" # 企业ID
Secret = "aKDdCRT76" # Zabbix报警密码
#Tagid = "1"
Agentid = "1000001" # Zabbix应用ID
脚本需要安装requests模块(需要pip安装)
[root@zabbix-server]# pip --version #查看pip是否已经安装
[root@zabbix-server]# yum -y install epel-release #安装epel-release源
[root@zabbix-server]# yum install python-pip -y #安装pip
[root@zabbix-server alertscripts]# pip install python-requests requests #安装模块
提示:如果安装失败可升级pip版本在进行安装
[root@zabbix-server]# pip install --upgrade pip #升级pip(可选配置) #提示:如果升级失败,用下边命令进行升级 python -m pip install -U force-reinstall pip #备用升级命令
执行脚本测试:’收件人的微信账号‘ '信息标题' '信息内容'
[root@zabbix-server]# ./wechat.py Yesir hello 帅哥
重启服务
[root@zabbix-server ]# systemctl restart zabbix-server
10.3 创建报警媒介
媒介是Zabbix中用于发送通知和告警的传输通道。
您可以配置多种媒介类型:
媒介类型在 管理 → 媒介类型 中进行配置。
点击 创建媒介类型 按钮来创建一个新的媒体类型,就会打开一个媒体类型的配置表单。
有些参数对于所有媒介类型都是通用的。
下边三个脚本特定参数是zabbix内置,用于指定在发送消息时的收件人、消息主题、消息内容
{ALERT.SENDTO} #收件人
{ALERT.SUBJECT} #消息主题
{ALERT.MESSAGE} #消息内容
自定义消息模板的步骤:
在 消息模板 选项卡中,点击 : 将打开一个 消息模板的弹出窗口。
选择所需的 消息类型 ,编辑 主题 及 消息 文本。
消息模板 选项卡可以为以下的所有或部分事件类型设置默认的通知消息:
问题
问题恢复
问题更新
自动发现
自动注册
内部问题
内部问题恢复
下边是zabbix内置的问题消息模板,用于指定发送告警的具体消息
告警信息:{EVENT.NAME}
告警主机: {HOST.NAME}
主机地址: {HOST.IP}
监控项目: {ITEM.NAME}
当前取值: {ITEM.LASTVALUE}
告警等级: {TRIGGER.SEVERITY}
告警时间: {EVENT.DATE}-{EVENT.TIME}
事件ID: {EVENT.ID}
点击 添加 保存消息模板
配置 问题恢复 消息
下边是zabbix内置的问题恢复消息模板,用于指定故障恢复时,发送告警的具体消息
故障恢复:{EVENT.NAME}
主机地址: {HOST.IP}
告警名称: {EVENT.NAME}
持续时长: {EVENT.DURATION}
恢复时间: {EVENT.RECOVERY.DATE}-{EVENT.RECOVERY.TIME}
当前状态: {TRIGGER.STATUS}
当前取值: {ITEM.LASTVALUE}
事件ID: {EVENT.ID}
点击 添加 保存消息模板
10.4 媒介类型测试
测试配置好的媒介类型是否正常工作
在 报警媒介类型 列表中找到相关的企业微信报警
点击列表最后一栏中的 测试 (将打开一个测试窗口)
10.5 获取通知
由于前边在学习邮件报警时已经配置过触发器及动作:
可从 配置 → 主机 ‘触发器’ 页面查看前边配置的触发器
可从 配置 → 动作 页面查看前边配置过的触发器动作
接下来我们添加微信消息的收件人。
点击 用户基本资料 → 报警媒介 → 添加 企业微信收件人。
选择 更新
接下来我们使用多个终端同时登录来验证报警消息。
从 监测 → 最新数据 以查看具体值。
从 监测 → 问题 以查看具体问题通知。
从 报表 → 动作日志 以查看发送消息是否成功。
10.6 问题确认
Zabbix的问题事件可由用户确认。
如果用户收到问题事件的通知,可以打开Zabbix的前端页面,从问题更新页面上找到对应的问题进行确认。当进行确认的时候,可以输入注释表明他们正在处理该问题,或者输入任何他们想表述的内容。
利用这种方式,如果有另一个系统管理员察觉到这个问题,就可以立刻知道该问题已经被确认过,并且看到之前留下的注释。
这样的问题处理工作流,可以让多个系统管理员协同工作。
提示: 要确认事件,用户必须至少具有相应触发器的读权限。
常见的问题确认方法:从左侧配置栏的 监测 (Monitoring) → 仪表板 (Dashboard) → 问题 (Problems) 从确认小部件中确认状态。
所有必填输入字段都标有红色星号。
评论区