• zabbix 钉钉&微信&企微告警(动作&操作&消息内容模板)


    一、环境配置

    1、配置zabbix服务端

    2、配置监控主机&监控项&监控模板

    zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客

    二、触发器

    触发器的本质就是一个条件判断,对于不同的监控数据来说,我们要设置不同的触发器。如一个监控项不关联触发器,将不会提示错误,也不会触发告警动作。

    触发器(trigger):

            触发器实际是一个条件判断表达式,如判断硬盘使用率超过80%

            当触发条件发生后,会触发事件,用于某个动作

    动作 (action):

            触发器的条件被触发时候的具体操作

            可以是发送邮件、执行远程命令。可以单独设置,也可以相互配合。

    1、创建触发器

    2、触发器表达式

    表达式格式:

    {:.()}

    {主机名:监控key.函数(参数)}<表达式>常数

     这个表达式在zabbix中是不需要手动编写的,可以在zabbix配置页面选择

    3、表达式函数

    • 大多数函数使用秒作为参数,使用#代表不同含义
    • avg,count,last,min and max 函数支持额外的第二个参数time_shift(时间偏移量)这个参数允许从过去一段时间内引用数据

    三、配置报警媒介

    发送通知有多种方式:邮件、短信、钉钉、微信、企微、飞书等。

    发送通知就是发送消息,消息的载体我们称为媒介,所以要执行发送通知动作,需要先创建一个报警媒介(当现有媒介不能满足需求的时候)。

    1、媒介之邮件

    2、媒介之钉钉告警&微信等

    钉钉&微信&飞书等都是通过 类型为脚本 的方式设置媒介类型

    脚本参数参考如下:

    {ALERT.SENDTO}        消息的接收者

    {ALERT.SUBJECT}      消息主题  

    {ALERT.MESSAGE}        告警信息

    四、告警信息模板

    信息模板,根据不同的消息类型信息模板的内容也有不同。

    1、配置模板

     2、内容参数说明

    故障信息参数:

    #####默认标题

    故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

    #####消息内容

    告警主机: {HOSTNAME1}

    主机IP: {HOST.IP}

    告警时间: {EVENT.DATE} {EVENT.TIME}

    告警等级: {TRIGGER.SEVERITY}

    告警信息: {TRIGGER.NAME}

    监控取值: {ITEM.LASTVALUE}

    告警项目: {TRIGGER.KEY1}

    问题详情: {ITEM.NAME}:{ITEM.VALUE}

    当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}

    事件ID: {EVENT.ID}

    故障恢复信息参数:

    #####默认标题

    故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME} 已恢复 !

    #####消息内容

    告警主机: {HOSTNAME1}

    主机IP: {HOST.IP}

    恢复时间: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}

    持续时间: {EVENT.AGE}

    告警等级: {TRIGGER.SEVERITY}

    告警信息: {TRIGGER.NAME}

    监控取值: {ITEM.LASTVALUE}

    告警项目: {TRIGGER.KEY1}

    问题详情: {ITEM.NAME}:{ITEM.VALUE}

    当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}

    事件ID: {EVENT.ID}

    五、配置用户群组及用户

    用户与报警媒介相关联,只有用户对服务器群组有读取权限才能发送告警通知。

    通过用户群组配置相关服务器群组读、写权限,用户继承群组权限。

    1、用户群组

    2、用户

    六、配置动作

    1、动作

    2、动作步骤配置说明

    默认的步骤是1-3,也即是从1开始到3结束。一旦故障发生,就执行脚本,发送给群组成员的用户。即使是故障持续1小时,也只发送3此告警,时间间隔为0秒

    如果改成1-0  , 0表示无限制, 无限制发送告警

    间隔时间是默认持续时间60秒,也就是1分钟1次,如持续1小时发送60次告警。

    如设置成3-5,也就是持续3次也就是默认3*60=180秒后才发送告警给用户。

    七、脚本

    1、钉钉脚本

    1. #!/usr/bin/python
    2. # -*- coding: utf-8 -*-
    3. import requests
    4. import json
    5. import sys
    6. import os
    7. headers = {'Content-Type': 'application/json;charset=utf-8'}
    8. #api_url = "https://oapi.dingtalk.com/robot/send?access_token= 这里填写钉钉机器人地址" #填入刚刚复制的webhook
    9. api_url = sys.argv[1]
    10. def msg(text):
    11. json_text= {
    12. "msgtype": "text",
    13. "text": {
    14. "content": text
    15. },
    16. "at": {
    17. "atMobiles": [
    18. "15901402212" #填入号码会@相应号码的人
    19. ],
    20. "isAtAll": True # True会@所有人
    21. }
    22. }
    23. print requests.post(api_url,json.dumps(json_text),headers=headers).content
    24. if __name__ == '__main__':
    25. text = sys.argv[2]
    26. msg(text)

    2、企微脚本

    1. [root@zabbix-server alertscripts]# cat EN-WeChat.py
    2. #!/usr/bin/python
    3. # -*- coding: utf-8 -*-
    4. import requests
    5. import json
    6. import sys
    7. import os
    8. headers = {'Content-Type': 'application/json;charset=utf-8'}
    9. api_url = sys.argv[1]
    10. def msg(text):
    11. json_text= {
    12. "msgtype": "text",
    13. "text": {
    14. "content": text
    15. },
    16. }
    17. print requests.post(api_url,json.dumps(json_text),headers=headers).content
    18. if __name__ == '__main__':
    19. text = sys.argv[2]
    20. msg(text)

    3、微信脚本

    注:需要建立相关redis服务、微信告警服务等,直接使用脚本是不成功的。

    1. [root@zabbix-server alertscripts]# cat weixin.sh
    2. #!/bin/bash
    3. cd /etc/zabbix/alertscripts/
    4. to=$1
    5. str=$2
    6. body=$3
    7. host=`echo $str |awk -F [:] '{print $2}'`
    8. key=`cat /proc/sys/kernel/random/uuid`
    9. echo $0 >> /etc/zabbix/alertscripts/1.log
    10. echo $to >> /etc/zabbix/alertscripts/1.log
    11. echo $str >> /etc/zabbix/alertscripts/1.log
    12. echo $body >> /etc/zabbix/alertscripts/1.log
    13. echo $host >> /etc/zabbix/alertscripts/1.log
    14. echo $key >> /etc/zabbix/alertscripts/1.log
    15. #/bin/sh /etc/zabbix/alertscripts/send-alarm.sh 2 "告警主机:$host\n告警主题: $str\n告警内容:$body" 'zabbix' $1 "$key" 0 "$str"
    16. ./send-alarm.sh 2 "告警主机:$host\n告警主题: $str\n告警内容:$body" 'yunwei-zabbix' $1 "$key" 0 "zabbix-test9" "告警内容:test-11199"
    17. [root@zabbix-server alertscripts]# cat send-alarm.sh
    18. #!/bin/sh
    19. redisclient="/usr/bin/redis-cli"
    20. #redisclient="/data/server/redis/bin/redis-cli"
    21. #redisclient="/usr/bin/redis-cli"
    22. redis_slave_server=""
    23. redis_slave_port=""
    24. redis_master_server=""
    25. redis_master_port=""
    26. function UpdateRedisSlaveAddr(){
    27. local s_addr=$1
    28. local s_port=$2
    29. for ser in "${sentinel_addr[@]}"
    30. do
    31. local info=`${redisclient} -h $s_addr -p $s_port SENTINEL slaves mymaster`
    32. redis_slave_server=`echo $info | awk -F" " '{print $4}'`
    33. redis_slave_port=`echo $info | awk -F" " '{print $6}'`
    34. if [ -n "$redis_slave_server" ]
    35. then
    36. break
    37. fi
    38. done
    39. }
    40. function UpdateRedisMasterAddr(){
    41. local s_addr=$1
    42. local s_port=$2
    43. for ser in "${sentinel_addr[@]}"
    44. do
    45. local info=`${redisclient} -h $s_addr -p $s_port SENTINEL get-master-addr-by-name mymaster`
    46. redis_master_server=`echo $info | awk -F" " '{print $1}'`
    47. redis_master_port=`echo $info | awk -F" " '{print $2}'`
    48. if [ -n "$redis_master_server" ]
    49. then
    50. break
    51. fi
    52. done
    53. }
    54. #{"notifyType":3,"level":1,"host":"10.0.333333333","subType":"cost","detail":"告警时间:2018-06-07 17:45:918\n广告主:测试更新流\n计划:测试审核Bann555554er\n订单:test\n告警内容:目标值已达到10.0%(7990)目标值已达到10.0%(7990)","department":1,"title":"order 190999 cost 告警","key":"20180621113123","status":0}
    55. if [ $# != 8 ]
    56. then
    57. echo "Parameter Erorr!"
    58. echo "eg: $0 NOTIFYTYPE LEVEN SUBTYPE DEPARTMENT KEY STATE TITLE DETAIL"
    59. exit
    60. fi
    61. date=`date`
    62. notify_type=$1
    63. level=1
    64. sub_type=$3
    65. depart=$4
    66. key=$5
    67. state=$6
    68. title=$7
    69. detail=$2
    70. host=`hostname`
    71. echo $detail >> /data/z.log;
    72. echo $detail > /etc/zabbix/alertscripts/detail.log
    73. sed -i 's/\r//g' /etc/zabbix/alertscripts/detail.log
    74. detail_file=/etc/zabbix/alertscripts/detail.log
    75. # keyword4=`ec | awk -F '告警内容:' '{print $2}' | awk -F '\\\r\\\n' '{print $1}' | awk -F ': ' '{print $2}'`
    76. keyword4="`cat $detail_file | awk -F '告警内容:' '{print $1}' |awk -F ':' '{print $3}'`"
    77. keyword3="`cat $detail_file | awk -F '告警时间:' '{print $2}' | awk -F '告警' '{print $1}'`"
    78. keyword1="`cat $detail_file | awk -F '告警等级:' '{print $2}' | awk '{print $1}'`"
    79. keyword5="`cat $detail_file | awk -F '告警信息:' '{print $2}' | awk -F '告警' '{print $1}'`"
    80. keyword2="`cat $detail_file | awk -F '当前状态:' '{print $2}' | awk '{print $1}' | awk -F ':' '{print $1}'`"
    81. #detail_info="\"keyword1\":\"${keyword1}\",\"keyword2\":\"${keyword2}\",\"keyword3\":\"${keyword3}\",\"keyword4\":\"${keyword4}\",\"keyword5\":\"${keyword5}\""
    82. detail_info="\"detailLevel\":\"${keyword1}\",\"detailType\":\"${keyword2}\",\"detailTime\":\"${keyword3}\",\"detailPostion\":\"${keyword4}\",\"detailBusiness\":\"${keyword5}\""
    83. #detail="\"\""
    84. ####info####
    85. #故障等级:{{keyword1.DATA}}
    86. #故障类型:{{keyword2.DATA}}
    87. #故障时间:{{keyword3.DATA}}
    88. #故障定位:{{keyword4.DATA}}
    89. #所属业务:{{keyword5.DATA}}
    90. ############
    91. #info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",\"detail\":\"$detail\",\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
    92. info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",$detail_info,\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
    93. #info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",\"detail\":$detail,$detail_info,\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
    94. echo $info >> /data/z.log
    95. sentinel_addr=(192.168.1.165 192.168.1.166 192.168.1.146)
    96. UpdateRedisMasterAddr $sentinel_addr 26502
    97. echo "Get Master: $redis_master_server $redis_master_port"
    98. key="alarm:list"
    99. echo "lpush $key $info"
    100. result=`${redisclient} -h $redis_master_server -p $redis_master_port lpush $key "$info"`
    101. echo $result >> /data/z.log

  • 相关阅读:
    Maven核心功能依赖和构建管理
    Python前后通吃,可在浏览器端运行
    我的大二web课程设计 使用HTML做一个简单漂亮的页面(纯html代码)
    nginx 开机自启(脚本+命令)
    vue导出功能实现
    网络编程套接字应用分享【Linux &C/C++ 】【UDP应用 | TCP应用 | TCP&线程池小项目】
    【C++】C++11——可变参数模板和emplace
    读<算法图解><笔记摘录>
    【仿牛客网笔记】项目进阶,构建安全高效的企业服务——优化网站性能
    我,放弃外企高薪卖小龙虾创业,不到一年就后悔了……
  • 原文地址:https://blog.csdn.net/zhangxueleishamo/article/details/132872653