java - 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
解决方案
在我找到的所有解决方案中,它帮助我将 KAFKA_OPTS 变量更改为 EXTRA_ARGS。但我仍然不明白冲突的原因。Kafka 在一个端口上运行,javaagent 在另一个端口上运行。但是,尽管如此,在创建主题时,还是会出现错误。我用来传递 Prometheus 指标的 Javaagent
推荐阅读
- database - 我可以在颤振应用程序中保存本地磁盘数据库吗?文档目录在哪里创建路径?
- google-cloud-platform - How to set write preference when creating a BigQuery Data Transfer through command line
- mongodb - 使用 Jason 在 Phoenix 中编码 ObjectId
- flutter - 无法在 Windows 上运行颤振应用程序
- java - 用 Java 读出嵌套的 JSONObject。不要获取内部 JSONObject
- python-3.x - 在Python中查找一定半径内的纬度和经度对
- flutter - 在flutter项目中初始化grpc
- gerrit - 如何在 Gerrit 中删除注释引用
- javascript - Typescript 泛型类型 - 类型“keyof T1”不能用于索引类型
- mongodb - 选择引用具有某些特定属性的另一行的行