zabbix的各种报警机制实战

zabbix报警功能---触发器/动作

动作: 指定将报警信息发送给谁/定义报警的信息/定义报警的类型(邮件 微信 电话)
触发器: 设定某个监控项报警的阈值条件,可以实现报警提示(条件表达式),默认页面提示报警

报警方式:

  1. 页面提示信息报警
  2. 页面声音提示报警
  3. 邮件信息报价
  4. 微信功能报警
  5. 短信报警/电话报警

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

第一步: 创建监控项

配置------主机---对应主机的监控项

image.png

点击创建监控项
image.png

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

第二步:创建触发器

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

image.png

点击添加
image.png

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

`{web01:server_state[80].last()}<=2`

{监控主机名称:键值.调用的表达式函数}<=2

表达式总结:

last( )   收集到最新信息(数值) ***\*\*

max( )   在一定周期内,收集到的最大值

min( )   在一定周期内,收集到的最小值

diff()   在一定时间内,判断收集到的信息是否不同

change()  在一定时间内,判断收集到的信息是否不同

avg()   取一段时间的平均值

image.png

点击更新

页面报警测试:

页面正常


image.png

把zabbix_agent的nginx停掉

[root@web01 ~]# systemctl stop nginx

页面出现报错信息


image.png

把服务重新启动

[root@web01 ~]# systemctl restart nginx 

报警信息消失


image.png

声音报警

右上角的小人头---正在发送消息

image.png

image.png

勾选前端消息中,再点击更新
可以尝试重启nginx再关闭,回到web界面就能听到声音
-_-因为是写文档,你们听不到声音,就不重启服务演示咯~~

邮件信息报警

1.开启动作栏

配置 ---动作 ---将默认动作进行开启

image.png

停用的点亮
image.png

2.建立和邮箱的关系

管理 ----报警媒介类型 ---创建媒介类型

image.png

image.png

image.png

填写好相关信息就可以点击添加

3.定义接受报警的邮件地址

点击右上角的小人头

image.png

点击添加
image.png

再点击添加

image.png

点击更新

4.测试

停掉nginx

[root@web01 ~]# systemctl stop nginx
image.png

image.png

image.png

三个用户,均已收到

微信报警

1.注册企业微信,并进行配置

https://work.weixin.qq.com/wework_admin/loginpage_wx?redirect_uri=https://work.weixin.qq.com/wework_admin/frame#profile
点击成员加入

image.png

选择一种加入方式并加入


image.png

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

image.png

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

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

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


image.png

image.png

程序代理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)  ##发送格式是帐号 + 主题 + 内容

脚本执行语法格式: 帐号 + 主题 + 内容
用户名可以在通讯录找到

image.png

测试脚本:

[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 
    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.吃饭不

成功收到测试信息!


image.png

3.回到zabbix的web管理界面修改添加报警媒介

管理---报警媒介类型--创建媒介类型

image.png

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

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

image.png

点击添加

image.png

点击更新

image.png

4.测试微信报警:

把zabbix_agent的nginx服务停掉

[root@web01 ~]# systemctl stop nginx

发现报错
这是临时生成的日志没有写入权限


image.png

解决办法:
在zabbix_server端更改日志所主

[root@zabbix ~]# chown zabbix /tmp/weixin.log

再次测试

[root@web01 ~]# systemctl restart nginx  ##先恢复
[root@web01 ~]# systemctl stop nginx   ##再停掉

报警成功!


image.png

电话和短信报警

1.利用第三方电话报警平台

1).利用阿里大鱼(收费)

https://www.aliyun.com/product/sms?spm=a3142.7791109.0.0.34691fd2OVGqAY

2)利用onealert发送报警

https://caweb.aiops.com/#/integrate/monitor

这里我们使用onealert

配置分派策略

image.png

点击保存

设置通知策略

配置---新建通知

image.png

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

选择监控工具

集成---zabbix

image.png

选择zabbix
image.png

点击保存并获取应用key

2.安装onealert_agent

image.png

回到zabbix服务端的命令行

  1. 进入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管理员密码:   ##输入管理员密码
image.png

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

配置---动作

image.png

出现一个cloudalert action的动作,说明我们的安装是很成功的.然后我们也可以把默认的动作给禁用掉
image.png

报警媒介也会出现一个cloudalert action

4.测试

[root@web01 ~]# systemctl stop nginx

在动作日志查看,发现已送达,但是我们选择的是免费版的,所以收不到邮件.....


image.png

大学生,没钱买企业版的,将就一下咯~~~~

你可能感兴趣的:(zabbix的各种报警机制实战)