使用Prometheus监控容器化Spark v2.1应用的配置问题求助
Spark Prometheus监控Target状态Down解决方案
1. 修正JMX Exporter启动配置
只在pom.xml添加JMX Prometheus Javaagent依赖无法生效,需要在spark-submit启动命令中显式指定javaagent参数、配置文件路径和暴露端口,示例如下:
spark-submit \ --class <你的主类全限定名> \ --master spark://<Spark主节点地址>:7077 \ --conf spark.driver.extraJavaOptions="-javaagent:/opt/jmx_prometheus_javaagent-0.18.0.jar=8082:/opt/spark.yml" \ --conf spark.executor.extraJavaOptions="-javaagent:/opt/jmx_prometheus_javaagent-0.18.0.jar=8083:/opt/spark.yml" \ 你的应用jar包路径
注意:
- JMX Exporter的jar包和spark.yml配置文件需要在Spark主节点、所有工作节点的对应路径下都存在
- Driver和Executor要使用不同的端口,避免端口冲突
2. 编写基础可用的spark.yml配置
你可以直接使用以下基础配置,会自动将Spark JMX指标转换为Prometheus兼容的格式:
lowercaseOutputName: true lowercaseOutputLabelNames: true rules: - pattern: "org.apache.spark<type=(.+), name=(.+)><>(.+):" name: spark_$1_$2_$3 - pattern: "org.apache.spark<type=(.+), name=(.+), (.+)=(.+)><>(.+):" name: spark_$1_$2_$5 labels: $3: "$4"
3. 修正Prometheus配置与网络问题
你当前的Prometheus配置存在缩进错误,且需要确保Prometheus服务可以正常访问Spark节点的指标端口:
- 如果你用容器部署Prometheus,需要确认Prometheus容器和Spark集群在同一个网络下,否则要将target中的
spark-master替换为Spark主节点的宿主机物理IP - 先手动验证指标端口是否可用:在Prometheus所在环境执行
curl http://<Spark主节点IP>:8082/metrics,如果返回指标内容说明端口正常,否则检查Spark节点防火墙是否开放8082端口 - 修正后的prometheus.yml示例:
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] - job_name: spark-master static_configs: - targets: ['<Spark主节点实际IP>:8082'] # 若需要采集Executor指标,新增对应job即可 # - job_name: spark-executor # static_configs: # - targets: ['<工作节点IP>:8083']
4. 生效验证
修改完成后重启Prometheus服务,等待1-2个采集周期后,访问targets页面即可看到Spark任务状态变为up,后续可直接查询spark_开头的所有Spark指标。
内容的提问来源于stack exchange,提问作者Oded
相关产品推荐
相关产品推荐

