- Kafka集群的安装与项目架构介绍。
- JMX Exporter的安装过程
- Prometheus的安装过程
- Grafana及其仪表盘
- 如何在Grafana中设置告警
在这个项目中,我们将介绍如何可视化Kafka指标,如Kafka主题数量、Kafka内存使用情况和分区大小。我们将使用一个包含3个代理(broker)的Kafka集群。我们将使用JMX Exporter和Prometheus来实现监控,并配置**prometheus.yml**
和**Kafka指标.yml**
文件,设置Grafana仪表板和告警规则,以便进行高效的监控。
Kafka 搭建非常简单。你可以查看我在 GitHub 上的仓库,了解如何使用 Docker 设置一个包含三个代理的 Kafka 集群的说明。此外,你也可以参考 Dockerfile 在任意位置安装它。由于我们的 Kafka 代理运行在基于 Ubuntu 的 OpenJDK 镜像上,你可以参考 Dockerfile,在任何虚拟机或实例上设置 Kafka 代理。
安装Kafka集群:
https://github.com/mcagriaktas/kafka-docker-setup/tree/main/kafka_3_8_0_KRaft_3_broker
来看一下项目架构吧:
2. JMX 导出器安装指南在搭建您的Kafka集群时,需要下载JMX Exporter JAR文件。
# 下载 JMX 导出器 jar 包
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.19.0/ \
jmx_prometheus_javaagent-0.19.0.jar -O /opt/jmx_exporter/jmx_prometheus_javaagent.jar
# 将下载的文件重命名为 jmx_prometheus_javaagent.jar
之后,你需要设置一个环境变量,这样在Kafka代理启动时,Kafka就知道JMX Exporter已经存在了。
设置环境变量KAFKA_OPTS,使用Java代理来导出Kafka指标到指定的端口和配置文件。
export KAFKA_OPTS="-javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent.jar=7071:/opt/jmx_exporter/kafka-metrics.yml"
然后,当你启动你的Kafka集群时,JMX Exporter也会随之启动。不过,JMX Exporter还需要知道哪个 YAML 文件指定了要启用的指标。
kafka-metrics.yml
lowercaseOutputName: true
lowercaseOutputLabelNames: true
rules:
# 以下是一些通过量指标
- pattern: "kafka.server<type=BrokerTopicMetrics,name=MessagesInPerSec,topic=(.+)><>OneMinuteRate" # 这是一个匹配消息每秒进入速率的模式
name: kafka_server_topic_messages_in_rate # 这个名字标识了消息进入速率的度量
type: GAUGE # 这个类型表示这是一个计量表
labels:
topic: "$1" # 其中 "$1" 代表从正则表达式中捕获的第一个分组
你可以在 GitHub 仓库中查看这些数据
https://github.com/oded-dd/prometheus-jmx-kafka/blob/master/README.md
该项目的README文件所在位置。
你可以通过 **localhost:7071/metrics**
查看 broker1 的指标日志。对于 Kafka broker2 和 Kafka broker3,我已经把它们设置在端口 7072 和 7073,你可以将端口改为 7072 或 7073 来查看其他 broker 的指标日志。
首先,你需要下载**.jar**
文件并安装,增加句子的流畅性。
PROMETHEUS_VERSION=2.45.0 # 设置Prometheus版本为2.45.0
# 下载指定版本的Prometheus二进制文件
wget https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
请注意: 您可以在我Dockerfile所在的GitHub仓库里找到它。请检查。
然后,你得启动Prometheus了。
exec ./prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus/data \
--web.enable-lifecycle \
--web.enable-admin-api \
--web.enable-remote-write-receiver \
--enable-feature=remote-write-receiver
正如你所见,我们需要创建一个 **config.file=/etc/prometheus/prometheus.yml**
文件来让 Prometheus 监听 JMX Exporter。
global:
scrape_interval: 15s
evaluation_interval: 15s
# 添加抓取超时时间
scrape_timeout: 10s
scrape_configs:
- job_name: 'kafka'
static_configs:
- targets:
- 'kafka1:7071' # Docker 容器名称,也可以使用 IP 地址。
- 'kafka2:7071'
- 'kafka3:7071'
# 添加重标记配置来处理时间同步
relabel_configs:
- source_labels: [__name__]
regex: '^.*
你可以访问 `**http://localhost:9090**` 查看 **Prometheus** 界面。
![](https://imgapi.imooc.com/67622d74090e2fe410510980.jpg)
## 4\. Grafana 安装及仪表板
有以下两种方法创建你的仪表板:
1. 创建自己的仪表板。
2. 导入现有的 `**.json**` 文件。
让我们先添加数据源,也就是 Prometheus。
![](https://imgapi.imooc.com/67622d7409574a6603710726.jpg)
我们将**Prometheus**设置成9090端口并给这个容器起了个名字。
1. 添加一个新的数据源。
2. 选择 Prometheus。
![](https://imgapi.imooc.com/67622d75094671ac09471136.jpg)
最后,你可以点击 ==> **保存并测试一下**。
![](https://imgapi.imooc.com/67622d79096a39e105080416.jpg)
如您可以看到,如果您点击`**导入**(点击此处)`,您可以轻松地通过一个`**.json**`文件来配置现有的仪表盘。您可以在GitHub上找到很多现成的仪表盘,这些现成的仪表盘可供您使用。
![](https://imgapi.imooc.com/67622d7a092cc42a10550541.jpg)
我在我的GitHub仓库里放了一个`**example.json**`文件。你可以轻松导入这个文件并看看仪表板。
**1-) 创建自己的仪表盘。**
首先,你需要知道如何添加指标。当你在代码中输入指标的名字时,你就能看到相应的设置。
![](https://imgapi.imooc.com/67622d7b0938a11a10120491.jpg)
也可以在 **Grafana** 中使用度量功能。
![](https://imgapi.imooc.com/67622d7d09190de610051262.jpg)
之后,你可以自定义设置你的仪表盘,并将其添加到面板。
你可能想知道,这个`**metric_name**`是从哪儿来的?
这只要在**Kafka**的**JMX Exporter**中设置一下,具体是在`kafka-metrics.yml`文件里。
![](https://imgapi.imooc.com/67622d7e09732cdc09330229.jpg)
**2-) 导入现有的仪表板的 JSON 文件。**
复制或导入 `**.json**` 文件:
![](https://imgapi.imooc.com/67622d81094c580310551170.jpg)
**这里有一个仪表盘的示例。**
![](https://imgapi.imooc.com/67622d82096798d510231507.jpg)
## **5\. 如何在Grafana中配置报警**
当你创建你的仪表板时,只需按下 `**Ctrl + K**` 并输入 **“警报规则。”** 然后,你就可以创建一个警报。只需要填好这三个部分就能设置最基本的警报。
![](https://imgapi.imooc.com/67622d83095b218110481644.jpg)
最后,只需创建一个 folder 和一个评估小组即可。
正如你所见,我使用 `**docker-compose stop kafka2**` 停止了 Kafka2,我们的警报触发了一个错误:
![](https://imgapi.imooc.com/67622d84099afa7009560505.jpg)
希望你的Kafka集群一直运行得顺畅顺利!😄
Cheers 朋友们平安!
action: keep
- job_name: 'prometheus'
static_configs:
- targets:
- 'localhost:9090' # 本地主机
You can check **http://localhost:9090**
to see the Prometheus UI.
There are two ways to create your dashboard:
-
Create your own dashboard.
- Import a
**.json**
file for an existing dashboard.
Let’s first add our data source, which means Prometheus.
We set our Prometheus to port 9090 and gave the container a name.
-
Add a new data source.
- Select Prometheus.
Finally, you can click ==> Save & Test.
As you can see, if you click **Import**
you can easily set an existing dashboard with a **.json**
file. You can find a lot of existing dashboards on GitHub.
I have placed an **example.json**
file in my GitHub repository. You can easily import the file and check the dashboard.
1-) Create your own dashboard.
Firstly, you need to understand how to add metrics. When you type your metric name in the code, you’ll see your settings.
You can also use the metrics function in Grafana.
After that, you can customize your dashboard and add it to a panel.
You might ask, where does the **metric_name**
come from?
This is simply set in the JMX Exporter in Kafka , specifically in the **kafka-metrics.yml**
file.
2-) Import a**.json**
file for an existing dashboard.
Copy or load the **.json**
file:
Here’s an example of the dashboard:
5. How to Set Alerthing in GrafanaWhen you create your dashboard, simply press **Ctrl + K**
and type “Alert Rule.” After that, you can create an alert. You only need to fill out three sections for a basic alert.
Lastly, just create a folder and an evaluation group.
As you can see, I stopped Kafka2 using **docker-compose stop kafka2**
, and then our alert rule triggered an error:
I hope your Kafka cluster will always be up and running smoothly! 😄
Cheers in peace everyone…
共同学习,写下你的评论
评论加载中...
作者其他优质文章