如何用Tigase监控postfix smtp服务?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者生产中的smtp服务器最近因为负载均衡器的路由故障而导致服务中断,本着尽快响应的原则,我们需要加强对smtp服务的监控。
如果你需要了解该集群的搭建,请参阅如下章节,

如何设置Postfix直出因特网中继?

2 最佳实践

2.1 创建备份脚本

mkdir ~/scripts/
vim ~/scripts/smtpCheck.sh

加入如下配置,

#!/bin/bash

tigaseAppID="10086"
tigaseAppPassword="*********"
tigaseEmployeeID="will,jeff"
tigaseApiURL="https://tigase.cmdschool.org:8092/tigase/pushText"
logFile="/var/log/smtpCheck.log"
smtpHost="smtp.cmdschool.org"
smptPort="25"
maxFails=3

failCount=0
for i in $(seq 1 $((maxFails + 2))); do
    nc -z -w 5 $smtpHost $smptPort &> /dev/null
    if [ $? != 0 ]; then
        ((failCount++))
    fi
done

if [ $failCount -ge $maxFails ]; then
        tigaseMessageBody="$smtpHost:$smptPort connection failed.%0d%0aEvent date:"$(date +'%Y.%m.%d')
        curlData="appId=$tigaseAppID&password=$tigaseAppPassword&employee_id=$tigaseEmployeeID&body=$tigaseMessageBody"
        logMessageBody=$(date +'%Y-%m-%d %H:%M:%S')" $smtpHost:$smptPort connection failed."
        curl -X POST -d "$curlData" "$tigaseApiURL" &> /dev/null
        echo "$logMessageBody" | tee -a "$logFile"
fi
exit 0

– 参数“tigaseAppID”定义消息软件的应用号ID,范例为”10086″
– 参数“tigaseAppPassword”定义消息软件的应用号密码,范例为”*********”
– 参数“tigaseEmployeeID”定义消息软件中的员工工号,范例为”will”和“jeff”,使用逗号分隔
– 参数“tigaseApiURL”定义消息软件的接口地址,范例为”https://tigase.cmdschool.org:8092/api/pushText”
– 参数“logFile”定义错误日志的路径,范例为”/var/log/smtpCheck.log”
– 参数“smtpHost”定义smtp服务器的地址,范例为”smtp.cmdschool.org”
– 参数“smptPort”定义smtp服务器的端口,范例为”25″
– 参数“maxFails”定义测试错误的最大次数,范例为”3″次

2.2 创建脚本触发

crontab -e

加入如下配置,

*/1 * * * * sh ~/scripts/smtpCheck.sh

基于以上脚本运行后,如果符合条件,消息软件将收到如下警告消息,

smtp.cmdschool.org:25 connection failed.
Event date:2024.08.28
没有评论

发表回复

Postfix
如何设置PostFix自动填补message-id?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中的smtp服务器遇到有的邮件message-id …

Postfix
如何启用PostFix的调试模式?

1 前言 一个问题,一篇文章,一出故事。 笔者生产中的smtp服务器最近遇到日志显示投递成功,但是对 …

Postfix
如何防止Postfix因发件人而过载?

1 基础知识 1.1 限制单位时间内最大消息数量 smtpd_client_message_rate …