You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark driver/executor中Prometheus JMX-exporter日志无法输出如何解决?

JMX Exporter在Spark进程中无法输出FINE级别日志解决方案

根因说明

Prometheus JMX Exporter使用JDK原生java.util.logging(JUL)输出日志,Spark默认集成JUL到SLF4J的桥接组件,结合参数加载顺序、日志级别配置不匹配,会导致FINE级别日志被过滤。

操作步骤

  • 调整双日志框架配置

    JMX Exporter的日志会先经过JUL,再被桥接到Spark的log4j,需要两边都配置对应级别:
    1. 修改/etc/metrics/conf/logging.properties:
    .level = FINE
    # 单独指定JMX Exporter日志级别
    io.prometheus.jmx.level = FINE
    # 配置控制台输出规则
    java.util.logging.ConsoleHandler.level = FINE
    java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
    
    1. 修改你指定的log4j.properties(JUL的FINE对应SLF4J的DEBUG级别):
    log4j.logger.io.prometheus.jmx=DEBUG, console
    
  • 调整JVM参数顺序

    日志相关系统属性必须放在-javaagent参数之前,保证JMX Exporter加载时读取到正确配置,参考顺序:
    /usr/local/openjdk-8/bin/java -XX:+UseG1GC \
    -Dlog4j.debug \
    -Dlog4j.configuration=log4j.properties \
    -Djava.util.logging.config.file=/etc/metrics/conf/logging.properties \
    -javaagent:/prometheus/jmx_prometheus_javaagent.jar=8090:/etc/metrics/conf/prometheus.yaml \
    # 剩余Spark参数
    -Dspark.driver.port=7078 -Dspark.driver.blockManager.port=7079 ...
    
  • 排查异常场景

    • 加JVM参数-Dsun.java.util.logging.config.debug=true,可输出JUL配置加载过程,确认配置文件路径正确、未被覆盖
    • 确认Spark进程运行用户对日志输出路径有读写权限
    • 集群环境下确认日志收集规则已捕获stdout/stderr输出,避免日志已生成但未被收集

内容的提问来源于stack exchange,提问作者Eljah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:27:04