Tích hợp thông báo tự động qua Telegram hoặc Slack giúp đội ngũ quản trị hệ thống nhận được tin báo ngay lập tức khi dịch vụ gặp sự cố hay đĩa cứng bị đầy.
Cả Telegram và Slack đều cung cấp giao diện webhook/API chuẩn REST đơn giản, rất dễ gọi từ lệnh curl trong Bash hoặc Invoke-RestMethod trong PowerShell.
1. Chuẩn bị Token / Webhook
Before configuring scripts, you need to set up the notification endpoints:
Telegram Bot
Tìm bot
@BotFathertrên Telegram và gửi lệnh/newbotđể tạo bot mới. Lưu lại API Token (ví dụ:123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ).Tạo một Group Telegram, thêm bot vừa tạo vào group.
Lấy Chat ID của group bằng cách gửi 1 tin nhắn vào group, sau đó mở trình duyệt truy cập:
[https://api.telegram.org/bot](https://api.telegram.org/bot)<YOUR_BOT_TOKEN>/getUpdatesLưu lại dãy sốidcủa chat (thường bắt đầu bằng dấu-, ví dụ:-100123456789).
Slack Incoming Webhook
Truy cập
, bấm Create New App -> From scratch.Slack API Apps Chọn Incoming Webhooks -> Bật Activate Incoming Webhooks -> Bấm Add New Webhook to Workspace.
Chọn channel nhận thông báo và bấm Allow. Sao chép đường dẫn Webhook URL (dạng
[https://hooks.slack.com/services/T.../B.../X](https://hooks.slack.com/services/T.../B.../X)...).
2. Tích hợp thông báo vào Script Bash (Linux)
Bash sử dụng công cụ curl có sẵn để gửi HTTP POST request.
#!/bin/bash
# --- CẤU HÌNH CẢNH BÁO ---
TELEGRAM_BOT_TOKEN="123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
TELEGRAM_CHAT_ID="-100123456789"
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
# --- HÀM GỬI TELEGRAM ---
send_telegram() {
local message="$1"
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
-d "text=${message}" \
-d "parse_mode=HTML" > /dev/null
}
# --- HÀM GỬI SLACK ---
send_slack() {
local message="$1"
# Tạo payload JSON cho Slack
local payload=$(cat <<EOF
{
"text": "${message}"
}
EOF
)
curl -s -X POST -H 'Content-type: application/json' --data "$payload" "$SLACK_WEBHOOK_URL" > /dev/null
}
# --- VÍ DỤ SỬ DỤNG TRONG LUỒNG KIỂM TRA SỰ CỐ ---
SERVICE="nginx"
# Kiểm tra xem dịch vụ có đang chạy không
if ! systemctl is-active --quiet "$SERVICE"; then
HOSTNAME=$(hostname)
TIME=$(date '+%Y-%m-%d %H:%M:%S')
# 1. Soạn nội dung cảnh báo Telegram (hỗ trợ thẻ HTML)
MSG_TELEGRAM="🚨 <b>ALERT: Service Down!</b>%0A<b>Server:</b> ${HOSTNAME}%0A<b>Service:</b> ${SERVICE}%0A<b>Time:</b> ${TIME}"
send_telegram "$MSG_TELEGRAM"
# 2. Soạn nội dung cảnh báo Slack
MSG_SLACK="🚨 *ALERT: Service Down!*\n*Server:* ${HOSTNAME}\n*Service:* ${SERVICE}\n*Time:* ${TIME}"
send_slack "$MSG_SLACK"
fi
3. Tích hợp thông báo vào Script PowerShell (Windows)
PowerShell sử dụng cmdlet Invoke-RestMethod tích hợp sẵn để gửi yêu cầu API.
# --- CẤU HÌNH CẢNH BÁO ---
$TelegramToken = "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
$TelegramChatId = "-100123456789"
$SlackWebhookUrl = "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
# --- HÀM GỬI TELEGRAM ---
function Send-TelegramAlert {
param ([string]$Message)
$Uri = "https://api.telegram.org/bot$TelegramToken/sendMessage"
$Body = @{
chat_id = $TelegramChatId
text = $Message
parse_mode = "HTML"
}
Invoke-RestMethod -Uri $Uri -Method Post -Body $Body | Out-Null
}
# --- HÀM GỬI SLACK ---
function Send-SlackAlert {
param ([string]$Message)
$Payload = @{ text = $Message } | ConvertTo-Json
Invoke-RestMethod -Uri $SlackWebhookUrl -Method Post -ContentType 'application/json' -Body $Payload | Out-Null
}
# --- VÍ DỤ SỬ DỤNG TRONG LUỒNG KIỂM TRA SỰ CỐ ---
$ServiceName = "Spooler" # Ví dụ kiểm tra Print Spooler service
$Service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
if ($Service.Status -ne 'Running') {
$ComputerName = $env:COMPUTERNAME
$Time = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
# 1. Gửi cảnh báo qua Telegram
$TgMsg = "🚨 <b>ALERT: Windows Service Stopped!</b><br><b>Server:</b> $ComputerName<br><b>Service:</b> $ServiceName<br><b>Time:</b> $Time"
Send-TelegramAlert -Message $TgMsg
# 2. Gửi cảnh báo qua Slack
$SlackMsg = "🚨 *ALERT: Windows Service Stopped!*\n*Server:* $ComputerName\n*Service:* $ServiceName\n*Time:* $Time"
Send-SlackAlert -Message $SlackMsg
}
Mẹo tối ưu cảnh báo cho DevOps / SysAdmin
Định dạng tin nhắn:
Telegram: Đặt
parse_mode=HTMLhoặcMarkdownV2để in đậm (<b>), nghiêng (<i>), chèn emoji cảnh báo (🚨,⚠️,✅) giúp thông báo trực quan.Slack: Sử dụng định dạng
của Slack để tạo các ô thông báo màu đỏ (khi lỗi) hoặc màu xanh (khi hệ thống hồi phục).Block Kit
Tránh bão thông báo (Alert Fatigue): Đối với các sự cố kéo dài, nên thêm cơ chế ghi log/cache thời điểm gửi cảnh báo gần nhất để chỉ gửi lại tin nhắn sau mỗi 15-30 phút thay vì gửi liên tục mỗi phút khi cronjob chạy.

0 Comments
Đăng nhận xét