跳至主要内容

🧣 出事前告警與領先指標

本章節解析維運人員如何在 ActiveMQ 出事之前,透過趨勢、速率與品質訊號提早發出告警。重點不在事後排除,而在 flow control 啟動與服務中斷之前抓住異常。

環境

1. 領先指標 vs 落後指標

有效的事前告警,應在「資源飽和」與「服務阻塞」之間攔截,而不是等 Producer 已被擋或 Broker 無回應才動作。

類型代表訊號告警時機
領先使用率成長率、入出淨差擴大、DLQ 緩增趨勢惡化時
落後Flow Control 日誌、Store 100%、Broker 無回應已影響業務(太晚了)
提示

webConsole 適合人工抽查,不適合作為唯一事前告警手段。自動化應以 JMX 指標、日誌規則與心跳探針為主。

2. 四層觀測模型

2.1 Layer 1 — Broker 資源(最先爆)

對應 flowControlsystemUsage

指標 (JMX)事前告警條件意義
StorePercentUsage> 60% 注意,> 75% 警告持久化訊息堆積,接近滿載後無法寫入
MemoryPercentUsage> 60% 注意,> 75% 警告記憶體緩衝撐滿,即將 flow control
TempPercentUsage> 50%大型訊息溢出暫存異常
主機磁碟(KahaDB 目錄)可用空間 < 30%OS 磁碟滿會讓 Broker 整體失效

2.2 Layer 2 — Queue 健康(業務異常前哨)

指標事前告警條件意義
QueueSize連續 1~2 小時單調上升消費跟不上生產
EnqueueCountDequeueCount 淨差每分鐘淨增且持續 30 分鐘系統性失衡
ConsumerCount= 0 且 QueueSize > 0消費端掛了或未連上
ConsumerCount 驟降非計畫維護時段從 N → 0部署、網路或認證問題

2.3 Layer 3 — 死信與重送(品質惡化)

對應 deadLetterQueueackAndRedelivery

觀測點事前告警條件意義
DLQ.*QueueSize任何持續增長消費邏輯或下游已出問題
DLQ.*EnqueueCount 增速15 分鐘內明顯上升重送耗盡正在加速
ExpiredCount持續 > 0 且上升TTL 大量過期
InFlightCount長期偏高訊息已投遞但未 ACK

DLQ 往往比全面堆積早 30 分鐘~數小時 出現,是最值得獨立監控的面板之一。

2.4 Layer 4 — 連線與 JVM(基礎設施壓力)

指標事前告警條件意義
CurrentConnectionsCount異常飆升或歸零連線風暴或集體斷線
連線建立/斷開頻率Failover 反覆切換HA 不穩定
JVM Heap 使用率> 75% 且 GC 時間上升即將 OOM 或長停頓
Broker CPU持續 > 80% 超過 15 分鐘處理能力逼近上限

3. 趨勢告警 — 比固定閾值更有效

靜態閾值(如 QueueSize > 10000)容易誤報或漏報。建議加上變化率判斷:

3.1 資源成長率

每 5 分鐘記錄一次 StorePercentUsage,計算每小時成長:

成長率 = (現在值 - 1小時前值) / 1小時前值 × 100%
條件建議動作
成長率 > 5% 且持續 1 小時P2 注意
依成長率推算到 90% 的時間 < 4 小時P1 警告

3.2 入出速率淨差

淨差增速 = (EnqueueCount - DequeueCount) 的每分鐘變化

若淨差連續 30 分鐘擴大,即使 QueueSize 尚未達絕對閾值,也應告警。

3.3 告警訊息應附帶的上下文

每條 P1 以上告警建議包含:

  • 當前值
  • 1 小時前對比值
  • 變化率或淨差趨勢
  • 相關 ConsumerCount

值班人員才能區分「批次高峰」與「結構性失控」。

4. 日誌領先關鍵字

若已用 Filebeat 蒐集日誌(參見 addActiveMq),可對 activemq.log事前 alert rule:

日誌關鍵字嚴重度意義
Slow consumerWarning消費者跟不上,即將堆積
Producer Flow ControlWarning已開始限流
Memory limit / Store limitCritical快到硬上限
IOException / Connection refusedWarning網路或對端異常
SecurityExceptionWarning認證問題,Consumer 可能全滅
KahaDB + lockCritical雙實例搶 lock 或異常關閉

這些關鍵字往往比 JMX 閾值更早指出問題方向。事後排除流程見 loggingTroubleshoot

5. 告警分級

P2 — 注意(趨勢異常,可排程處理)

  • StorePercentUsage 60%~75%,或每小時成長 > 3%
  • 核心 Queue QueueSize 連續 1 小時上升
  • DLQ 有新增但增速緩慢
  • 日誌單次出現 Slow consumer

P1 — 警告(數小時內可能影響業務)

  • StorePercentUsage > 75%,或推算 4 小時內到 90%
  • 核心 Queue ConsumerCount = 0QueueSize > 0
  • 入出淨差持續擴大 30 分鐘以上
  • DLQ 增速明顯加快
  • 連線重連次數異常

P0 — 緊急(即將或已影響寫入/讀取)

  • MemoryPercentUsageStorePercentUsage > 90%
  • 日誌持續出現 Producer Flow Control
  • 核心 Queue 超過業務 SLA 且無 Consumer
  • Broker 無回應 / JMX 抓不到指標

6. 業務分級監控

不要對所有 Queue 使用同一閾值:

類別範例監控策略
Tier-1 核心訂單、付款低閾值 + 趨勢告警 + 探針 + DLQ
Tier-2 一般通知、日誌中等閾值 + ConsumerCount
Tier-3 可容忍延遲報表、批次僅監控極端堆積與資源上限

7. 心跳探針(Synthetic Monitoring)

被動指標之外,建議建立獨立心跳 Queue 驗證端到端通路:

條件動作
連續 3 次 send/receive 失敗P0
端到端延遲 > 基線 3 倍P1
延遲緩步上升(過去 1 小時)P2

可抓到「JMX 正常但實際通訊已壞」的隱性故障。

8. 維運觀測節奏

頻率動作方式
即時JMX scrape + 告警規則Prometheus / Grafana / Zabbix
即時日誌關鍵字 matchELK Alert
每小時核心 Queue Top 10 深度Dashboard 報表
每日DLQ 總量、過期訊息趨勢JMX 或 Web Console
每週閾值回顧、減少誤報告警回顧

9. 最小可行方案(資源有限時)

若只能先做三件事,建議優先順序:

  1. Grafana 監控 StorePercentUsageMemoryPercentUsage、核心 Queue QueueSize 趨勢(非僅瞬時值)
  2. ELK 告警Slow consumerFlow ControlStore limit 設 rule
  3. 每 60 秒心跳探針 打核心路徑

這三項分別覆蓋「資源要滿」「消費跟不上」「通訊已壞」三種最常見的事前訊號。

10. 與其他文章的關聯

主題文章
MBean 指標定義jmxMonitoring
資源上限語意flowControl
DLQ 機制deadLetterQueue
日誌蒐集addActiveMq
事後排除loggingTroubleshoot
效能調校performanceTuning