keepalived 发送告警邮件到外部邮箱

邮件脚本:

keepalived_notify.py

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

import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys, time, subprocess

# 第三方 SMTP 服务
mail_host="smtp.exmail.qq.com"  #设置服务器
mail_user="xxx"    #用户名
mail_pass="xxx"   #口令

sender = ‘[email protected]‘    # 邮件发送者
receivers = [‘[email protected]‘, ‘[email protected]‘]  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

p = subprocess.Popen(‘hostname‘, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
hostname = p.stdout.readline().split(‘\n‘)[0]

message_to = ‘‘
for i in receivers:
    message_to += i + ‘;‘

def print_help():
    note = ‘‘‘python script.py role ip vip
    ‘‘‘
    print(note)
    exit(1)

time_stamp = time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(time.time()))

if len(sys.argv) != 4:
    print_help()
elif sys.argv[1] == ‘master‘:
    message_content = ‘%s server: %s(%s) change to Master, vIP: %s‘ %(time_stamp, sys.argv[2], hostname, sys.argv[3])
    subject = ‘%s change to Master -- keepalived notify‘ %(sys.argv[2])
elif sys.argv[1] == ‘backup‘:
    message_content = ‘%s server: %s(%s) change to Backup, vIP: %s‘ %(time_stamp, sys.argv[2], hostname, sys.argv[3])
    subject = ‘%s change to Backup -- keepalived notify‘ %(sys.argv[2])
else:
    print_help()

message = MIMEText(message_content, ‘plain‘, ‘utf-8‘)
message[‘From‘] = Header(sender, ‘utf-8‘)
message[‘To‘] =  Header(message_to, ‘utf-8‘)

message[‘Subject‘] = Header(subject, ‘utf-8‘)

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("Error: 无法发送邮件")
    print(e)

使用方法:

python script.py{脚本名} role{master|backup} ip{本keepalived服务器IP} vip{虚拟IP}

master keepalived:

global_defs {
        notification_email {
                [email protected]
        }

        notification_email_from [email protected]
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id LVS_DEVEL
}
## 上面的配置邮件只能发送到本机,mail 可查看

vrrp_script chk_http_port {
        script "</dev/tcp/127.0.0.1/80"
        interval 2
        weight -10
}

vrrp_instance VI_1 {
        state BACKUP        ############ MASTER|BACKUP
        interface ens160
        virtual_router_id 11
        mcast_src_ip 192.168.1.178
        priority 99                  ########### 权值要比 back 高
        advert_int 2

        authentication {
                auth_type PASS
                auth_pass 8u90u3fhE3FQ
        }

        track_script { 
                chk_http_port ### 执行监控的服务 
        }

        virtual_ipaddress {
                192.168.1.96
        }

        notify_master "/bin/python /script/keepalived_notify.py master 192.168.1.178 192.168.1.96"
        notify_backup "/bin/python /script/keepalived_notify.py backup 192.168.1.178 192.168.1.96"

}

backup keepalived:

global_defs {
        notification_email {
                [email protected]
        }

        notification_email_from [email protected]
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id LVS_DEVEL
}
## 上面的配置邮件只能发送到本机,mail 可查看

vrrp_script chk_http_port {
        script "</dev/tcp/127.0.0.1/80"
        interval 2
        weight -10
}

vrrp_instance VI_1 {
        state BACKUP        ############ MASTER|BACKUP
        interface ens160
        virtual_router_id 11
        mcast_src_ip 192.168.1.174
        priority 100                  ########### 权值要比 back 高
        advert_int 2

        authentication {
                auth_type PASS
                auth_pass 8u90u3fhE3FQ
        }

        track_script { 
                chk_http_port ### 执行监控的服务 
        }

        virtual_ipaddress {
                192.168.1.96
        }

        notify_master "/bin/python /script/keepalived_notify.py master 192.168.1.174 192.168.1.96"
        notify_backup "/bin/python /script/keepalived_notify.py backup 192.168.1.174 192.168.1.96"

}
时间: 2024-10-13 06:04:57

keepalived 发送告警邮件到外部邮箱的相关文章

在zabbix上添加自定义监控项目、配置告警且发送告警邮件到指定邮箱

在zabbix上添加自定义监控项目 配置告警且发送告警邮件到指定邮箱 原文地址:http://blog.51cto.com/13515599/2104326

Smokeping 使用外部邮箱发送告警邮件

Smokeping 发送告警邮件 转自:http://www.humen1.net/2013/11/669 smokeping 默认用sendmail发邮件,这样不好. 改了一下源码 这样可以使用 我QQ的smtp server来发告警邮件了 首先需要安装 Authen::SASL 模块(auth 需要用的) 我用CPAN装的,不细说了 修改 smokeping/lib/Smokeping.pm 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17

Linux 通过sendmail 发邮件到外部邮箱

Linux 通过sendmail 发邮件到外部邮箱 最近在写自动化巡检脚本,想着怎么预警后自动发送邮件报警. 首先下载最新版本mailx-12.4.tar.bz2 # wget http://sourceforge.net/projects/heirloom/files/latest/download?source=files 解压包: # tar jxvf mailx-12.4.tar.bz2 # cd mailx-12.4 # make # make install UCBINSTALL=/

keepalived 默认报警设置使用外部邮箱

最近在用keepalived做haproxy高可用的时候,发现keepalived默认是有发送邮件设置的.但是一番百度之后发现都是通过脚本来实现的邮件报警.功夫不负有心人,最终还是成功使用keepalived默认报警设置实现了报警.现在记录如下: 环境centos6.5 1.默认报警调用了postsfix.我的机器默认安装了postsfix服务并开启,但是日志一直显示发送不成功 2.解决方法 安装Postfix : yum install postfix mail cyrus-sasl-* -y

检查分区已使用空间占总空间的百分比并发送告警邮件

#!/usr/bin/env python # -*- coding: utf-8 -*- # 作者:昨夜星辰 # 脚本作用:检查服务器的所有分区,如果分区已使用空间占总空间的百分比超过阀值便发送邮件到告警邮箱. # 注意事项:该脚本只能在Linux系统下执行,适用于Python 2. import os import re import smtplib import string # 获取系统所有分区 def getAllPartitionOfSystem():     result = []

使用Zabbix服务端本地邮箱账号发送报警邮件的部署记录

邮件报警有两种情况:1)Zabbix服务端只是单纯的发送报警邮件到指定邮箱,发送报警邮件的这个邮箱账号是Zabbix服务端的本地邮箱账号(例如:[email protected]),只能发送,不能接收外部邮件.2)使用一个可以在互联网上正常收发邮件的邮箱账号(例如:[email protected]),通过在Zabbix服务端中设置,使其能够发送报警邮件到指定邮箱.上面第2中使用外部邮箱发送报警邮件之前已经介绍了:分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署.下面说下

保存邮箱并发送验证邮件

后端接口设计: 请求方式:PUT /email/ 请求参数: JSON 或 表单 参数 类型 是否必须 说明 email str 是 Email邮箱 返回数据: JSON 返回值 类型 是否必须 说明 id int 是 用户id email str 是 Email邮箱 在users/serializers.py中新建序列化器,用户验证用户提交的邮箱信息. class EmailSerializer(serializers.ModelSerializer): """ 邮箱序列化

Linux发送邮件使用外部邮箱

一般Linux发送报警邮件通过本地邮箱或外部邮箱服务器,我习惯使用本地邮箱发邮件,装个Sendmail安装启动,即可实现发送邮件功能,但会存在两个问题: 1.发件人默认显示主机名,有的会被邮件服务商当垃圾邮件处理,也可以使用mutt定义发件人解决这个问题,要麻烦一下. 2.发件延迟,正常的话,一分钟之内可以收到,延迟大的话,几个小时收不到也很正常,这样一来运维工程师没有及时收到告警邮件,耽误问题处理及时性. 针对这两个问题,用外部邮箱就可以解决,你只需简单注册个国内的邮件服务商邮箱,如163,也

java通过SMTP发送QQ邮件(参考自龙果学院)

java通过SMTP发送QQ邮件编辑 个人邮箱开通SMTP服务(进入个人邮箱,点击设置–>账户):  点击了账户后,往下拉可以看到SMTP服务选项,默认情况下这个选项是不开启的.点击开启腾讯会进行身份验证,身份验证通过以后,会收到一个用于使用SMTP的16位口令,验证身份的过程中把收到的口令保存下来,因为后面要使用SMTP功能必须要用到这个口令.  具体实现代码:     public static void main(String args[]) {        // 邮件内容