配置使用script报警媒介
Zabbix 3配置邮件报警(一)
上面详细介绍了如何使用zabbix email形式发送报警,个人认为唯一的缺点就是报警内容太不够人性化了。所以下面介绍zabbix第二种常用的报警方式,自定义脚本的形式报警,这个自定义的脚本你可以使用邮件报警、短信报警等等。
配置用户以script方式接受报警,在zabbix 2.x版本中,当有报警通知时,默认会传3个参数给脚本,它分别为是$1(发送给谁)、$2(发送标题)、$3(发送内容)。例如发送邮件给support@ywnds.com,标题为nginx宕机,内容是IP地址:1.1.1.1,nginx离线,请立即处理等等。
但从zabbix 3.0之后,可以自定义参数了,所以不写参数,它是不会传参数给脚本的,需要注意。
1)下面来配置自定义邮件报警,我们使用mailx作为发信息的客户端,所以先要安装mailx。
1
|
$
yum
-
y
install
mailx
|
配置mailx
1
2
3
4
5
6
|
$
cat
/
etc
/
mail
.rc
set
from
=
1861210
@
163.com
set
smtp
=
smtp
.
163.com
set
smtp
-
auth
-
user
=
1861210
set
smtp
-
auth
-
password
=
123456
set
smtp
-
auth
=
login
|
发送测试邮件
1
|
$
echo
test
|
mail
-
s
"test"
136×××
@
163.com
|
2)zabbix服务器端编写邮件发送脚本
首先配置zabbix
1
|
$
mkdir
/
etc
/
zabbix
/
alertscripts
|
1
2
|
$
vim
/
usr
/
local
/
zabbix
/
etc
/
zabbix_server
.conf
/
/修改
alert
scripts为以下路径
AlertScriptsPath
=
/
etc
/
zabbix
/
alertscripts
|
1
|
$
service
zabbix_server
restart
|
写报警脚本
1
2
3
4
5
6
|
$
cat
/
etc
/
zabbix
/
alertscripts
/
sendmail
.sh
#!/bin/bash
#
messages
=
`
echo
$
3
|
tr
'\r\n'
'\n'
`
subject
=
`
echo
$
2
|
tr
'\r\n'
'\n'
`
echo
"${messages}"
|
mail
-
s
"${subject}"
$
1
>>
/
tmp
/
sendmail
.log
2
>
&
1
|
增加可执行权限
1
2
|
$
chown
zabbix
.zabbix
/
etc
/
zabbix
/
alertscripts
/
sendmail
.sh
$
chmod
+
x
/
etc
/
zabbix
/
alertscripts
/
sendmail
.sh
|
测试发送脚本
1
|
$
/
etc
/
zabbix
/
alertscripts
/
sendmail
.sh
136xxx
@
163.com
"测试邮件标题"
"测试邮件内容"
|
PS:最后需要重启zabbix-server和nginx/Apache服务器,千万别忘了。
zabbix后台配置
Administration–>Media types–>Create media type
进入告警方式配置界面,创建sendmail.sh告警方式,如下图:
name:媒介类型名称。
type:介质类型。
script name:脚本名称(需要先定义AlertScriptsPath,sendmail.sh脚本放在这个目录下,写绝路路径没用)
脚本参数:添加以下3个参数,分别对应sendmail.sh脚本需要的3个参数:收件人地址、主题、详细内容。
1
2
3
|
{
ALERT
.SENDTO
}
{
ALERT
.SUBJECT
}
{
ALERT
.MESSAGE
}
|
解释:很多人安装zabbix 3.0之后,写的脚本一直发信不成功,手动执行时可以的。那是因为zabbix3.0之后,可以自定义参数了。所以不写参数,它是不会传参数的。在2.x版本不存在这个问题,默认会传3个参数。然后配置用户以script方式接受邮件。
这时候就可以先停止zabbix_agent 测试下短信会不会成功发送。
sendEmail客户端发送邮件
sendEmail是一个轻量级,命令行的SMTP邮件客户端。如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大,这个被设计用在php、bash、perl和web站点使用。以上是sendEmail的简单介绍,千万不要和sendmail搞混掉了。用了sendEmail你将不在喜欢sendmail了。
下载安装sendEmail
1
2
3
|
$
wget
http
:
/
/
caspian
.dotconf
.net
/
menu
/
Software
/
SendEmail
/
sendEmail
-
v1
.
56.tar.gz
$
tar
-
xzvf
sendEmail
-
v1
.
56.tar.gz
$
mv
sendEmail
-
v1
.
56
/
sendEmail
/
usr
/
local
/
bin
/
|
发送邮件
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
|
$
/
usr
/
local
/
bin
/
sendEmail
--
help
# 指定发件人邮箱;
-
f
root
@
zabbix
.com
# 指定收件人邮箱;
-
t
admin
@
qq
.com
# 指定发件人邮箱的smtp地址;
-
s
smtp
.zabbix
.com
# 指定邮件的标题;
-
u
"我是邮件主题"
# 指定邮件内容的格式,html格式;
-
o
message
-
content
-
type
=
html
# 邮件内容编码;
-
o
message
-
charset
=
utf8
# 发件人邮箱的用户名;
-
xu
USER
# 发件人邮箱密码;
-
xp
PASSWORD
# 邮件的具体内容;
-
m
"我是邮件内容"
|
在配置zabbix的Email报警之前,需要将sendmail/postfix使用的域名进行相应的修改,系统默认为localhost.localdomain,其实不改也行,不过有些pop3服务器会过滤掉来自localhost.localdomain的邮件,导致邮件不能正常查收,所以,最好是改一下hostname,确保邮件发送的成功率
1
2
|
$
cat
/
etc
/
hosts
127.0.0.1
zabbix
.com
smtp
.zabbix
.com
localhost
.localdomain
localhost
|
sendemail发邮件脚本缩写(需要安装sendemail邮件客户端)
1
2
3
4
5
6
7
8
|
$
cd
/
etc
/
zabbix
/
alertscripts
$
cat
sendmail
.sh
#!/bin/bash
#
to
=
$
1
subject
=
$
2
body
=
$
3
/
usr
/
local
/
bin
/
sendEmail
-
f
18612100043
@
163.com
-
t
"$to"
-
s
smtp
.
163.com
-
u
"$subject"
-
o
message
-
content
-
type
=
html
-
o
message
-
charset
=
utf8
-
xu
18612100043
-
xp
123
-
m
"$body"
2
>>
/
tmp
/
22.log
|
增加可执行权限
1
2
|
$
chown
zabbix
.zabbix
/
etc
/
zabbix
/
alertscripts
/
sendmail
.sh
$
chmod
+
x
/
etc
/
zabbix
/
alertscripts
/
sendmail
.sh
|
测试发送脚本
1
|
$
/
etc
/
zabbix
/
alertscripts
/
sendmail
.sh
163xxx
@
163.com
"测试邮件标题"
"内容第一行<br/>内容第二行<br/>"
|
一般以html这种方式发送的邮件内容都堆到一起了,没有换行。可以修改动作日志的内容格式:
点击 配置->动作->Report problems to Zabbix administrators
在默认信息每一行后面添加<br/>
1
2
3
4
|
Trigger
:
{
TRIGGER
.NAME
}
<
br
/
>
Trigger
status
:
{
TRIGGER
.STATUS
}
<
br
/
>
Trigger
severity
:
{
TRIGGER
.SEVERITY
}
<
br
/
>
Trigger
URL
:
{
TRIGGER
.URL
}
<
br
/
>
|
最后提供一个Python版本的报警脚本
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
|
#!/usr/bin/python
#coding:utf-8
import
smtplib
from
email
.mime
.text
import
MIMEText
import
sys
#邮箱服务器地址
mail_host
=
'smtp.163.com'
#邮箱用户名
mail_user
=
'18612100043@163.com'
#邮箱密码
mail_pass
=
'mima'
mail_postfix
=
'163.com'
def
send_mail
(
to_list
,
subject
,
content
)
:
me
=
mail_user
+
"<"
+
mail_user
+
"@"
+
mail_postfix
+
">"
msg
=
MIMEText
(
content
)
msg
[
'Subject'
]
=
subject
msg
[
'From'
]
=
me
msg
[
'to'
]
=
to_list
try
:
s
=
smtplib
.SMTP
(
)
s
.connect
(
mail_host
)
s
.login
(
mail_user
,
mail_pass
)
s
.sendmail
(
me
,
to_list
,
msg
.as_string
(
)
)
s
.close
(
)
return
True
except
Exception
,
e
:
print
str
(
e
)
return
False
if
__name__
==
"__main__"
:
send_mail
(
sys
.argv
[
1
]
,
sys
.argv
[
2
]
,
sys
.argv
[
3
]
)
|
测试
1
|
$
python
sendmail
.py
'84618983@qq.com'
'Test Mail'
'This is Test Mail'
|