Apache Ignite 2.8 引入的新指标系统(New Metrics System)的完整说明
这段文档是关于 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 的代码模板
需要吗?😊