likes
comments
collection
share

strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

作者站长头像
站长
· 阅读数 11

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):github.com/zq2599/blog…

本篇概览

本文适合的读者

  • 第一种读者:对欣宸的实战系列有信心,打算按照本文去部署监控服务
  • 第二种读者:对官方资料存在疑问,寻求辅助信息加以对照
  • 第三中读者:按照官方资料操作,结果难以成功(例如grafana上的数据始终为空)
  • 这里提一下,本来欣宸也是按官方资料去部署监控的,然而遇到各种问题,要么服务启动失败,要么grafana没有数据,反复修改调整尝试后才部署成功并且数据正常,因此写下此文避免今后再次踩坑,也希望这点经验能给更多人提供有价值的参考,毕竟网上的strimzi类原创并不多,涉及监控的就更少了

重点问题需要先澄清

官方操作速看

  • 动手前快速浏览官方操作指导,对基本操作有个大概了解(自己遇到的问题也在此指出,为您把坑提前避开)
  • strimzi关于监控相关的资料链接如下图红色箭头,地址是:strimzi.io/docs/operat… strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  1. 执行kubectl apply -f kafka-metrics.yaml,这里面包含了Exporter(用于暴露指标),文件kafka-metrics.yaml可以在GitHub的发布包中找到

  2. 执行以下命令,生成名为prometheus-operator-deployment.yaml的文件

curl -s https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml | sed -e '/[[:space:]]*namespace: [a-zA-Z0-9-]*$/s/namespace:[[:space:]]*[a-zA-Z0-9-]*$/namespace: my-namespace/' > prometheus-operator-deployment.yaml
  1. 执行kubectl create -f prometheus-operator-deployment.yaml,完成prometheus-operator的部署
  2. 修改prometheus.yml文件,这里面是prometheus的配置信息,现在要修改的是namespace,改成您自己的
sed -i 's/namespace: .*/namespace: my-namespace/' prometheus.yaml
  1. 修改文件strimzi-pod-monitor.yaml,找到namespaceSelector.matchNames属性,改成自己的namespace(漏掉这一步就是致命问题,会导致grafana不出数据,我漏过...)
  2. 执行以下操作
kubectl apply -f prometheus-additional.yaml
kubectl apply -f strimzi-pod-monitor.yaml
kubectl apply -f prometheus-rules.yaml
kubectl apply -f prometheus.yaml
  1. 部署grafana
kubectl apply -f grafana.yaml
  • 上述步骤是对官方操作的简单介绍,接下来就是我这边逐步详细的操作过程,可以确保成功的那种,为了避免官方文件变化导致部署问题,相关文件我都存入了自己的仓库
  • 现在相信您对整个部署过程已经有了大致了解,接下来咱们开始吧

实际操作之一:创建命名空间

  • 这里就随意些吧,我的命名空间是aabbcc
kubectl create namespace aabbcc

实际操作之二:创建strimzi的资源

kubectl create -f 'https://strimzi.io/install/latest?namespace=aabbcc' -n aabbcc

实际操作之三:部署kafka+zookeeper+exporter

  • 执行以下命令,会下载一个名为kafka-metrics.yaml 的配置文件,并在kubernets创建文件中配置的资源,包括kafka集群及其exporter的部署(exporter的作用是向prometheus暴露监控数据),注意namespace
kubectl create -f 'https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/kafka-metrics.yaml?namespace=aabbcc' -n aabbcc
  • 等待容器启动完毕,如下图所示,kafka集群和exporter都已经就绪,接下来该部署prometheus了 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

实际操作之四:部署prometheus+grafana

  • 为了部署prometheus+grafana,这边要准备七个文件,接下来会详细说明
  • 首先是准备好prometheus-operator的资源文件,执行以下命令,注意将aabbcc改成您自己的namespace(因为文件bundle.yaml很大,导致此命令会耗时三分钟左右,请耐心等待)
curl –connect-timeout 300 -m 300 -s https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml | sed -e '/[[:space:]]*namespace: [a-zA-Z0-9-]*$/s/namespace:[[:space:]]*[a-zA-Z0-9-]*$/namespace: aabbcc/' > prometheus-operator-deployment.yaml
  • 执行完上面的命令后,在本地得到了名为prometheus-operator-deployment.yaml的文件,此文件是用来创建prometheus-operator的,稍后会用到
  • 记得打开文件prometheus-operator-deployment.yaml查看一下,如果里面内容为空(网络问题所致),就需要重新执行上一步操作,请务必要检查,因为太容易出错了!!!
  • 第二个文件是prometheus的资源文件,执行以下命令,注意将aabbcc改成您自己的namespace
curl -s https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/prometheus.yaml | sed -e 's/namespace: .*/namespace: aabbcc/' > prometheus.yaml
  • 执行完上面的命令后,在本地得到了名为prometheus.yaml的文件,此文件是用来创建prometheus的,稍后会用到
  • 第三个文件名为strimzi-pod-monitor.yaml,下载地址:gitee.com/zq2599/blog…
  • 第三个文件strimzi-pod-monitor.yaml下载后,要做的修改如下图黄色箭头所示,每个namespaceSelector.matchNames的值都要该成您自己的namespace,一共有四处,请务必要修改正确(我最初操作时grafana一直没有数据,最终发现是漏了这一步导致的) strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • 第四个文件名为grafana-service-nodeport.yaml,下载地址:gitee.com/zq2599/blog… ,这个是定义了外部访问grafana页面的端口,我这里配置的是31330端口,您可以按照自己的实际情况去修改
  • 另外还有三个文件,它们不需要做任何修改,直接下载到本地即可,下载命令如下
wget https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/prometheus-additional.yaml
wget https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/prometheus-rules.yaml 
wget https://gitee.com/zq2599/blog_download_files/raw/master/strimzi/prometheus/grafana.yaml
  • 至此,咱们本地一共生成了七个文件,这里用表格对其做说明,请检查确认,以免遗漏
编号文件名作用是否需要修改
1prometheus-operator-deployment.yaml创建prometheus-operator
2prometheus.yaml创建prometheus
3strimzi-pod-monitor.yamlprometheus采集pod指标的规则
4prometheus-additional.yaml可以在此增加prometheus的采集job
5prometheus-rules.yaml告警规则
6grafana.yaml创建grafana
7grafana-service-nodeport.yamlgrafana的服务配置文件,端口是31330
  • 至此,所有文件都准备好了,先执行以下命令创建prometheus-operator,再次提醒,检查prometheus-operator-deployment.yaml的内容,很有可能因为网络问题导致此文件为空,需要重新下载
kubectl create -f prometheus-operator-deployment.yaml
  • 执行以下命令完成prometheus和grafana的创建
kubectl apply -f prometheus-additional.yaml

kubectl apply -f strimzi-pod-monitor.yaml

kubectl apply -f prometheus-rules.yaml

kubectl apply -f prometheus.yaml

kubectl apply -f grafana.yaml

kubectl create clusterrolebinding kube-state-metrics-admin-binding \
--clusterrole=cluster-admin  \
--user=system:serviceaccount:default:prometheus-server

kubectl apply -f grafana-service-nodeport.yaml
  • 上述命令要注意的是:prometheus-operator-deployment.yaml文件太大了,不能用kubectl apply命令,只能用kubectl create命令
  • 至此,prometheus+grafana已部署完成,接下来咱们登录grafana,导入dashboard

实际操作之五:在grafana创建数据源

  • dashboard就是grafana上的各种监控图表,strimzi为我们提供了几个样例,咱们直接导入即可
  • 假设我的kubernetes宿主机的IP地址是192.168.0.1,那么grafana地址就是:192.168.0.1:31330
  • 打开页面后,grafana要求输入账号密码,默认的账号和密码都是admin
  • 登录后,点击下图黄色箭头位置,将prometheus设置为grafana的数据源 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • 类型选择prometheus strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • prometheus地址如下图黄色箭头所示http://prometheus-operated:9090,最后点击底部的Save & Test按钮,就完成了数据源的添加,接下来可以添加dashboard(图表)了 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

在grafana创建dashboard

  • 现在,咱们只需要在grafana上添加dashboard,就能在页面上监控kafka的各项数据了
  • 如下图,点击黄色箭头所指的Import按钮 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • 此时会出现导入dashboard的表单,咱们只要把strimzi提供的dashboard数据粘贴到下图黄色箭头所指区域即可 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • strimzi提供了丰富的dashboard配置,我已搜集好放在仓库中,地址:gitee.com/zq2599/blog… ,如下图,打开红框中的文件,将其内容复制到上图grafana页面中黄色箭头指向的位置 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • 注意选择数据源 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • 配置完成后,就能看到kafka监控信息了 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

验证

  • 接下来咱们生产和消费一些消息,看看grafana显示的数据是否符合预期
  • 执行以下命令,进入生产消息的交互模式,输入一些消息(每次回车都会发送一条)
kubectl -n aabbcc \
run kafka-producer \
-ti \
--image=quay.io/strimzi/kafka:0.32.0-kafka-3.3.1 \
--rm=true \
--restart=Never \
-- bin/kafka-console-producer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic
  • 生产消息的信息很快就在grafa图表中体现出来,如下图 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
  • 再开启一个控制台,执行以下命令消息消息
kubectl -n aabbcc \
run kafka-consumer \
-ti \
--image=quay.io/strimzi/kafka:0.32.0-kafka-3.3.1 \
--rm=true \
--restart=Never \
-- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
  • 数十秒后,grafana上就会看见消费消息的指标数据,如下图右侧 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

关于prometheus的存储

  • 细心的您可能会发现:prometheus采集的数据并没有存储在外部,而是存储在容器内部,这样一旦pod被杀,数据就会丢失,情况确实如此
  • prometheus的存储属于prometheus-operator邻域的配置,篇幅所限就不在本篇细说了,这里给出一些参考信息,您可以自己动手试试,如下图,在prometheus.yaml文件中,红色箭头所指位置可以添加pvc,这样就能使用当前kubernetes环境的pv了,grafana的存储配置亦是如此 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

kafka视图

  • 除了strimzi提供的grafana图表,我们还可以使用grabana官网上的kafka图标,最具代表性的应该是Kafka Exporter Overview,导入方法很简单,如下图,在导入表单上输入ID号7589即可(记得点击Load按钮,数据源继续选prometheus) strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

  • 此dashboard的效果如下 strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

  • 至此,strimzi中部署监控的实战已经完成,希望本篇能给您一些参考,助您顺利完成部署,欢迎您继续关注《strimzi实战》系列,接下来会解锁更多strimzi的神奇能力