美文网首页
zabbix的各种报警机制实战

zabbix的各种报警机制实战

作者: 南南宫问天 | 来源:发表于2020-05-18 01:19 被阅读0次

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

    成功收到测试信息!


    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的各种报警机制实战

          本文链接:https://www.haomeiwen.com/subject/hegeohtx.html