使用 JMX 监控 ksqlDB

Monitor ksqlDB with JMX

我已按照此页面上的说明进行操作:https://docs.ksqldb.io/en/latest/operate-and-deploy/monitoring/

所以这是我的 docker-compose:

的 ksqldb-server 部分
  ksqldb-server:
    image: confluentinc/ksqldb-server:0.15.0
    hostname: ksqldb-server
    container_name: ksqldb-server
    depends_on:
      - kafka
      - schema-registry
      - kafka-connect
    ports:
      - "8088:8088"
      - "1099:1099"
    environment:
      KSQL_LISTENERS: http://0.0.0.0:8088
      KSQL_BOOTSTRAP_SERVERS: kafka:29092
      KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: "true"
      KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: "true"
      KSQL_KSQL_SCHEMA_REGISTRY_URL: http://schema-registry:8081
      KSQL_KSQL_CONNECT_URL: http://kafka-connect:8083
      KSQL_KSQL_QUERY_PULL_METRICS_ENABLED: "true"
      KSQL_JMX_OPTS: > 
        -Djava.rmi.server.hostname=localhost
        -Dcom.sun.management.jmxremote
        -Dcom.sun.management.jmxremote.port=1099
        -Dcom.sun.management.jmxremote.authenticate=false
        -Dcom.sun.management.jmxremote.ssl=false
        -Dcom.sun.management.jmxremote.rmi.port=1099

我在同一个 docker-compose 文件中设置了 Prometheus,当我访问 {prometheus-url}/targets 时,我看到 Get "http://ksqldb-server:1099/metrics": EOF

我在研究期间已经尝试了很多配置,包括将 -Djava.rmi.server.hostname 更改为主机的 IP 地址或 ksqldb-server 的容器 IP 地址,但其中 none 有效。有人有解决办法吗?

jmxremote.port 值也不是适当的 Prometheus 目标;它适用于 jconsole、Visualvm 或其他 JMX 监控工具,如您链接到的文档所述

如果要使用 Prometheus,需要下载 JMX exporter agent JAR 并将其安装到容器中,并修改 JVM 参数以包含 agent+scraper port+mbeans 配置文件...

您也可以切换到使用 minikube 并应用 Confluent ksqlDB Helm Chart,does this for you

好吧,在再次处理这个话题六个月后,我设法设置了它。这遵循了 swist 在我的 GitHub issue 中建议的方法,我也是在创建此问题时创建的。

  • 您需要 JMX 导出器。下载它 here

  • 您需要一个 YAML 文件,告诉 JMX 导出器要导出哪些指标。你可以得到它here。如果您 对 ksqlDB 指标感兴趣,请删除所有其他模式,例如kafka 模式。

  • 将 JMX Exporter 和 YAML 文件放在要监视 ksqlDB 实例的每个节点上

  • 启动ksqlDB之前,创建环境变量KSQL_JMX_OPTS如下:

    export KSQL_JMX_OPTS="-Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.authenticate=false \ 
    -Dcom.sun.management.jmxremote.ssl=false \
    -Djava.util.logging.config.file=logging.properties \
    -javaagent:[BLUB]/jmx_prometheus_javaagent.jar=7010:ksqldb.yml"
    

    您需要在每次有新会话时创建此变量或永久创建它。 [BLUB] 是您的 JMX JAR 的绝对路径。

现在您可以 运行 ksqlDB 并且指标在端口 7010 可用(您可以指定任何其他空闲端口)。如果您想拥有一个好的仪表板,请使用此 one