Bài viết này được tham khảo từ các nguồn tại đâytại đây.

Thông báo về tình trạng hàng đợi deferred.

Đối với một người quản trị hệ thống (admin) mail server, bạn sẽ gặp tình trạng mail bị kẹt lại trong hàng đợi deferred vì các lý do như mất kết nối internet, sai địa chỉ mail, có account gửi spam ra ngoài, địa chỉ IP bị blacklist, v.v… Do vậy, việc giám sát được hàng đợi deferred queue là rất quan trọng.

Tạo Telegram bot

Bước đầu tiên, sử dụng botfather. Tìm BotFather trên Telegram web, nhấn START, nhập /newbot để tạo một bot mới đóng vai trò người gửi thông báo (notification). Tạo name, username cho bot.

Botfather sẽ thông báo bạn đã tạo bot thành công với thông tin về API token.

Tạo Telegram group

Bạn tạo một new group với member là bot vừa tạo ở trên. Khi ở trong group này, bạn sẽ thấy group ID ở trong địa chỉ trình duyệt, bạn ghi lại ID này. Như vậy đến đây bạn đã có, ví dụ:

API Token: bot724769537:AAGxAhX9YW25N9P5OXfWH-cU8S9XWabyVP4

Chat ID: 265721226

Bạn tiến hành test thử như sau, trên server dưới quyền root:

curl -s -X POST https://api.telegram.org/bot724769537:AAGxAhX9YW25N9P5OXfWH-cU8S9XWabyVP4/sendMessage -d chat_id=-265721226 -d text="Hello World"

Thay token và chat ID bằng thông tin của bạn, đừng quên có dấu - phía trước ID.

Trên Telegram, trong Group đã tạo, sẽ nhận được tin nhắn “Hello World”.

Tạo Bash Script kiểm tra hàng đợi Deferred.

Đây là script kiểm tra xem có hơn 25 message trong hàng đợi deferred không. Nếu có, script này sẽ tự động gửi một thông báo đến Telegram. Tạo script có tên là monitorqueue.sh trong /opt/zimbra/scripts/, gán quyền thực thi cho script này.

#!/bin/bash
host_name="$HOSTNAME"
token="724769537:AAGxAhX9YW25N9P5OXfWH-cU8S9XWabyVP4"
chat_id="-265721226"
url="https://api.telegram.org/bot${token}/sendMessage"
count=$(/opt/zimbra/libexec/zmqstat |grep -i deferred |cut -d "=" -f2)
if [[ $count -ge 25 ]]; then
curl -s -X POST $url -d chat_id=$chat_id -d text="[WARNING QUEUE ${host_name}], Number of messages in deferred queue is larger than ${count}"
fi

Cấu hình cronjob

Bạn có thể tạo cronjob để kiểm tra hàng đợi mỗi 5 phút.

*/5 * * * * /bin/sh /opt/zimbra/scripts/monitorqueue.sh > /dev/null 2>&1

Nâng cao. Khóa account và gửi tin nhắn thông báo

Bạn có thể thêm vào script tự động lockout account khi nghi nghờ account này gửi spam ra ngoài.

#!/bin/bash
host_name="$HOSTNAME"
token="724769537:AAGxAhX9YW25N9P5OXfWH-cU8S9XWabyVP4"
chat_id="-265721226"
url=”https://api.telegram.org/bot${token}/sendMessage”
maxdeferred=25
count=$(/opt/zimbra/libexec/zmqstat |grep -i deferred |cut -d "=" -f2)
account=$(grep sasl_user /var/log/zimbra.log | sed 's/.*sasl_username=//g' | sort | uniq -c | sort -nr | head -n1 | awk '{print $2}')
if [[ $count -gt $maxdeferred ]]; then
curl -s -X POST $url -d chat_id=$chat_id -d text="[WARNING QUEUE ${host_name}], Number of messages in deferred queue is larger than ${count}"
su - zimbra -c “/opt/zimbra/bin/zmprov ma $account zimbraAccountStatus locked”
curl -s -X POST $url -d chat_id=$chat_id -d text=”Server has locked ${account} for sending message too much”
su - zimbra -c “zmmtactl restart”
fi