在實際生產環境中,資料庫往往是應用性能的關鍵瓶頸。通過 APM 系統監控 JDBC 層面的指標,能快速發現如缺少索引導致的全表掃描等問題。例如,某電子商務系統的 sales_order 表未建立索引,APM 明顯顯示大量 Sequential Scans(順序掃描)與 Sequential Tuple Reads(順序元組讀取),這意味著每次查詢都需遍歷全表。建立索引後,順序操作歸零,索引掃描啟動,資料庫主機的 User CPU % 顯著下降,證明索引優化對整體系統的連鎖正面影響。



JDBCCollector 可配置 availabilityNameSpace 追蹤兩項核心指標:可用性(1=可連線,0=不可連線)與 連線時間(獲取連線耗時)。若使用連線池,連線時間通常極短;但在高負載下會出現非零耗時。為避免連線池干擾,可配置獨立 DataSource 專供可用性檢查,每輪詢周期建立新連線,確保檢測真實狀態。對於跨資料庫的鏈式查詢(如先查 Database B 獲取參數,再查 Database A),可串聯兩個 JDBCCollector,第一個設為惰性(頻率為 0),實現 IBindVariableProvider 提供綁定變量,第二個收集器引用第一個作為綁定來源。

訊息中介軟體(MOM)是許多應用的核心依賴,其健康狀態與吞吐性能需持續監控。主要策略分四類:
QueueBrowser 檢索隊列深度與最老訊息年齡。部署遠程代理接收測試訊息、加時間戳、回傳,可精確測量每個跳躍點延遲,但需額外部署與管理隊列。更輕量的方案是使用 JMS 臨時隊列:JMSCollector 啟動時自動建立臨時隊列,發送測試訊息並接收,無需管理介入。配置範例展示了 SimpleSyntheticMessageFactory(MapMessage,每周期 10 條)與 ByteArraySyntheticMessageFactory(ByteMessage,載入 JAR 位元組,每周期 1 條),負載大小與數量可變,全面測試吞吐能力。



JMXCollector 透過 MBeanServerConnection 收集指標。利用 ObjectName 通配符(如 jboss.mq.destination:service=Queue,*)自動發現所有隊列 MBean,並以 {target-property:name} 標記動態將隊列名映射至追蹤命名空間,實現隊列深度、排程訊息數、處理中訊息數、接收者數等指標的自動化收集。

當缺乏管理 API 時,QueueBrowser 可遍歷隊列計數,但效率較低且高負載下計數可能過時。其獨特優勢在於能獲取最老訊息年齡,這對於判斷生產者/消費者雙雙失效導致訊息堆積極具價值。JMSBrowserCollector 實現此功能,配置需 ConnectionFactory 與待瀏覽隊列集合。

MQCollector 結合 PCF(可編程命令格式)與核心 MQ Java 類,收集所有隊列的深度與開啟的輸入/輸出處理數。配置僅需 host、port、channel 三項屬性,示例展示了對遠端 MQ 服務器的監控。

SNMP 雖源於網路設備管理,但因代理輕量、易嵌入,已成應用生態系統監控的標準協議。核心概念對應 JMX:代理↔MBeanServer、管理程式↔客戶端、MIB↔MBean、OID↔ObjectName+屬性、Trap↔Notification。監控需指定:主機位址、埠號、協議版本(v1/v2c/v3)、Community(社區字串)、OID(如 Linux 1/5/15 分鐘負載:.1.3.6.1.4.1.2021.10.1.3)。
可用 snmpwalk 命令列工具驗證 OID,並透過 ShellCollector 的 CommandSet 解析輸出映射至 APM。SNMPCollector 基於 joeSNMP 實現,支援多 OID 目標集合,但逐個 OID 請求效率較低,適合指標數較少場景。

高頻指標數據持久化面臨查詢速度、歷史粒度、寫入並發、讀寫隔離、時間序列對齊等挑戰。核心策略包括:



選擇建議:關聯式資料庫配合功能索引可平衡兩者;專用時序庫(如 RRDTool)內建時間戳對齊但報表工具鏈較窄。
APM 系統的「儀表板」以統一形式呈現異構數據(CPU、網路、用戶數等)。Spring 收集器視覺化層架構:
/media/RendererName/300/300/Title/XAxis/YAxis),輸出位元組陣列與 MIME 類型,支援 gzip 壓縮。
GroovyRenderer 委派給檔案系統 Groovy 腳本(如 multiLine.groovy),支援熱部署微調圖表細節。配置指定數據緩存集合、預設繪圖屬性(尺寸、標題、軸標籤)、指標過濾正則(如 .*/Busy Workers)。生成 PNG 線圖顯示多台 Apache 伺服器的繁忙 Worker 線程趨勢。


將數據(XML/JSON)推送至客戶端由 Silverlight (Visifire)、JavaScript (Comet/Ajax/JMS) 等渲染,可實現下鑽、動畫、工具提示等扁平圖片不具備的互動。範例展示 Visifire XML 定義資料庫 CPU 條狀圖。

SparkLineRenderer 基於開源 Sparklines 庫實現條狀/線狀顯示。

APM 系統通常提供儀表板生成器,讓用戶從指標倉庫挑選指標與圖表類型拖拽生成儀表板。

本系列三篇文章系統介紹了 Java 應用運行時監控的完整體系:JVM 與應用類插裝(第一、二部分)、外部依賴監控(OS、資料庫、訊息系統、SNMP)、資料管理持久化策略、視覺化報表技術。良好的監控數據能顯著提升應用正常運行時間與性能。鼓勵開發者深入參與生產環境監控,從負載下的真實行為獲取寶貴反饋,持續改進軟體品質。