zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客
触发器的本质就是一个条件判断,对于不同的监控数据来说,我们要设置不同的触发器。如一个监控项不关联触发器,将不会提示错误,也不会触发告警动作。
触发器(trigger):
触发器实际是一个条件判断表达式,如判断硬盘使用率超过80%
当触发条件发生后,会触发事件,用于某个动作
动作 (action):
触发器的条件被触发时候的具体操作
可以是发送邮件、执行远程命令。可以单独设置,也可以相互配合。
表达式格式:
{
: . ( )} {主机名:监控key.函数(参数)}<表达式>常数
这个表达式在zabbix中是不需要手动编写的,可以在zabbix配置页面选择
发送通知有多种方式:邮件、短信、钉钉、微信、企微、飞书等。
发送通知就是发送消息,消息的载体我们称为媒介,所以要执行发送通知动作,需要先创建一个报警媒介(当现有媒介不能满足需求的时候)。
钉钉&微信&飞书等都是通过 类型为脚本 的方式设置媒介类型
脚本参数参考如下:
{ALERT.SENDTO} 消息的接收者
{ALERT.SUBJECT} 消息主题
{ALERT.MESSAGE} 告警信息
信息模板,根据不同的消息类型信息模板的内容也有不同。
故障信息参数:
#####默认标题
故障{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-3,也即是从1开始到3结束。一旦故障发生,就执行脚本,发送给群组成员的用户。即使是故障持续1小时,也只发送3此告警,时间间隔为0秒
如果改成1-0 , 0表示无限制, 无限制发送告警
间隔时间是默认持续时间60秒,也就是1分钟1次,如持续1小时发送60次告警。
如设置成3-5,也就是持续3次也就是默认3*60=180秒后才发送告警给用户。
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import requests
- import json
- import sys
- import os
-
- headers = {'Content-Type': 'application/json;charset=utf-8'}
- #api_url = "https://oapi.dingtalk.com/robot/send?access_token= 这里填写钉钉机器人地址" #填入刚刚复制的webhook
- api_url = sys.argv[1]
- def msg(text):
- json_text= {
- "msgtype": "text",
- "text": {
- "content": text
- },
- "at": {
- "atMobiles": [
- "15901402212" #填入号码会@相应号码的人
- ],
- "isAtAll": True # True会@所有人
- }
- }
- print requests.post(api_url,json.dumps(json_text),headers=headers).content
-
- if __name__ == '__main__':
- text = sys.argv[2]
- msg(text)
- [root@zabbix-server alertscripts]# cat EN-WeChat.py
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import requests
- import json
- import sys
- import os
-
- headers = {'Content-Type': 'application/json;charset=utf-8'}
- api_url = sys.argv[1]
- def msg(text):
- json_text= {
- "msgtype": "text",
- "text": {
- "content": text
- },
- }
- print requests.post(api_url,json.dumps(json_text),headers=headers).content
-
- if __name__ == '__main__':
- text = sys.argv[2]
- msg(text)
注:需要建立相关redis服务、微信告警服务等,直接使用脚本是不成功的。
- [root@zabbix-server alertscripts]# cat weixin.sh
- #!/bin/bash
- cd /etc/zabbix/alertscripts/
- to=$1
- str=$2
- body=$3
- host=`echo $str |awk -F [:] '{print $2}'`
- key=`cat /proc/sys/kernel/random/uuid`
- echo $0 >> /etc/zabbix/alertscripts/1.log
- echo $to >> /etc/zabbix/alertscripts/1.log
- echo $str >> /etc/zabbix/alertscripts/1.log
- echo $body >> /etc/zabbix/alertscripts/1.log
- echo $host >> /etc/zabbix/alertscripts/1.log
- echo $key >> /etc/zabbix/alertscripts/1.log
- #/bin/sh /etc/zabbix/alertscripts/send-alarm.sh 2 "告警主机:$host\n告警主题: $str\n告警内容:$body" 'zabbix' $1 "$key" 0 "$str"
- ./send-alarm.sh 2 "告警主机:$host\n告警主题: $str\n告警内容:$body" 'yunwei-zabbix' $1 "$key" 0 "zabbix-test9" "告警内容:test-11199"
-
-
- [root@zabbix-server alertscripts]# cat send-alarm.sh
- #!/bin/sh
-
- redisclient="/usr/bin/redis-cli"
- #redisclient="/data/server/redis/bin/redis-cli"
- #redisclient="/usr/bin/redis-cli"
- redis_slave_server=""
- redis_slave_port=""
- redis_master_server=""
- redis_master_port=""
-
- function UpdateRedisSlaveAddr(){
- local s_addr=$1
- local s_port=$2
- for ser in "${sentinel_addr[@]}"
- do
- local info=`${redisclient} -h $s_addr -p $s_port SENTINEL slaves mymaster`
- redis_slave_server=`echo $info | awk -F" " '{print $4}'`
- redis_slave_port=`echo $info | awk -F" " '{print $6}'`
- if [ -n "$redis_slave_server" ]
- then
- break
- fi
- done
- }
-
- function UpdateRedisMasterAddr(){
- local s_addr=$1
- local s_port=$2
-
- for ser in "${sentinel_addr[@]}"
- do
- local info=`${redisclient} -h $s_addr -p $s_port SENTINEL get-master-addr-by-name mymaster`
- redis_master_server=`echo $info | awk -F" " '{print $1}'`
- redis_master_port=`echo $info | awk -F" " '{print $2}'`
- if [ -n "$redis_master_server" ]
- then
- break
- fi
- done
- }
-
- #{"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}
-
- if [ $# != 8 ]
- then
- echo "Parameter Erorr!"
- echo "eg: $0 NOTIFYTYPE LEVEN SUBTYPE DEPARTMENT KEY STATE TITLE DETAIL"
- exit
- fi
-
- date=`date`
-
- notify_type=$1
- level=1
- sub_type=$3
- depart=$4
- key=$5
- state=$6
- title=$7
- detail=$2
- host=`hostname`
- echo $detail >> /data/z.log;
- echo $detail > /etc/zabbix/alertscripts/detail.log
- sed -i 's/\r//g' /etc/zabbix/alertscripts/detail.log
- detail_file=/etc/zabbix/alertscripts/detail.log
- # keyword4=`ec | awk -F '告警内容:' '{print $2}' | awk -F '\\\r\\\n' '{print $1}' | awk -F ': ' '{print $2}'`
- keyword4="`cat $detail_file | awk -F '告警内容:' '{print $1}' |awk -F ':' '{print $3}'`"
- keyword3="`cat $detail_file | awk -F '告警时间:' '{print $2}' | awk -F '告警' '{print $1}'`"
- keyword1="`cat $detail_file | awk -F '告警等级:' '{print $2}' | awk '{print $1}'`"
- keyword5="`cat $detail_file | awk -F '告警信息:' '{print $2}' | awk -F '告警' '{print $1}'`"
- keyword2="`cat $detail_file | awk -F '当前状态:' '{print $2}' | awk '{print $1}' | awk -F ':' '{print $1}'`"
-
- #detail_info="\"keyword1\":\"${keyword1}\",\"keyword2\":\"${keyword2}\",\"keyword3\":\"${keyword3}\",\"keyword4\":\"${keyword4}\",\"keyword5\":\"${keyword5}\""
- detail_info="\"detailLevel\":\"${keyword1}\",\"detailType\":\"${keyword2}\",\"detailTime\":\"${keyword3}\",\"detailPostion\":\"${keyword4}\",\"detailBusiness\":\"${keyword5}\""
- #detail="\"\""
- ####info####
- #故障等级:{{keyword1.DATA}}
- #故障类型:{{keyword2.DATA}}
- #故障时间:{{keyword3.DATA}}
- #故障定位:{{keyword4.DATA}}
- #所属业务:{{keyword5.DATA}}
- ############
-
-
- #info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",\"detail\":\"$detail\",\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
- info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",$detail_info,\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
- #info="{\"notifyType\":$notify_type,\"level\":$level,\"host\":\"$host\",\"subType\":\"$sub_type\",\"detail\":$detail,$detail_info,\"department\":$depart,\"title\":\"$title\",\"key\":\"$key\",\"status\":$state}"
- echo $info >> /data/z.log
- sentinel_addr=(192.168.1.165 192.168.1.166 192.168.1.146)
- UpdateRedisMasterAddr $sentinel_addr 26502
- echo "Get Master: $redis_master_server $redis_master_port"
-
- key="alarm:list"
- echo "lpush $key $info"
- result=`${redisclient} -h $redis_master_server -p $redis_master_port lpush $key "$info"`
- echo $result >> /data/z.log