ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Apache Storm 集群指标推送 Prometheus Pushgateway:storm-metrics-prometheus 模块配置与原理详解

Apache Storm 集群指标推送 Prometheus Pushgateway:storm-metrics-prometheus 模块配置与原理详解 大数据流处理后端【免费下载链接】stormApache Storm项目地址https://gitcode.com/gh_mirrors/storm6/storm点击查看免费下载Apache Storm 的external/storm-metrics-prometheus模块提供了一个开箱即用的指标上报器Reporter用于把 Nimbus 侧统计的 Cluster Metrics 以 Push 模式推送到 Prometheus Pushgateway 为骨架结合模块源码、单元测试与集群指标文档完整讲解从storm.yaml配置、依赖部署到指标命名映射与安全选项的实战细节读完即可在自己的 Storm 集群中接入 Prometheus 监控链路。一、模块定位与工作原理在 Storm 的守护进程Nimbus、Supervisor、UI 等内部指标基于 Codahale Metricscom.codahale.metrics.MetricRegistry体系收集并通过可预置上报器机制对外输出。storm-metrics-prometheus模块中的PrometheusPreparableReporter实现了 Storm 定义的上报器接口PreparableReporter见 PreparableReporter.java因此可以直接挂在 Storm 守护进程上把集群级指标推送到 Pushgateway。整体工作链路如下守护进程启动时Storm 读取storm.daemon.metrics.reporter.plugins中配置的上报器类名列表PrometheusPreparableReporter.prepare()从守护进程配置中解析 Pushgateway 地址、Job 名、协议 Scheme、Basic Auth 与 TLS 校验开关构造 Prometheus 官方 Pushgateway 客户端io.prometheus.metrics.exporter.pushgateway.PushGateway守护进程按storm.daemon.metrics.reporter.interval.secs配置的周期调用start()启动调度上报PrometheusReporterClient继承自 Codahale 的ScheduledReporter周期性收集MetricRegistry中注册的 Gauge 与 Histogram并调用prometheus.push()推送到 PushgatewayPrometheus 实例按自身配置从 Pushgateway/metrics接口抓取数据Pushgateway 默认监听 9091 端口。从代码注释与单元测试可确认见 PrometheusReporterClient.java该上报器当前只处理Gauge与Histogram两类指标Counter、Timer、Meter 暂未实现report()方法注释明确说明Counters, Timers and Meters are not implemented (yet)since we dont need them for Cluster Summary Metrics。二、快速开始修改 storm.yaml在 Storm 安装目录下的conf/storm.yaml中追加以下配置完整示例见 READMEstorm.daemon.metrics.reporter.plugins: - org.apache.storm.metrics.prometheus.PrometheusPreparableReporter storm.daemon.metrics.reporter.interval.secs: 10 # Configuration for the Prometheus Pushgateway storm.daemon.metrics.reporter.plugin.prometheus.job: job_name storm.daemon.metrics.reporter.plugin.prometheus.endpoint: localhost:9091 storm.daemon.metrics.reporter.plugin.prometheus.scheme: http storm.daemon.metrics.reporter.plugin.prometheus.basic_auth_user: storm.daemon.metrics.reporter.plugin.prometheus.basic_auth_password: storm.daemon.metrics.reporter.plugin.prometheus.skip_tls_validation: false其中storm.daemon.metrics.reporter.plugins与storm.daemon.metrics.reporter.interval.secs是 Storm 内置守护进程指标上报的通用配置项对应定义见 DaemonConfig.javaSTORM_DAEMON_METRICS_REPORTER_PLUGINS为字符串列表要求列表内类实现PreparableReporter接口STORM_DAEMON_METRICS_REPORTER_INTERVAL_SECS为整数。其余storm.daemon.metrics.reporter.plugin.prometheus.*是模块私有的推送配置键。配置项完整说明以下表格整理了全部配置键、源码默认值与含义默认值取自 PrometheusPreparableReporter.java 的prepare()实现配置键默认值说明storm.daemon.metrics.reporter.plugins无列表守护进程指标上报器类名列表加入org.apache.storm.metrics.prometheus.PrometheusPreparableReporter即启用本模块storm.daemon.metrics.reporter.interval.secs10指标上报周期秒由ObjectReader.getInt(..., 10)读取缺省 10 秒storm.daemon.metrics.reporter.plugin.prometheus.jobstorm推送到 Pushgateway 时使用的 Job 名Prometheus 中用于区分不同上报来源storm.daemon.metrics.reporter.plugin.prometheus.endpointlocalhost:9091Pushgateway 的 host:port 地址storm.daemon.metrics.reporter.plugin.prometheus.schemehttp传输协议支持http与https传入非法值时会回退为 HTTP 并输出Unsupported scheme. Expecting http or https告警日志storm.daemon.metrics.reporter.plugin.prometheus.basic_auth_user空Pushgateway 基础认证用户名与密码同时非空时才会启用 Basic Auth源码使用isBlank()判断storm.daemon.metrics.reporter.plugin.prometheus.basic_auth_password空Pushgateway 基础认证密码与用户名成对使用storm.daemon.metrics.reporter.plugin.prometheus.skip_tls_validationfalse仅当scheme为https时生效为true时跳过 TLS 证书校验与主机名校验内部使用信任所有证书的TrustManager与始终返回 true 的HostnameVerifier构造连接工厂。启用时日志会打出明确警告提示TLS validation is DISABLED ... This is insecure and must not be used in production需要特别强调skip_tls_validation: true会让模块信任任何 TLS 证书源码中定义了一个不对证书链做任何校验的INSECURE_TRUST_MANAGER该选项仅供测试或证书尚未就绪的临时场景生产环境应保持false并为 Pushgateway 配置受信任的正式证书。Basic Auth 与 TLS 的判定逻辑源码中的判定逻辑非常清晰可作为排查配置问题的依据Basic Authprepare()中仅在basicAuthUser.isBlank() false basicAuthPassword.isBlank() false时调用builder.basicAuth(user, password)否则不附带认证头TLS 跳过校验scheme Scheme.HTTPS skipTlsValidation两个条件同时满足时才注入不校验证书的HttpConnectionFactory若 scheme 为 HTTP该选项不生效。三、依赖部署jar 与传递依赖README 明确要求除了本模块的 jar 之外还必须把 Prometheus 客户端所需的传递依赖一起放入 Storm 安装目录的lib目录即${STORM_HOME}/lib否则守护进程在类加载阶段会因缺少io.prometheus.metrics.*类而失败。从本模块的 pom.xml 可以看到模块依赖storm-serverprovided作用域编译期由 Storm 提供运行时依赖io.prometheus:prometheus-metrics-core与io.prometheus:prometheus-metrics-exporter-pushgateway版本均由属性prometheus.client.version管理当前为1.9.0。实际操作上可以先用 Maven 构建本模块及其依赖例如在仓库根目录执行mvn -pl external/storm-metrics-prometheus -am package再把模块 jar 与上述两个 Prometheus 依赖 jar 一并复制到 Storm 的lib目录。注意避免与 Storm 自带的旧版 Prometheus 客户端若存在产生版本冲突应以模块声明为准。四、推送哪些指标Cluster Metrics 的 Prometheus 化该上报器推送的是 Nimbus 视角的集群汇总指标。PrometheusReporterClient通过静态映射把 Codahale 指标名映射为 Prometheus 指标映射关系定义在initClusterMetrics()中见 PrometheusReporterClient.java。Prometheus 名称遵循其命名规范原指标名中的:分隔符替换为_。Gauge 类指标集群整体状态原始指标名Cluster MetricsPrometheus 指标名含义summary.cluster:num-nimbus-leaderssummary_cluster_num_nimbus_leaders处于 leader 状态的 Nimbus 数量健康集群应恒为 1故障切换期间短暂为 0summary.cluster:num-nimbusessummary_cluster_num_nimbusesNimbus 总数leader 与 standbysummary.cluster:num-supervisorssummary_cluster_num_supervisorsSupervisor 数量summary.cluster:num-topologiessummary_cluster_num_topologies拓扑数量summary.cluster:num-total-used-workerssummary_cluster_num_total_used_workers已使用的 worker/slot 数量summary.cluster:num-total-workerssummary_cluster_num_total_workersworker/slot 总数量summary.cluster:total-fragmented-cpu-non-negativesummary_cluster_total_fragmented_cpu_non_negative集群碎片化 CPU占核心百分比即因节点其他资源耗尽而无法使用的 CPUsummary.cluster:total-fragmented-memory-non-negativesummary_cluster_total_fragmented_memory_non_negative集群碎片化内存MBnimbus:available-cpu-non-negativenimbus_available_cpu_non_negative集群可用 CPU占核心百分比nimbus:total-cpunimbus_total_cpu集群 CPU 总量占核心百分比nimbus:total-memorynimbus_total_memory集群内存总量MBHistogram 类指标拓扑 / Supervisor 分布原始指标名Cluster MetricsPrometheus 指标名含义summary.topologies:assigned-cpusummary_topologies_assigned_cpu每个拓扑已调度的 CPU占核心百分比summary.topologies:assigned-mem-off-heapsummary_topologies_assigned_mem_off_heap每个拓扑已调度的堆外内存MBsummary.topologies:assigned-mem-on-heapsummary_topologies_assigned_mem_on_heap每个拓扑已调度的堆内内存MBsummary.topologies:num-executorssummary_topologies_num_executors每个拓扑的 executor 数量summary.topologies:num-taskssummary_topologies_num_tasks每个拓扑的 task 数量summary.topologies:num-workerssummary_topologies_num_workers每个拓扑的 worker 数量summary.topologies:replication-countsummary_topologies_replication_count每个拓扑的副本数summary.topologies:requested-cpusummary_topologies_requested_cpu每个拓扑请求的 CPU占核心百分比summary.topologies:requested-mem-off-heapsummary_topologies_requested_mem_off_heap每个拓扑请求的堆外内存MBsummary.topologies:requested-mem-on-heapsummary_topologies_requested_mem_on_heap每个拓扑请求的堆内内存MBsummary.topologies:uptime-secssummary_topologies_uptime_secs每个拓扑的运行时长秒summary.supervisors:fragmented-cpusupervisors_fragmented_cpu每个 Supervisor 的碎片化 CPU占核心百分比summary.supervisors:fragmented-memsupervisors_fragmented_mem每个 Supervisor 的碎片化内存MBsummary.supervisors:num-used-workerssupervisors_num_used_workers每个 Supervisor 已使用的 worker 数summary.supervisors:num-workerssupervisors_num_workers每个 Supervisor 的 worker 数summary.supervisors:uptime-secssupervisors_uptime_secsSupervisor 运行时长秒summary.supervisors:used-cpusupervisors_used_cpu每个 Supervisor 已使用的 CPU占核心百分比summary.supervisors:used-memsupervisors_used_mem每个 Supervisor 已使用的内存MB关于这些指标的完整语义、单位与类型定义可对照 ClusterMetrics.md 中的 Cluster Metrics (From Nimbus) 一节该文档同时提醒指标系统仍在演进任何指标名称与语义都可能在次要版本间调整使用时请以各指标描述为准。上报时的类型转换细节report()的实现展示了几个值得注意的细节Gauge 值转换通过toDouble()将 Gauge 值统一转为double——Number直接取doubleValue()Boolean映射为1/0其他类型则通过Double.parseDouble(toString())解析解析失败时捕获NumberFormatException并输出告警如测试中new SimpleGauge(500)这种字符串值即可正常上报为数值 500Histogram 上报遍历快照Snapshot.getValues()的每个样本逐个observe()进 Prometheus Histogram保留原始样本分布便于后续做分位数统计推送失败处理prometheus.push()抛出IOException时仅记录 WARN 日志不会影响 Storm 守护进程自身运行属于尽力而为的上报模型。五、源码级验证单元测试做了什么模块测试类 PrometheusPreparableReporterTest.java 使用 Testcontainers 拉起真实 Pushgateway镜像prom/pushgateway:v1.8.0暴露 9091 端口做端到端验证覆盖三种场景testSimpleHTTP默认无认证、HTTP 协议注册summary.cluster:num-supervisors、nimbus:total-memory、nimbus:total-cpu三个指标后手动触发report()然后 GET Pushgateway 的/metrics接口断言其中包含形如summary_cluster_num_supervisors{instance,jobtest_simple} 5的文本行随后把 Gauge 值从 5 更新为 100 再次上报确认新值100生效——这验证了每次上报都会把当前最新值推送到 Pushgateway的行为testBasicAuth给 Pushgateway 容器挂载pushgateway-basicauth.yaml并开启 Basic Auth配置中传入my_user/secret_password验证认证场景下推送与抓取正常testTls给 Pushgateway 容器挂载pushgateway-ssl.yaml开启 HTTPS自签名证书配置scheme: https与skip_tls_validation: true验证跳过 TLS 校验的推送链路可用。测试中的断言文本也直观展示了指标在 Pushgateway 中的最终形态例如# HELP summary_cluster_num_supervisors Number of supervisors. # TYPE summary_cluster_num_supervisors gauge summary_cluster_num_supervisors{instance,jobtest_simple} 5注意测试注释中的提醒真实 Storm 环境中这些指标由守护进程自动生成测试里只是用SimpleGauge伪造数据且在真实环境中上报由调度执行器周期触发而非像测试那样手动调用report()。测试用例默认在无 Docker 环境时自动跳过Testcontainers(disabledWithoutDocker true)。六、Prometheus 侧配置建议推送链路就绪后还需在 Prometheus 实例中添加 Pushgateway 作为抓取目标典型配置片段如下scrape_configs: - job_name: pushgateway static_configs: - targets: [localhost:9091]Scrape 到的指标将带有jobjob_name标签对应storm.daemon.metrics.reporter.plugin.prometheus.job可据此区分不同 Storm 集群或环境的上报来源。由于 Pushgateway 会长期保留上次推送的指标被删除或已停止的守护进程的旧指标可能仍然可见建议在告警规则中结合指标新鲜度例如按up时间或推送时间戳判断数据是否过期避免误报。七、与内置上报器对比与适用场景Storm 内置了三种守护进程指标上报器详见 ClusterMetrics.md 的 Metric Reporters 一节Console 上报器输出到System.out、CSV 上报器写入 CSV 文件、JMX 上报器通过 JMX 暴露指标三者都是 Pull 或本地落盘模式。而PrometheusPreparableReporter采用Push 模式适合以下场景集群网络环境不允许 Prometheus 直接访问各 Nimbus/Supervisor 节点只能由节点主动外推指标已有 Prometheus Pushgateway 监控体系希望 Storm 集群指标直接并入统一监控看板与告警规则需要把集群汇总指标slot 使用率、CPU/内存碎片化、拓扑资源分配等与其他业务指标一起在 Grafana 中联合展示。八、常见问题排查守护进程启动报 ClassNotFound确认模块 jar 与prometheus-metrics-core、prometheus-metrics-exporter-pushgateway两个依赖都已放入 Storm 的lib目录Pushgateway 收不到数据先确认endpoint的 host:port 可从守护进程所在节点访问curl http://endpoint/metrics应能返回数据再确认storm.daemon.metrics.reporter.interval.secs不是过大导致等待周期过长日志出现Unsupported scheme告警scheme配置写入了非http/https的值模块已自动回退到 HTTP检查配置拼写启用 https 后推送失败若 Pushgateway 使用自签名证书可临时设置skip_tls_validation: true验证链路确认后应尽快替换为受信任证书并关闭该开关若 Basic Auth 未生效确认basic_auth_user与basic_auth_password均非空字符串指标缺失本模块仅上报initClusterMetrics()映射表中的集群汇总指标其他 daemon 级指标Nimbus、Supervisor、UI 等大量 Timer/Meter/Counter 类指标当前不会被推送如有需要请基于PreparableReporter接口自行扩展或使用 JMX 等其他上报器。赞分享大数据流处理后端【免费下载链接】stormApache Storm项目地址https://gitcode.com/gh_mirrors/storm6/storm点击查看免费下载相关推荐Apache Doris集群监控Prometheus指标详解Apache Doris集群监控Prometheus指标详解 在现代数据平台运维中集群监控如同神经系统实时感知系统健康状态。Apache Doris作OLAP数据库大数据实时分析GPSBabel终极指南如何轻松转换GPS数据格式支持200设备互通GPSBabel终极指南如何轻松转换GPS数据格式支持200设备互通 GPSBabel是一款强大的开源GPS数据转换工具能够让你在不同GPS设备、软件和Clair v4 指标Metrics监控指南Prometheus 与 OTLP 导出配置详解Clair v4 指标Metrics监控指南Prometheus 与 OTLP 导出配置详解 Clair v4 内置了完整的可观测性能力通过独立的 in网络安全应用安全云原生后端上一篇PolyglotPDF跨语言PDF处理的终极解决方案部署指南下一篇4台Mac跑出32.5 t/sexo 本地AI集群搭建完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表