【问题标题】:Sending metrics from ActiveMQ Artemis to Prometheus将指标从 ActiveMQ Artemis 发送到 Prometheus
【发布时间】:2021-06-02 14:04:54
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您对配置 Artemis Prometheus Metrics 插件有什么不了解的地方?当一个已经存在(并且可以工作)的时候,你为什么要创建自己的插件?
  • 另外,您使用的是什么版本的 ActiveMQ?
  • “默认配置”是什么意思?如果您没有broker.xml,代理是如何配置的?
  • 您的应用程序与 Prometheus 从代理收集指标的具体关系如何?一般来说,这两件事是 100% 独立的。
  • @JustinBertram ActiveMQ 版本它是 activemq-artemis:2.16-alpine-latest。 dev-ops 对我说,他在没有任何 broker.xml 文件的情况下运行 activemq 以查看它是否正常工作。对于第一个问题,我不太确定我是否理解,我应该克隆插件仓库,构建它并部署它在自述文件中所说的位置?我们想在 prometheus 中收集这些指标,以便在 grafana 中使用它们来生成一些图表和一些基于它们的警报。

标签: prometheus activemq-artemis


【解决方案1】:

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

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

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

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

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

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

构建模块后,请按照以下步骤部署和配置 Artemis Prometheus Metrics 插件。如果您有某种类型的 dev-ops 组来管理和配置您的代理,那么他们将遵循这些步骤。

  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"/>
    
  3. 创建目录&lt;ARTEMIS_INSTANCE&gt;/web

  4. artemis-prometheus-metrics-plugin-servlet/target/metrics.war 复制到&lt;ARTEMIS_INSTANCE&gt;/web

  5. 将此添加到&lt;ARTEMIS_INSTANCE&gt;/etc/bootstrap.xml 中的web 元素:

    <app url="metrics" war="metrics.war"/>
    

【讨论】:

  • 非常感谢您花时间向我解释这些事情。我对这种东西没有任何经验。我明天试试,希望一切顺利。
【解决方案2】:

artemis-prometheus-metrics-plugin 是一个不错的替代方案,但在具有同位复制的集群环境中效果不佳:

2021-11-16 12:15:46,374 WARN  [org.apache.activemq.artemis.core.server] AMQ222261: Failed to activate a backup: java.security.PrivilegedActionException: java.io.NotSerializableException: io.micrometer.prometheus.PrometheusMeterRegistry
    at java.base/java.security.AccessController.doPrivileged(Native Method) [java.base:]
    at org.apache.activemq.artemis.core.config.impl.ConfigurationImpl.copy(ConfigurationImpl.java:2328) [artemis-server-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.server.cluster.ha.ColocatedHAManager.activateReplicatedBackup(ColocatedHAManager.java:186) [artemis-server-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.server.cluster.ha.ColocatedHAManager.activateBackup(ColocatedHAManager.java:99) [artemis-server-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.server.impl.ColocatedActivation$1.handlePacket(ColocatedActivation.java:127) [artemis-server-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.server.cluster.ClusterController$ClusterControllerChannelHandler.handlePacket(ClusterController.java:469) [artemis-server-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.handlePacket(ChannelImpl.java:820) [artemis-core-client-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.doBufferReceived(RemotingConnectionImpl.java:428) [artemis-core-client-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:396) [artemis-core-client-2.19.0.jar:2.19.0]
    at org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl$DelegatingBufferHandler.bufferReceived(RemotingServiceImpl.java:688) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多