首页 > 解决方案 > Kafka + 使用 prometheus 与 kafka cli 命令有冲突

问题描述

我们使用 Prometheus 已经有一段时间了,并且非常喜欢它。

关于什么是jmx-exporter 的几句话

jmx-exporter 是一个程序,它从基于 JVM 的应用程序(例如 Java 和 Scala)中读取 JMX 数据,并通过 HTTP 以 Prometheus 理解和可以抓取的简单文本格式将其公开。

那么让我们开始讨论我的问题吧……</p>

我们使用 jmx exporter 配置了 kafka,如下所示

export KAFKA_OPTS="-javaagent:/home/jmx_prometheus_javaagent-0.11.0.jar=7071:/home/kafka-2_0_0.yml"

此配置在 kakfa config 下的 ambari 中设置

设置配置后,我们重新启动所有 3 个 kafka 代理

我们检查jmx-exporter HTTP 服务器是否正在监听:

netstat -tlnp | grep 7071
tcp6       0      0 :::7071                 :::*                    LISTEN      63872/java

并抓取指标!

curl -s localhost:7071 | grep -i kafka | head
# HELP kafka_log_logcleanermanager_max_dirty_percent Attribute exposed for management (kafka.log<type=LogCleanerManager, name=max-dirty-percent><>Value)
# TYPE kafka_log_logcleanermanager_max_dirty_percent gauge
kafka_log_logcleanermanager_max_dirty_percent 0.0

直到现在一切都很酷

但是当我们开始使用 kafka 命令时,例如打印我们得到的主题列表:

/usr/hdp/current/kafka-broker/bin/kafka-topics.sh –zookeeper $zookeeper_server:2181 –list

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.net.BindException: Address already in use
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at sun.net.httpserver.ServerImpl.bind(ServerImpl.java:133)
        at sun.net.httpserver.HttpServerImpl.bind(HttpServerImpl.java:54)
        at io.prometheus.jmx.shaded.io.prometheus.client.exporter.HTTPServer.<init>(HTTPServer.java:145)
        at io.prometheus.jmx.shaded.io.prometheus.jmx.JavaAgent.premain(JavaAgent.java:49)
        ... 6 more
FATAL ERROR in native method: processing of -javaagent failed

注意 - 在我们添加以下行之前:

export KAFKA_OPTS="-javaagent:/home/jmx_prometheus_javaagent-0.11.0.jar=7071:/home/kafka-2_0_0.yml "

一切都好

所以有什么建议——如何从这一点开始解决这个问题?

更多参考 -

https://alex.dzyoba.com/blog/jmx-exporter

https://medium.com/@mousavi310/monitor-apache-kafka-using-grafana-and-prometheus-873c7a0005e2

标签: javaapache-kafkajmxprometheusambari

解决方案


在我找到的所有解决方案中,它帮助我将 KAFKA_OPTS 变量更改为 EXTRA_ARGS。但我仍然不明白冲突的原因。Kafka 在一个端口上运行,javaagent 在另一个端口上运行。但是,尽管如此,在创建主题时,还是会出现错误。我用来传递 Prometheus 指标的 Javaagent


推荐阅读