smtp邮件告警

zabbix默认自带邮件告警,但是很不好用。
一般我们使用smtp告警邮件,配置告警邮件脚本,发送到smtp邮箱服务器进行转发,然后发送到告警用户的邮箱中,完成邮件告警,如阿里邮箱,腾讯邮箱等。
前提zabbix能够访问外网,同时stmp邮箱已经配置完整
使用python脚本作为邮件。zabbix的告警脚本目录默认在/usr/lib/zabbix/alertscripts/路径下

#!/usr/bin/python
#coding:utf-8

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr, formataddr
import sys

def formatAddr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))

def send_mail(to_list,subject,content):
    mail_host = 'smtp.mxhichina.com'    #smtp邮件服务器地址
    mail_user = '[email protected]'  #smtp告警邮箱账户
    mail_pass = 'xxxxxxxxx'                            # smtp告警邮箱密码
    #以上内容根据你的实际情况进行修改
    msg = MIMEText(content,'plain','utf-8')
    msg['Subject'] = Header(subject, 'utf-8').encode()
    msg['From'] = formatAddr('zabbix监控 <%s>' % mail_user).encode()
    msg['to'] = to_list

    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(mail_user,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])
#例:./sendmail_zabbix.py  [email protected] 测试 测试

脚本思路:
1、使用smtp模块,使用方法参考官方模块手册
2、构建send_mail函数,使用三个参数,分别指定为邮件发送人,标题,内容
3、send_mail函数定义了smtp邮箱的账户密码信息
3、使用sys模块的os方法,传递参数进行测试

保存脚本名称为sendmail_zabbix.py

在zabbix“管理-报警媒介类型”中,创建一个告警邮件脚本,名称就是sendmial_zabbix.py
zabbix邮件告警和钉钉告警配置_第1张图片
详细按照如下配置
zabbix邮件告警和钉钉告警配置_第2张图片
然后配置动作
zabbix邮件告警和钉钉告警配置
动作信息按照如下配置
zabbix邮件告警和钉钉告警配置_第3张图片

zabbix邮件告警和钉钉告警配置_第4张图片

zabbix邮件告警和钉钉告警配置_第5张图片

具体的信息格式如下,可以自定义

告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

然后对需要接收邮件告警的zabbix用户分配报警媒介
zabbix邮件告警和钉钉告警配置_第6张图片

然后就可以每天半夜收到邮件告警了
zabbix邮件告警和钉钉告警配置_第7张图片

还睡觉?,起来干活!

配置钉钉告警

邮件告警最大的问题就是邮件太多,不好及时判断
最好的方法就是钉钉告警

首先你得有钉钉
其次你得有配置一个机器人
详细的钉钉配置机器人的办法可以询问百度或者看
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
这里是我添加的机器人,重点是webhook,每个机器人唯一
zabbix邮件告警和钉钉告警配置_第8张图片

这里还是使用python脚本,保存在usr/lib/zabbix/alertscripts/路径下

#!/usr/bin/python
# -*- coding: utf-8 -*-
#zabbix上使用钉钉告警机器人,调用api脚本
import requests
import json
import sys
import os

headers = {'Content-Type': 'application/json;charset=utf-8'}
#定义json http头部信息
api_url = "https://oapi.dingtalk.com/robot/send?access_token=b5924a81e21921256eb22154b7614512a2ca6e4815bda7de2fed0b59bf03cf89"
#这里的url是钉钉机器人的api url

def msg(text):                                   #定义函数msg,参数为txt
    json_text= {                                 #定义json_text字典内容
     "msgtype": "text",
        "text": {
            "content": text
        },
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content  #将字典信息序列化为json格式发送

if __name__ == '__main__':                    #主函数
    text = sys.argv[1]                        #传入zabbix定义动作参数,已经在zabbix告警动作中配置
    msg(text)                                 #调用msg (text)函数

保存名称为dingding.py。脚本完成了

首先再zabbix用户中,创建一个用户,该用户作为钉钉机器人消息发送使用
zabbix邮件告警和钉钉告警配置

然后再报警媒介类型创建脚本
zabbix邮件告警和钉钉告警配置_第9张图片
按照如下配置
zabbix邮件告警和钉钉告警配置_第10张图片
参数格式为

{ALERT.MESSAGE}

然后再配置动作,定义发送的告警方式
zabbix邮件告警和钉钉告警配置
详细配置如下
zabbix邮件告警和钉钉告警配置_第11张图片
定义告警级别
zabbix邮件告警和钉钉告警配置_第12张图片
定义操作
zabbix邮件告警和钉钉告警配置_第13张图片

信息内容推荐按照如下配置

告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}

好了,现在就可以看到钉钉告警了
zabbix邮件告警和钉钉告警配置_第14张图片

每天没事钉钉催你干活

真TM是老板爽我就爽,老板不爽我下岗

有时候,我也没事调下老板
zabbix邮件告警和钉钉告警配置_第15张图片

这不就是AI嘛~