将指标从 ActiveMQ Artemis 发送到 Prometheus

Adr*_*ica 4 prometheus activemq-artemis

我有一个问题被困住了,我不太确定如何解决它。

在我的工作项目中,我有一个 ActiveMQ 队列,我想向 Prometheus 发送一些指标,这将帮助我在 Grafana 中创建一些警报。我知道对于 ActiveMQ Artemis 我可以使用这个插件,但我不明白 100% 如何配置它。

我的应用程序部署在 Kubernetes 集群上,ActiveMQ 代理也在那里。所以我创建了ActiveMQPrometheusMetricsPlugin类来实现org.apache.activemq.artemis.core.server.metrics.ActiveMQMetricsPlugin. 现在我感到困惑的是,我应该部署我的应用程序,并且 Prometheus 会收集指标吗?我应该做更多配置吗?

我们通常不会在本地环境上构建应用程序。我们正在使用一个管道来构建应用程序并将其部署到各种环境(开发、测试、生产)。我应该做与 GitHub 插件项目类似的配置,部署它,然后在 Kubernetes 上找到这些 jar 并将它们移动到正确的位置?开发人员还对我说我们正在使用默认的conf。我不知道我们是否有broker.xml文件。

Jus*_*ram 6

在开始之前,有几个要点需要了解:

  • 使用 Artemis Prometheus Metrics Plugin 时,代理和应用程序都不会“发送”指标到 Prometheus。Prometheus 本身必须从代理检索或“抓取”指标。这就是该插件附带 servlet 的原因。该 servlet 公开了一个 HTTP 端点,Prometheus 可使用该端点来抓取指标。
  • Artemis Prometheus Metrics 插件是代理基础设施的一部分。它不应作为应用程序的一部分进行部署。插件的jar和war文件部署在broker上,并分别在broker.xml和中进行配置bootstrap.xml

Artemis Prometheus Metrics 插件使用两个模块提供与 Prometheus 的集成:

  • artemis-prometheus-metrics-plugin:这提供了实际的实现,org.apache.activemq.artemis.core.server.metrics.ActiveMQMetricsPlugin并将其与 Micrometer 和 Prometheus 依赖项一起打包在“uber”jar 中。

  • artemis-prometheus-metrics-plugin-servlet:这提供了一个包含简单 servlet 的 war 文件,该 servlet 可以部署到代理的嵌入式 Web 服务器,然后 Prometheus 可以使用该服务器来抓取指标。

克隆 Artemis Prometheus Metrics 插件存储库后,只需运行mvn install即可构建这两个模块。输出将在各自的target目录中。

构建模块后,请按照以下步骤部署和配置 Artemis Prometheus Metrics 插件。如果您有某种开发运营组来管理和配置您的代理,那么他们将遵循以下步骤。

  1. 复制artemis-prometheus-metrics-plugin/target/artemis-prometheus-metrics-plugin-<VERSION>.jar<ARTEMIS_INSTANCE>/lib

  2. 将其添加到您的<ARTEMIS_INSTANCE>/etc/broker.xml

    <metrics-plugin class-name="org.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin"/>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建目录<ARTEMIS_INSTANCE>/web

  4. 复制artemis-prometheus-metrics-plugin-servlet/target/metrics.war<ARTEMIS_INSTANCE>/web

  5. 将其添加到以下web元素中<ARTEMIS_INSTANCE>/etc/bootstrap.xml

    <app url="metrics" war="metrics.war"/>
    
    Run Code Online (Sandbox Code Playgroud)