Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml) - 部署模式: rsync Python 檔案至 188 → docker restart (volume mount) - Dockerfile/requirements 變動時自動重建 Docker image - 部署通知: Telegram (開始/成功/失敗) - 健康檢查: https://mo.wooo.work/health (最多 5 次重試) - 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7.8 KiB
7.8 KiB
Telegram 告警設定完整指南
✅ 已完成的設定
1. Telegram Bot 配置
- Bot Token: 8075645931:AAH-EGKMo8ZC4QJs-Nc1_0s92xHrGdQvdpg
- 接收者 Chat ID:
- 5619078117
- 961168381
- 測試狀態: ✅ 兩個 Chat ID 都已測試通過
2. Grafana Contact Point
- 名稱: Telegram Alerts
- 類型: Telegram
- 狀態: ✅ 已創建並配置
- UID: afa2gx8mazzeof
📋 需要在 Grafana UI 中手動創建的告警規則
由於 Grafana Unified Alerting API 較為複雜,建議在 Web UI 中創建告警規則。以下是四個告警規則的詳細配置。
訪問告警設定頁面
- 登入 Grafana: https://momo.wooo.work/grafana/
- 點選左側選單 Alerting → Alert rules
- 點擊右上角 New alert rule 按鈕
🔴 告警規則 1:網站不可用告警
基本設定
- Rule name:
網站不可用告警 - Folder: 創建新資料夾
MOMO Alerts或使用現有的 - Evaluation group: 創建新群組
Website Monitoring - Evaluation interval:
1m
查詢設定
Step 1: 設定 Prometheus 查詢
- Query A:
- Data source:
Prometheus - Metric:
probe_success{job="website_https"} - Legend:
{{instance}}
- Data source:
Step 2: 設定告警條件
-
Expression B:
- Operation:
Reduce - Function:
Last - Input:
A - Mode:
Strict
- Operation:
-
Expression C (Threshold):
- Operation:
Threshold - Input:
B - Condition:
IS BELOW - Value:
1
- Operation:
告警條件
- Set as alert condition: 選擇
C - Evaluate for:
5m(持續 5 分鐘才觸發) - Configure no data and error handling:
- No Data:
Alerting - Error:
Alerting
- No Data:
標籤與註解
-
Labels:
severity = critical
-
Annotations:
- Summary:
🔴 網站不可用 - Description:
網站 {{ $labels.instance }} 已經無法訪問超過 5 分鐘
- Summary:
通知設定
- Contact point: 選擇
Telegram Alerts
⚠️ 告警規則 2:SSL 證書即將到期
基本設定
- Rule name:
SSL 證書即將到期 - Folder:
MOMO Alerts - Evaluation group:
Website Monitoring - Evaluation interval:
1m
查詢設定
Query A:
(probe_ssl_earliest_cert_expiry{job="website_https"} - time()) / 86400
- 說明:計算 SSL 證書剩餘天數
Expression B (Reduce):
- Function:
Last - Input:
A
Expression C (Threshold):
- Input:
B - Condition:
IS BELOW - Value:
7(剩餘天數少於 7 天)
告警條件
- Set as alert condition:
C - Evaluate for:
10m - No Data:
OK - Error:
Alerting
標籤與註解
-
Labels:
severity = warning
-
Annotations:
- Summary:
⚠️ SSL 證書即將到期 - Description:
SSL 證書將在 {{ $values.A | humanizeDuration }} 後到期,請盡快更新
- Summary:
通知設定
- Contact point:
Telegram Alerts
⚠️ 告警規則 3:資料庫慢查詢告警
基本設定
- Rule name:
資料庫慢查詢告警 - Folder:
MOMO Alerts - Evaluation group:
Database Monitoring - Evaluation interval:
1m
查詢設定
Query A:
increase(sqlite_slow_queries_total[1h])
- 說明:過去 1 小時內的慢查詢增加量
Expression B (Reduce):
- Function:
Last - Input:
A
Expression C (Threshold):
- Input:
B - Condition:
IS ABOVE - Value:
10(超過 10 次慢查詢)
告警條件
- Set as alert condition:
C - Evaluate for:
5m - No Data:
OK - Error:
OK
標籤與註解
-
Labels:
severity = warning
-
Annotations:
- Summary:
⚠️ 資料庫慢查詢過多 - Description:
過去一小時內有 {{ $values.A | humanize }} 次慢查詢(>1秒),需要優化資料庫索引
- Summary:
通知設定
- Contact point:
Telegram Alerts
⚠️ 告警規則 4:資料庫檔案過大
基本設定
- Rule name:
資料庫檔案過大 - Folder:
MOMO Alerts - Evaluation group:
Database Monitoring - Evaluation interval:
1m
查詢設定
Query A:
sqlite_database_size_bytes / 1024 / 1024
- 說明:資料庫大小(MB)
Expression B (Reduce):
- Function:
Last - Input:
A
Expression C (Threshold):
- Input:
B - Condition:
IS ABOVE - Value:
500(超過 500 MB)
告警條件
- Set as alert condition:
C - Evaluate for:
10m - No Data:
OK - Error:
OK
標籤與註解
-
Labels:
severity = warning
-
Annotations:
- Summary:
⚠️ 資料庫檔案過大 - Description:
資料庫大小已達 {{ $values.A | humanize }} MB,建議進行 VACUUM 優化或遷移至 PostgreSQL
- Summary:
通知設定
- Contact point:
Telegram Alerts
🔔 通知策略設定
設定 Notification Policy
- 前往 Alerting → Notification policies
- 點擊 Edit 編輯 Default policy
- 設定:
- Contact point:
Telegram Alerts - Group by:
alertname,grafana_folder - Timing options:
- Group wait:
10s(群組等待時間) - Group interval:
5m(群組間隔) - Repeat interval:
4h(重複通知間隔)
- Group wait:
- Contact point:
📱 測試告警
方法 1:手動測試 Contact Point
- 前往 Alerting → Contact points
- 找到
Telegram Alerts - 點擊 Test 按鈕
- 點擊 Send test notification
- 檢查 Telegram 是否收到測試訊息
方法 2:觸發真實告警
暫時關閉網站來測試告警(謹慎操作):
# 在伺服器上執行
sudo systemctl stop nginx
# 等待 5 分鐘後應該會收到告警
# 然後恢復
sudo systemctl start nginx
📊 告警訊息範例
網站不可用告警
🔴 網站不可用
網站 https://momo.wooo.work 已經無法訪問超過 5 分鐘
Labels:
alertname = 網站不可用告警
severity = critical
Status: Firing
Started: 2026-01-14 02:15:00
SSL 證書到期告警
⚠️ SSL 證書即將到期
SSL 證書將在 5 天後到期,請盡快更新
Labels:
alertname = SSL 證書即將到期
severity = warning
Status: Firing
🔧 進階設定
自訂 Telegram 訊息模板
- 前往 Alerting → Contact points
- 編輯
Telegram Alerts - 在 Optional Telegram settings 中,修改 Message 欄位:
🚨 <b>{{ .GroupLabels.alertname }}</b>
{{ range .Alerts }}
<b>{{ .Labels.summary }}</b>
{{ .Annotations.description }}
<b>狀態:</b> {{ .Status }}
<b>開始時間:</b> {{ .StartsAt | humanizeTimestamp }}
{{ if .EndsAt }}<b>結束時間:</b> {{ .EndsAt | humanizeTimestamp }}{{ end }}
<b>標籤:</b>
{{ range .Labels.SortedPairs }} • {{ .Name }} = {{ .Value }}
{{ end }}
{{ end }}
設定靜音規則
如果需要在維護期間暫時關閉告警:
- 前往 Alerting → Silences
- 點擊 Add silence
- 設定:
- Duration: 選擇維護時長
- Matchers:
alertname =~ .*(匹配所有告警)- 或選擇特定的告警名稱
- Comment: 維護原因
📝 注意事項
- 測試所有告警規則:創建後請測試每個告警規則
- 調整閾值:根據實際情況調整告警閾值
- 避免告警疲勞:設定合理的
repeat_interval,避免過於頻繁的通知 - 定期檢查:每週檢查一次告警規則是否正常運作
- 備份配置:定期備份 Grafana 設定
✅ 完成檢查清單
- Telegram Bot 創建並測試
- Contact Point 配置完成
- 創建告警規則 1:網站不可用
- 創建告警規則 2:SSL 證書到期
- 創建告警規則 3:資料庫慢查詢
- 創建告警規則 4:資料庫檔案過大
- 設定 Notification Policy
- 測試所有告警
- 記錄告警處理流程
文件版本: 1.0 建立日期: 2026-01-14 維護人員: MOMO Pro System Admin