首页 > 解决方案 > 使用 JMX 监控 ksqlDB

问题描述

我已按照此页面上的说明进行操作: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 地址,但它们都不起作用。有没有人有办法解决吗?

标签: dockerapache-kafkadocker-composejmxksqldb

解决方案


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

  • 您需要 JMX 导出器。在这里下载

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

  • 将 JMX 导出器和 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 上可用(您可以指定任何其他空闲端口)。如果您想拥有一个好的仪表板,请使用这个


推荐阅读