【问题标题】:Monitor ksqlDB with JMX使用 JMX 监控 ksqlDB
【发布时间】:2021-06-14 14:57:22
【问题描述】:

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

【问题讨论】:

  • 我对 KSQLDb 没有任何经验,但我提交了一个关于如何在 confluent repos 中的 docker-compose 演示中处理 JMX 的问题。请参阅此 PR,它为经纪人 github.com/confluentinc/cp-all-in-one/pull/44 修复了它。也许 KSQL DB 也受到相同问题的影响。
  • @kentor 谢谢你的建议。我已经为 ksqldb 尝试过类似的解决方案,因为它也有人建议过。不幸的是,它对我不起作用。
  • 你还没有添加 JMX 导出器,那/metrics 为什么要返回任何东西?

标签: docker apache-kafka docker-compose jmx ksqldb


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多