使用Prometheus和Grafana监视Apache Kafka


您可以通过以下链接以PDF格式下载本文来支持我们。

将指南下载为PDF



我们的最终指南向您展示了如何在Ubuntu 20和CentOS 8上安装Kafka。在继续使用Kafka时,您很快就会发现您想监视Kafka服务器的内部。这对于跟踪生产者,消费者和其他指标(例如主题和分区)特别重要。此外,监视安装了Kafka的主机服务器对于跟踪资源并在资源失控之前保持关注非常有用。本指南重点介绍如何使用熟悉的工具Prometheus和Grafana来监控Kafka,以满足您的近期需求。

设置先决条件

为此,您需要一些已经启动并运行的软件。首先,您需要一个Kafka集群。请参阅下面的指南。

在Ubuntu上安装和配置Apache Kafka

在CentOS 8上使用CMAK安装和配置Apache Kafka

另一个要求是Prometheus设置。如果您没有安装Prometheus,请不用担心,我们已经有一个漂亮的指南来帮助您快速安装。按照《 Prometheus指南》中的安装说明进行安装。

在Ubuntu上安装Prometheus服务器| Debian

如何在RHEL 8 / CentOS 8上安装Prometheus

接下来,您还需要运行Grafana。如果您没有安装Grafana,我们还有另一本指南可供分类。根据Grafana安装方法运行Grafana。

如何在CentOS 7上安装Grafana 6

如何在CentOS 8 / RHEL 8上安装Grafana

在Ubuntu上安装Grafana | Debian

步骤1:下载Prometheus JMX导出器

Prometheus是功能强大且流行的开源时间序列工具和数据库,用于存储和发布度量标准和统计信息。您可以在诸如Grafana之类的工具中将发布的数据用作数据源,以创建精美而有见地的图形和图表,从而提高应用程序和服务器的可见性。由于Apache Kafka是使用Java开发的,因此需要Java导出程序来抓取(提取)指标,以便Prometheus可以使用,存储和发布。

Prometheus导出器用于提取数据指标并将其导出到Prometheus实例。这些导出器之一是Java管理扩展(JMX)导出器,它专​​注于Java应用程序。这允许开发人员以Prometheus理解的标准方式发布Java应用程序的度量标准,统计信息和基本操作。因此,下载并安装Prometheus导出器,以便可以获取Kafka指标。访问 Mavens Prometheus JMX导出器存储库 获取jar文件。在服务器上,您可以使用wget或curl进行下载,如下所示:

cd ~
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.13.0/jmx_prometheus_javaagent-0.13.0.jar

下载JMX导出程序后,将其复制到Kafka的lib目录中,该目录包含jar文件。在上一指南中,您将Kafka文件复制到了/ usr / local / kafka-server /目录。因此,将jmx_prometheus_javaagent jar文件复制到/ usr / local / kafka-server / libs /。找出Kafka的主目录在哪里。有一个libs目录。

sudo cp jmx_prometheus_javaagent-0.13.0.jar /usr/local/kafka-server/libs/

第2步:设置导出器

接下来,您需要配置JMX导出器以知道要从Kafka中提取什么。为了简要说明这一点,配置是规范表达式的集合,这些规范表达式命名和过滤Prometheus度量。感谢Prometheus,这里有一个示例配置 该GitHub存储库..此设置使用kafka-2_0_0.yml示例配置。

$ cd /usr/local/kafka-server/config/
$ sudo nano sample_jmx_exporter.yml

将内容复制到Kafka主目录内config目录中的文件中。

lowercaseOutputName: true

rules:
# Special cases and very specific rules
- pattern : kafka.server<>Value
  name: kafka_server_$1_$2
  type: GAUGE
  labels:
    clientId: "$3"
    topic: "$4"
    partition: "$5"
- pattern : kafka.server<>Value
  name: kafka_server_$1_$2
  type: GAUGE
  labels:
    clientId: "$3"
    broker: "$4:$5"
- pattern : kafka.coordinator.(w+)<>Value
  name: kafka_coordinator_$1_$2_$3
  type: GAUGE

# Generic per-second counters with 0-2 key/value pairs
- pattern: kafka.(w+)<>Count
  name: kafka_$1_$2_$3_total
  type: COUNTER
  labels:
    "$4": "$5"
    "$6": "$7"
- pattern: kafka.(w+)<>Count
  name: kafka_$1_$2_$3_total
  type: COUNTER
  labels:
    "$4": "$5"
- pattern: kafka.(w+)<>Count
  name: kafka_$1_$2_$3_total
  type: COUNTER

- pattern: kafka.server<>([a-z-]+)
  name: kafka_server_quota_$3
  type: GAUGE
  labels:
    resource: "$1"
    clientId: "$2"

- pattern: kafka.server<>([a-z-]+)
  name: kafka_server_quota_$4
  type: GAUGE
  labels:
    resource: "$1"
    user: "$2"
    clientId: "$3"

# Generic gauges with 0-2 key/value pairs
- pattern: kafka.(w+)<>Value
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    "$6": "$7"
- pattern: kafka.(w+)<>Value
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
- pattern: kafka.(w+)<>Value
  name: kafka_$1_$2_$3
  type: GAUGE

# Emulate Prometheus 'Summary' metrics for the exported 'Histogram's.
#
# Note that these are missing the '_sum' metric!
- pattern: kafka.(w+)<>Count
  name: kafka_$1_$2_$3_count
  type: COUNTER
  labels:
    "$4": "$5"
    "$6": "$7"
- pattern: kafka.(w+)<>(d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    "$6": "$7"
    quantile: "0.$8"
- pattern: kafka.(w+)<>Count
  name: kafka_$1_$2_$3_count
  type: COUNTER
  labels:
    "$4": "$5"
- pattern: kafka.(w+)<>(d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    "$4": "$5"
    quantile: "0.$6"
- pattern: kafka.(w+)<>Count
  name: kafka_$1_$2_$3_count
  type: COUNTER
- pattern: kafka.(w+)<>(d+)thPercentile
  name: kafka_$1_$2_$3
  type: GAUGE
  labels:
    quantile: "0.$4"

保存文件,然后继续下一步。

步骤3:将Kafka代理配置为使用JMX导出器

到目前为止,我们已经具备开始提取Kafka指标所需的一切。剩下的就是将JMX导出器链接到Kafka代理。让我们立即完成它,不要拖延。打开Kafka Broker服务器启动脚本,并将JMX设置添加到文件末尾,如下所示。所有脚本都位于Kafka主文件夹内的bin目录中。

$ cd /usr/local/kafka-server/bin/
$ sudo vim kafka-server-start.sh

#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

if [ $# -lt 1 ];
then
        echo "USAGE: $0 [-daemon] server.properties [--override property=value]*"
        exit 1
fi
base_dir=$(dirname $0)

if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then
    export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"
fi

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi

EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}

COMMAND=$1
case $COMMAND in
  -daemon)
    EXTRA_ARGS="-daemon "$EXTRA_ARGS
    shift
    ;;
  *)
    ;;
esac

exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "[email protected]"

### ADD THE LINE BELOW ###

export KAFKA_OPTS=' -javaagent:/usr/local/kafka-server/libs/jmx_prometheus_javaagent-0.13.0.jar=7071:/usr/local/kafka-server/config/sample_jmx_exporter.yml'

如果您使用的是systemd,请将以下行添加到kafka的systemd文件中。 [Service] 节为环境:如下图:

[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
##Add the line below
Environment="KAFKA_OPTS=-javaagent:/usr/local/kafka-server/libs/jmx_prometheus_javaagent-0.13.0.jar=7075:/usr/local/kafka-server/config/sample_jmx_exporter.yml"
ExecStart=/usr/local/kafka-server/bin/kafka-server-start.sh /usr/local/kafka-server/config/server.properties
ExecStop=/usr/local/kafka-server/bin/kafka-server-stop.sh
Restart=on-abnormal

将行添加到kafka-server-start.sh脚本的末尾或systemd文件后,重新启动Kafka代理。

sudo systemctl restart kafka.service

检查是否存在已配置的端口,以查看服务是否已启动。如果您正在运行防火墙,而Prometheus服务器在另一台服务器上,则应考虑允许访问此端口。

$ sudo ss -tunelp | grep 7075

tcp    LISTEN     0      3      [::]:7075    [::]:*   users:(("java",pid=31609,fd=100)) uid:1000 ino:5391132 sk:ffff977c74f86b40 v6only:0 <->

允许防火墙端口

----Ubuntu----
$ sudo ufw allow 7075

----CentOS----
$ sudo firewall-cmd --permanent --add-port=7075/tcp
$ sudo firewall-cmd --reload

打开浏览器,并指定服务器和端口的IP或FQDN。 http://[IP or FQDN]:7075。显示如下所示的数据指标。

好东西! JMX导出器正在按预期工作。接下来,将发布的数据添加到Prometheus。

步骤4:将Kafka数据添加到Prometheus

登录到Prometheus服务器,并将此新源配置为数据目标。如果按照以下指南在Debian上安装了Prometheus | Ubuntu或RHEL 8 |对于CentOS 8,其配置文件位于/etc/prometheus/prometheus.yml中。请找到配置文件,打开并编辑它,如下所示

$ sudo vim /etc/prometheus/prometheus.yml

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=` to any timeseries scraped from this config.

##### CHANGE THE JOB NAME TO KAFKA AS BELOW#######

  - job_name: 'kafka'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

#####CHANGE THE TARGET TO THE IP AND PORT OF JMX SERVICE JUST INSTALLED#######
    static_configs:
    - targets: ['10.38.83.154:7075']

您可以看到该目标已成功添加到Prometheus Web界面中。在浏览器中打开并单击 状态>目标..如果添加成功,将显示如下图所示。

使用Prometheus和Grafana监视Apache Kafka

状态是 “向上”

使用Prometheus和Grafana监视Apache Kafka

到目前为止很好。然后使用Prometheus保存为Grafana的数据源的数据,以使度量以样式显示。

第5步:将Kafka指标添加到Grafana

现在,我们处于最佳状态。在这里,我们将Prometheus添加为数据源,并使用精美的图形和图表可视化所有内容。登录到Grafana Web界面,然后执行以下步骤:如果您没有安装Grafana,请立即参考以下指南。

如何在CentOS 8 / RHEL 8上安装Grafana

在Ubuntu上安装Grafana | Debian

如何在CentOS 7上安装Grafana

添加数据源

在Grafana的网络界面中,点击设置齿轮图标,然后点击数据源下拉列表选项。

使用Prometheus和Grafana监视Apache Kafka

这将打开“数据源”菜单,您可以在其中添加更多内容。点击“添加数据源“标签

使用Prometheus和Grafana监视Apache Kafka

可以想象,选择 普罗米修斯 这是因为它是先前配置的。

使用Prometheus和Grafana监视Apache Kafka

选择Prometheus数据源后,您需要告诉Grafana Proftheus服务器的位置。在网址旁边输入一个漂亮的名称以及运行Prometheus的IP和端口。

使用Prometheus和Grafana监视Apache Kafka

您可以添加更多 抓取间隔,查询超时HTTP 方法。之后,”保存并测试“按钮。如果一切顺利,您将看到绿色消息。如果出现错误,请确保Prometheus服务器正在运行且可访问。如果您在防火墙后面,请打开端口。

使用Prometheus和Grafana监视Apache Kafka仪表板导入

添加数据源后,添加一个仪表板以可视化数据源的内容。打开Grafana + 选择一个按钮 进口 因为它使用在中创建的仪表板 健壮的知觉..它的ID是721

使用Prometheus和Grafana监视Apache Kafka

在导入页面上发布ID 721 下一个”加载“按钮。

使用Prometheus和Grafana监视Apache Kafka

在下一页要求输入名称时,您需要选择在页面底部的下拉列表中添加的数据源。完成后,进口

使用Prometheus和Grafana监视Apache Kafka

您应该对指标有个很好的了解,如下所示。

使用Prometheus和Grafana监视Apache Kafka

结论

现在,Gafana可以正确显示Kafka指标,并允许您更深入地查看主题和其他对象。我们期待着与您的合作。希望您的向导能为您提供帮助。我们要感谢本指南中用来改善开发人员和管理员生活的所有工具作者。请参阅以下其他与此类似的指南。

在RHEL 8 / CentOS 8上安装和配置Telegraf

将Prometheus部署到EKS Kubernetes集群

如何在Debian 10(Buster)上安装Prometheus和node_exporter

使用Prometheus和Grafana监控Etcd集群

在5分钟内用Prometheus和Grafana监视Redis服务器

在5分钟内使用Prometheus和Grafana监视Linux服务器性能

如何在5分钟内使用Prometheus和Grafana监视Apache Web服务器

使用Prometheus和Grafana监视BIND DNS服务器


您可以通过以下链接以PDF格式下载本文来支持我们。

将指南下载为PDF



Sidebar