zabbix 监控

配置 zabbix 通过调用 bash 脚本,发送 邮件 和 企业微信 告警,我们都知道zabbix本身也是可以发送邮件的,zabbix server调用curl来发送邮件,这导致对curl的版本有一定要求。使用脚本方式的一个特点是可扩展性,你通过自己调整脚本来实现其他功能,联调其他应用。

脚本运行依赖环境

sendEmail是一款使用perl语言编写的邮件发送脚本,让你不必安装sendmail或postfix等配置复杂的邮件服务器轻松发送邮件,sendEmail也可以支持发送SSL协议的邮件,指定邮件字符集,发送html格式的正文邮件以及发送包含附件的邮件等等功能。
官网 http://caspian.dotconf.net/menu/Software/SendEmail/

执行 yum -y install perl 安装perl,sendEmail,下载解压放在任意位置,脚本在配置中引用

Zabbix配置

标准的zabbix告警,需要配置 报警媒介类型,动作,用户(报警媒介),其他内容这里不过多阐述自行百度,主要讲一下脚本配置,在管理->报警媒介类型,创建或修改一个媒介类型,类型改为脚本,脚本名称(放置在alertscripts目录下的文件名,alertscripts目录位置请在zabbix_server.conf配置文件中寻找),这里注意如果是zabbix2.2版本,选择类型,填写脚本名称保存即可,3.0以上版本需要添加参数,添加以下三项参数{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE},注意包含中括号,这是传给脚本的三个zabbix内置变量,分别是收件邮箱、邮件主题、邮件正文,其中{ALERT.SENDTO}在我编写的脚本中其实用不到,我把收件联系人配置写在了脚本里,按照以往的规格还是加进去以防以后需要用到。

脚本配置

微信配置,这里的微信是企业微信,不是微信公众号,以下参数请在注册企业微信的后台管理中寻找。
官网 https://work.weixin.qq.com

CorpId=’xxx’
PartyId=’xxx’
AgentId=’xxx’
Secret=’xxx’

邮件相关的配置,配置sendEmail路径,请尽量填写绝对路径

sendEmail=’/usr/local/zabbix/etc/alertscripts/sendEmail’
主发件箱(用户、密码、smtp服务器)
master_usr=’xxx@qq.com’
master_psk=’xxx’
master_smtp=’xxx’
备发件箱(用户、密码、smtp服务器)
backup_usr=’xxx@qq.com’
backup_psk=’xxx’
backup_smtp=’xxx’
应急发件箱(用户、密码、smtp服务器、收件人),应急发件的定义,主备邮箱均不可使用时启用的邮箱,通常配置为QQ、163、第三方邮件服务器,但第三方存在发件数量及内容限制问题不适合大量发送邮件。
emer_usr=’xxx@163.com’
emer_psk=’xxx’
emer_smtp=’xxx.163.com’
emer_to=’xxx@qq.com’
告警收件人列表(多个收件人使用空格分隔)
alert_to_ops=’xxx@qq.com xxx@163.com’

脚本源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/bash
#########################################################################################
# Zabbix Alert Messages Send Script #
# by Annda Ver 1.0.2 #
# Create 2017/12/20 #
# Update 2018/01/23 #
#########################################################################################
# configure #
#########################################################################################
# wechat
CorpId='xxx'
PartyId='xxx'
AgentId='xxx'
Secret='xxx'
#########################################################################################
# Email
# sendEmail Path
sendEmail='/usr/local/zabbix/etc/alertscripts/sendEmail'
# Master Email
master_usr='xxx@qq.com'
master_psk='xxx'
master_smtp='xxx'
# Backup Email
backup_usr='xxx@qq.com'
backup_psk='xxx'
backup_smtp='xxx'
# Emergency Email
emer_usr='xxx@163.com'
emer_psk='xxx'
emer_smtp='xxx.163.com'
emer_to='xxx@qq.com'
# Alert Contacts
alert_to_ops='xxx@qq.com xxx@163.com'
#########################################################################################
# function #
#########################################################################################
function wechat()
{
local Title=$1
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpId&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $(NF-3)}')
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
/usr/bin/curl -s --data-ascii "$(wechat_message_post "$Title")" $PURL > /dev/null
}
function wechat_message_post()
{
local int AppID=$AgentId
local UserID="annda"
local PartyID=$PartyId
local Message=$1
Message=$(echo "$Message" | sed 's/%/%%/g')
Message=$(date +'%Y-%m-%d %H:%M:%S')"\n"$Message
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'" $AppID "\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Message"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
function email()
{
local Sendto=$1
local Title=$2
local Message=$3

for circle in {1..3}; do
case $circle in
1)
for try in {1..3}; do
$sendEmail -f $master_usr -t $Sendto -s $master_smtp -u "$Title" -o message-charset=utf8 -o tls=no -xu $master_usr -xp $master_psk -m "$Message" > /dev/null && break 2
done
;;
2)
for try in {1..3}; do
$sendEmail -f $backup_usr -t $Sendto -s $backup_smtp -u "[BK]$Title" -o message-charset=utf8 -o tls=no -xu $backup_usr -xp $backup_psk -m "$Message" > /dev/null && break 2
done
;;
3)
for try in {1..3}; do
$sendEmail -f $emer_usr -t $emer_to -s $emer_smtp -u "[EM]$Title" -o message-charset=utf8 -o tls=no -xu $emer_usr -xp $emer_psk -m "$Message" > /dev/null && break
done
;;
esac
done
}
#########################################################################################
# main #
#########################################################################################
# send email
for mail in $alert_to_ops; do
email "$mail" "$2" "$3"
done
# send wechat
wechat "$2"
Author:  Annda
Link:  https://www.annda.cn/2018/01/23/linux-centos-zabbix-alert-scripts/
Copyright Notice:  All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值