這段文檔是關于 Apache Ignite 2.8 引入的“新指標系統(New Metrics System)” 的完整說明。這是 Ignite 監控體系的一次重大升級,相比舊的、分散的統計方式,新系統更統一、靈活、可擴展。
我們來逐層拆解、通俗易懂地理解這個新指標系統的架構和使用方法。
🌟 一、為什么要“新指標系統”?
在 Ignite 2.8 之前:
- 指標分散在 JMX、緩存配置、數據區配置中
- 難以統一查看
- 擴展性差
從 Ignite 2.8 開始,引入了統一的 Metrics System(指標系統),目標是:
? 統一收集、集中管理、多通道導出
🧱 二、新指標系統的核心概念
1. Metrics(指標)
- 每個指標是一個“名字 + 值”的組合。
- 值可以是:
- 簡單類型:
long
,double
,String
- 復雜對象:比如直方圖(Histogram)
- 簡單類型:
- 示例:
io.datastorage.StorageSize
→ 當前存儲大小(單位字節)cache.myCache.CacheHits
→ 緩存命中次數
2. Registers(指標注冊表 / 分組)
- 指標不是雜亂無章的,而是按功能分組管理,這種分組叫 Register(注冊表)。
- 每個 Register 有名字,比如:
io.datastorage
→ 存儲相關指標cache.myCache
→ 名為myCache
的緩存指標
- 指標全名 =
注冊表名.指標名
- 例如:
cache.myCache.CacheHits
- 例如:
💡 類比:就像文件夾結構
cache.myCache/├── CacheHits├── CacheMisses└── OffHeapEntries
3. Exporters(導出器)—— 指標“出口”
這是新系統最強大的地方:同一個指標,可以通過多種方式“輸出”。
Ignite 內置了 4 種導出方式(Exporters):
導出器 | 類名 | 作用 | 適用場景 |
---|---|---|---|
JMX | JmxMetricExporterSpi | 通過 JMX 暴露指標 | Java 監控工具(如 JConsole) |
SQL View | SqlViewMetricExporterSpi | 指標變成一張 SQL 表 SYS.METRICS | 用 SQL 查詢指標 |
Log | LogExporterSpi | 定期打印指標到日志文件 | 簡單日志分析 |
OpenCensus | OpenCensusMetricExporterSpi | 接入 OpenCensus 生態(如 Prometheus、Zipkin) | 云原生監控 |
? 關鍵點:你可以在一個節點上同時啟用多個 Exporter,實現“一份指標,多端輸出”。
?? 三、如何配置?—— 啟用 Exporter
你需要在節點配置中指定使用哪些 Exporter:
XML 配置示例
<bean class="org.apache.ignite.configuration.IgniteConfiguration"><property name="metricExporterSpi"><list><!-- 通過 JMX 查看 --><bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/><!-- 通過 SQL 查看 --><bean class="org.apache.ignite.spi.metric.sql.SqlViewMetricExporterSpi"/><!-- 寫入日志 --><bean class="org.apache.ignite.spi.metric.log.LogExporterSpi"/></list></property>
</bean>
📌 注意:這是節點級配置,只對當前節點生效。
🔍 四、四種 Exporter 詳解
1. JMX Exporter(最傳統,功能最全)
- 所有指標都可通過 JMX 訪問。
- Histogram(直方圖)指標僅支持 JMX!
- 支持過濾:只導出某些 Register 的指標
JmxMetricExporterSpi jmxExporter = new JmxMetricExporterSpi();
// 只導出緩存相關的指標
jmxExporter.setExportFilter(mreg -> mreg.name().startsWith("cache."));
cfg.setMetricExporterSpi(jmxExporter);
💡 適合:Java 運維人員用 JConsole、VisualVM 查看。
2. SQL View Exporter(最方便!)
- 指標被映射為一張系統視圖:
SYS.METRICS
- 你可以用任何 SQL 工具查詢!
SELECT name, value
FROM SYS.METRICS
WHERE name LIKE 'cache.myCache.%';
輸出示例:
NAME | VALUE |
---|---|
cache.myCache.CacheHits | 12345 |
cache.myCache.CacheMisses | 678 |
cache.myCache.OffHeapEntries | 9000 |
? 優勢:
- 不用懂 JMX,會 SQL 就能查
- 可集成到 BI 工具(如 Grafana、Tableau)
- 適合開發、DBA 快速排查
3. Log Exporter(最簡單)
- 每分鐘(默認)將所有指標打印到日志文件
- 日志級別:
INFO
[INFO] Metrics: cache.myCache.CacheHits=12345io.datastorage.StorageSize=1073741824thread.pool.size=20
? 適合:
- 快速調試
- 無監控系統時臨時分析
- 日志審計
4. OpenCensus Exporter(最現代)
- 集成 OpenCensus(現為 OpenTelemetry 前身)
- 可將指標發送到:
- Prometheus
- Stackdriver
- Zipkin
- Jaeger
- 等支持 OpenCensus 的后端
使用步驟:
- 加載
ignite-opencensus
模塊 - 配置 Exporter
- 設置 OpenCensus 的
StatsCollector
將數據發往目標系統
支持的配置參數:
參數 | 說明 |
---|---|
filter | 過濾要導出的指標 |
period | 導出周期(如 10s) |
sendInstanceName | 是否添加實例名標簽 |
sendNodeId | 是否添加節點 ID 標簽 |
sendConsistentId | 是否添加節點一致 ID 標簽 |
? 適合:
- 云原生環境
- 已有 Prometheus + Grafana 監控棧
- 需要與微服務鏈路追蹤集成
📊 五、Histogram(直方圖)指標詳解
某些性能指標是分布式的,比如“SQL 查詢耗時”,不能只看平均值,要看分布。
Ignite 支持 Histogram(直方圖) 指標,僅通過 JMX 提供。
示例:一個耗時直方圖
假設邊界為 [10ms, 100ms]
,則生成以下 JMX 屬性:
JMX 屬性名 | 含義 |
---|---|
queryTime_0_10 | 耗時 < 10ms 的次數 |
queryTime_10_100 | 耗時 10~100ms 的次數 |
queryTime_100_inf | 耗時 > 100ms 的次數 |
💡 你可以據此繪制響應時間分布圖,判斷是否存在慢查詢。
? 六、新 vs 舊 指標系統對比
特性 | 舊系統 | 新系統(2.8+) |
---|---|---|
統一性 | 分散在各處 | 統一注冊與管理 |
可擴展性 | 差 | 支持自定義 Exporter |
多通道輸出 | 否 | 支持 JMX/SQL/Log/OpenCensus |
SQL 查詢支持 | ? | ? SYS.METRICS |
云原生集成 | ? | ? OpenCensus |
配置方式 | 各自為政 | 統一在 metricExporterSpi |
🛠? 七、最佳實踐建議
-
生產環境推薦組合:
<property name="metricExporterSpi"><list><bean class="org.apache.ignite.spi.metric.sql.SqlViewMetricExporterSpi"/><bean class="org.apache.ignite.spi.metric.opencensus.OpenCensusMetricExporterSpi"/></list> </property>
- 用 SQL 做日常查詢
- 用 OpenCensus 接入 Prometheus + Grafana
-
開發/測試環境:
- 加上
LogExporterSpi
,方便看日志
- 加上
-
避免過度收集:
- 如果不需要 Histogram,不要開啟
- 使用
filter
減少不必要的指標輸出
-
自定義 Exporter:
- 實現
MetricExporterSpi
接口 - 可對接 Kafka、Elasticsearch、InfluxDB 等
- 實現
? 一句話總結
Ignite 新指標系統是一個“統一采集、多路分發”的監控中樞:它把所有指標按組(Register)管理,并允許你通過 JMX、SQL、日志或 OpenCensus 等多種方式實時查看,特別適合現代監控體系(如 Prometheus + Grafana)。
📌 類比記憶:
比喻 | 解釋 |
---|---|
Metrics | 水滴(一個個數據點) |
Registers | 水桶(分類裝水) |
Exporters | 水管(把水引到不同地方) |
Node Config | 水泵控制面板(決定開哪幾根水管) |
如果你想,我可以幫你:
- 寫一個完整的
SYS.METRICS
常用查詢清單 - 生成一份 Prometheus + Grafana 的監控面板配置
- 提供自定義 Exporter 的代碼模板
需要嗎?😊