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

如何为ActiveMQ Artemis配置OpenTelemetry导出器?以Prometheus为过渡尝试

ActiveMQ Artemis 2.33.0 OpenTelemetry数据导出配置指南

一、先搞定Prometheus过渡方案的指标抓取问题

1. 修正Prometheus插件类

你现在配置的com.redhat.amq.broker.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin是Red Hat AMQ专属插件,而你用的是Apache ActiveMQ Artemis,必须换成Apache官方的插件类:

修改broker.xml里的metrics配置段:

<metrics>
    <jvm-memory>true</jvm-memory>
    <jvm-gc>true</jvm-gc>
    <jvm-threads>true</jvm-threads>
    <netty-pool>true</netty-pool>
    <file-descriptors>true</file-descriptors>
    <processor>true</processor>
    <uptime>true</uptime>
    <logging>true</logging>
    <security-caches>true</security-caches>
    <plugin class-name="org.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin"/>
</metrics>

2. 启用Metrics端点

Apache Artemis的Prometheus指标默认通过/metrics路径暴露,但需要确保控制台web应用里启用了metrics模块。检查bootstrap.xml的web配置:

<web bind="http://0.0.0.0:8161" path="web">
    <app url="console" war="console.war"/>
    <app url="metrics" war="metrics.war"/> <!-- 确保这一行存在 -->
</web>

如果没有<app url="metrics" war="metrics.war"/>就加上,然后重启broker。

3. 调整Prometheus抓取任务

直接抓取正确的/metrics端点,不要再用Jolokia的JSON接口了:

- job_name: 'activemq-artemis'
  static_configs:
    - targets: ['activemq-service:8161']
  metrics_path: '/metrics'
  basic_auth:
    username: 'admin'
    password: 'admin'

4. 备选:用Jolokia Exporter转格式

要是不想改broker配置,就得部署jolokia_exporter把Jolokia的JSON转成Prometheus能识别的文本格式:

  • 启动exporter:
java -jar jolokia-jvm-1.7.1-agent.jar --host activemq-service --port 8778 --target http://admin:admin@activemq-service:8161/console/jolokia/
  • 然后Prometheus抓取这个exporter的端口:
- job_name: 'activemq-jolokia'
  static_configs:
    - targets: ['jolokia-exporter:8778']

二、直接导出OpenTelemetry数据(最终方案)

既然最终目标是OTel,不如跳过Prometheus,直接用OpenTelemetry Java Agent采集,和你其他组件的架构对齐。

1. 准备OTel Java Agent

下载和你其他组件版本一致的opentelemetry-javaagent.jar,放到Artemis的部署目录里。

2. 启动Artemis时挂载Agent

如果是裸机部署,修改启动命令:

java -javaagent:/path/to/opentelemetry-javaagent.jar \
  -Dotel.service.name=activemq-artemis \
  -Dotel.metrics.exporter=otlp \
  -Dotel.traces.exporter=otlp \
  -Dotel.exporter.otlp.endpoint=http://your-otel-collector:4317 \
  -Dotel.exporter.otlp.protocol=grpc \
  -jar artemis-run.jar

Docker部署的话,修改Dockerfile或者docker run命令:

FROM apache/activemq-artemis:2.33.0
COPY opentelemetry-javaagent.jar /opt/artemis/
CMD ["java", "-javaagent:/opt/artemis/opentelemetry-javaagent.jar", "-Dotel.service.name=activemq-artemis", "-Dotel.metrics.exporter=otlp", "-Dotel.traces.exporter=otlp", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.exporter.otlp.protocol=grpc", "-jar", "/opt/artemis/bin/artemis-run.jar"]

3. 配置OTel Collector

确保你的OpenTelemetry Collector能接收OTLP数据,示例配置:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:

exporters:
  # 根据需求配置后端,比如Prometheus、Jaeger等
  prometheus:
    endpoint: "http://prometheus:9090/api/v1/write"
  jaeger:
    endpoint: "jaeger:14250"
    tls:
      insecure: true

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [jaeger]
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [prometheus]

排查要点

  • 访问/metrics返回404?检查metrics.war是否在Artemis的web目录,或者bootstrap.xml里有没有启用metrics app。
  • OTel Agent不生效?确认Agent版本和Artemis的Java版本兼容(Artemis 2.33.0默认用Java 11,Agent支持Java 8+)。
  • 网络不通?检查防火墙,确保Artemis能连到OTel Collector,Prometheus能访问Artemis的端口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:35:53