zabbix的各种报警机制实战
zabbix报警功能---触发器/动作
动作: 指定将报警信息发送给谁/定义报警的信息/定义报警的类型(邮件 微信 电话)
触发器: 设定某个监控项报警的阈值条件,可以实现报警提示(条件表达式),默认页面提示报警
报警方式:
- 页面提示信息报警
- 页面声音提示报警
- 邮件信息报价
- 微信功能报警
- 短信报警/电话报警
zabbix_server的配置可以看我之前的文章
https://www.jianshu.com/p/7d798423ec58
zabbix_agent的配置也看一参考我之前的文章
这里我们找台主机做了nginx服务
https://www.jianshu.com/p/a6c3a551f2ec
[root@web01 ~]# ps -ef | grep [n]ginx
root 1124 1 0 5月15 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
czq 1125 1124 0 5月15 ? 00:00:00 nginx: worker process
czq 1126 1124 0 5月15 ? 00:00:00 nginx: worker process
[root@web01 ~]# ps -ef | grep -c [n]ginx
3
可以看到nginx服务启动时,是有会有3个相关进程的
因此,我们可以编写zabbix_agent配置文件添加自定义监控文件,然后在再web界面设置一个判断,当进程小于3时,也就是服务停止时,就会通过触发器触发报警
[root@web01 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@web01 zabbix_agentd.d]# cat web_server.conf
UserParameter=web_state,ps -ef | grep -c [n]ginx
[root@web01 zabbix_agentd.d]# systemctl restart zabbix-agent ##重启zabbix_agent服务
在zabbix_server命令行测试
[root@zabbix ~]# zabbix_get -s 172.16.210.52 -k 'web_state' ##当调用到这个键值时,能给出nginx的进程数量
3
第一步: 创建监控项
配置
------主机
---对应主机的监控项

点击
创建监控项

设置好对应的值后,点击
添加

第二步:创建触发器
配置
----主机
----选择相应监控主机触发器
---创建触发器

点击
添加

点击
添加
选择对应的监控项,和设置好触发条件点击
插入

`{web01:server_state[80].last()}<=2`
{监控主机名称:键值.调用的表达式函数}<=2
表达式总结:
last( ) 收集到最新信息(数值) ***\*\*
max( ) 在一定周期内,收集到的最大值
min( ) 在一定周期内,收集到的最小值
diff() 在一定时间内,判断收集到的信息是否不同
change() 在一定时间内,判断收集到的信息是否不同
avg() 取一段时间的平均值

点击
更新
页面报警测试:
页面正常

把zabbix_agent的nginx停掉
[root@web01 ~]# systemctl stop nginx
页面出现报错信息

把服务重新启动
[root@web01 ~]# systemctl restart nginx
报警信息消失

声音报警
右上角的小人头---正在发送消息


勾选
前端消息中
,再点击更新
可以尝试重启nginx再关闭,回到web界面就能听到声音
-_-因为是写文档,你们听不到声音,就不重启服务演示咯~~
邮件信息报警
1.开启动作栏
配置
---动作
---将默认动作进行开启

将
停用的
点亮
2.建立和邮箱的关系
管理
----报警媒介类型
---创建媒介类型



填写好相关信息就可以点击
添加
了
3.定义接受报警的邮件地址
点击右上角的小人头

点击
添加

再点击添加

点击更新
4.测试
停掉nginx
[root@web01 ~]# systemctl stop nginx



三个用户,均已收到
微信报警
1.注册企业微信,并进行配置

选择一种加入方式并加入

成员加入后,点击通讯录
可查看加入的成员

点击
应用与小程序
,再点击创建应用

设置好图标和名称可见范围后,点击
创建应用

收集相关程序代理id和密钥和企业id


程序代理id: 1000003
程序密钥: nR0WyfP7251_jg6vOSQ4SpTrZlrWS-SVm_2nyrXTf6Y
企业id:ww7a34cccfb9fd932b
2.编写报警脚本测试(python)
在zabbix_server端找到脚本存放路径
[root@zabbix ~]# cat /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts ##这条就是存放脚本的路径
编写脚本,填写对应的企业和程序信息
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts
[root@zabbix alertscripts]# cat weixin.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='ww7a34cccfb9fd932b' ##填写企业微信id
appsecret='nR0WyfP7251_jg6vOSQ4SpTrZlrWS-SVm_2nyrXTf6Y' ##填写小程序密码
agentid=1000003 ##填写小程序代理id
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message) ##发送格式是帐号 + 主题 + 内容
脚本执行语法格式: 帐号
+ 主题
+ 内容
用户名可以在通讯录找到

测试脚本:
[root@zabbix alertscripts]# chmod +x weixin.py ##添加执行权限
[root@zabbix alertscripts]# ./weixin.py ChenZhengQiang 晚饭 今晚6.吃饭不
Traceback (most recent call last):
File "./weixin.py", line 3, in <module>
import requests
ImportError: No module named requests ##发现报错
出现报错:ImportError: No module named requests
,缺少requests
模块
报错解决:
[root@zabbix alertscripts]# yum install -y python-pip ##安装python包管理工具
[root@zabbix alertscripts]# pip install requests ##安装requests模块
Collecting requests
Downloading https://files.pythonhosted.org/packages/1a/70/1935c770cb3be6e3a8b78ced23d7e0f3b187f5cbfab4749523ed65d7c9b1/requests-2.23.0-py2.py3-none-any.whl (58kB)
100% |████████████████████████████████| 61kB 56kB/s
Collecting chardet<4,>=3.0.2 (from requests)
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
100% |████████████████████████████████| 143kB 18kB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests)
Downloading https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl (126kB)
100% |████████████████████████████████| 133kB 25kB/s
Collecting idna<3,>=2.5 (from requests)
Downloading https://files.pythonhosted.org/packages/89/e3/afebe61c546d18fb1709a61bee788254b40e736cff7271c7de5de2dc4128/idna-2.9-py2.py3-none-any.whl (58kB)
100% |████████████████████████████████| 61kB 26kB/s
Collecting certifi>=2017.4.17 (from requests)
Downloading https://files.pythonhosted.org/packages/57/2b/26e37a4b034800c960a00c4e1b3d9ca5d7014e983e6e729e33ea2f36426c/certifi-2020.4.5.1-py2.py3-none-any.whl (157kB)
100% |████████████████████████████████| 163kB 16kB/s
Installing collected packages: chardet, urllib3, idna, certifi, requests
Successfully installed certifi-2020.4.5.1 chardet-3.0.4 idna-2.9 requests-2.23.0 urllib3-1.25.9
You are using pip version 8.1.2, however version 20.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command. ##安装成功
[root@zabbix alertscripts]#
再次测试:
[root@zabbix alertscripts]# ./weixin.py ChenZhengQiang 晚饭 今晚6.吃饭不
成功收到测试信息!

3.回到zabbix的web管理界面修改添加报警媒介
管理
---报警媒介类型
--创建媒介类型

填写好对应的信息再点击
更新

配置接收微信的人员
点击小人头
---报警媒介
----添加

点击添加

点击更新

4.测试微信报警:
把zabbix_agent的nginx服务停掉
[root@web01 ~]# systemctl stop nginx
发现报错
这是临时生成的日志没有写入权限

解决办法:
在zabbix_server端更改日志所主
[root@zabbix ~]# chown zabbix /tmp/weixin.log
再次测试
[root@web01 ~]# systemctl restart nginx ##先恢复
[root@web01 ~]# systemctl stop nginx ##再停掉
报警成功!

电话和短信报警
1.利用第三方电话报警平台
1).利用阿里大鱼(收费)
https://www.aliyun.com/product/sms?spm=a3142.7791109.0.0.34691fd2OVGqAY
2)利用onealert发送报警
https://caweb.aiops.com/#/integrate/monitor
这里我们使用onealert
配置分派策略

点击
保存
设置通知策略
配置
---新建通知

设置好合适的信息,再点击
保存

选择监控工具
集成
---zabbix

选择zabbix

点击
保存并获取应用key
2.安装onealert_agent

回到zabbix服务端的命令行
- 进入zabbix脚本目录
[root@zabbix ~]# cd /usr/lib/zabbix/alertscripts
2.获取alert agent包
[root@zabbix ~]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz
3.安装配置alert
[root@zabbix alertscripts]# tar -xzf ca_zabbix_release-2.1.0.tar.gz
[root@zabbix alertscripts]# cd cloudalert/bin
[root@zabbix bin]# bash install.sh 19a0cce0-fa5b-1f71-04f1-f4786f11525f ##开始安装
./log.sh:行6: /usr/lib/zabbix/alertscripts/cloudalert/bin/cloudalert.conf: 没有那个文件或目录
start to create config file...
Zabbix管理地址: http://172.16.210.56/zabbix/ ##输入zabbixweb管理进入地址
Zabbix管理员账号: Admin ##输入管理员帐号
Zabbix管理员密码: ##输入管理员密码

3.查看web界面相关媒介和动作有没有生产
配置
---动作

出现一个
cloudalert action
的动作,说明我们的安装是很成功的.然后我们也可以把默认的动作给禁用掉
报警媒介也会出现一个
cloudalert action
4.测试
[root@web01 ~]# systemctl stop nginx
在动作日志查看,发现已送达,但是我们选择的是免费版的,所以收不到邮件.....
