zabbix6.4配置监控k8s 1.28集群

news2024/11/15 20:00:40

zabbix6.4配置监控rke2 rancher k8s集群

  • 1. 说明
    • 1.1 为什么要使用zabbix6.x监控k8s
    • 1.2 部署环境
    • 1.3 部署前的一些问题
  • 2. 使用helm3部署zabbix proxy和zabbix agent
    • 2.1 添加仓库
    • 2.2 修改配置
    • 2.3 部署
    • 2.4 确认部署情况
  • 3. 在zabbix web页面配置连接zabbix proxy
    • 3.1 添加Proxy代理
    • 3.2 k8s主机自动注册
    • 3.3 绑定另外三个模板
  • 4. 配置告警
  • 5. 部署完之后的一些问题
    • 5.1 zabbix proxy主动模式还是被动模式?
    • 5.2 zabbix监控,数据量的问题
    • 5.3 zabbix proxy镜像标签的问题
  • 参考:

1. 说明

1.1 为什么要使用zabbix6.x监控k8s

在选择Zabbix作为Kubernetes监控工具之前,我们问自己:“为什么我们选择使用Zabbix而不是Prometheus、Grafana和alertmanager呢?”

毕竟,它们已经成为云生态系统中的标准监控工具。我们决定对Zabbix的最低要求是,它在监控Kubernetes和云原生应用程序方面至少与Prometheus一样有效。

通过探索,我们得出结论, Zabbix满足(甚至超过)了这一最低要求。 Zabbix提供与Prometheus、alert manager和Grafana相似的指标和触发器,因为它们都使用相同的后端工具来实现这一点。

但是,Zabbix可以在一个产品中完成这一切,同时保持灵活性,并允许您监控几乎任何可以编写代码采集的内容。在应用程序监控方面,Zabbix可以将由Prometheus exporter和端点提供的Prometheus指标转换。

此外,由于Zabbix可以调用任何HTTP端点,因此它可以监控没有专用Prometheus端点的应用程序,而Prometheus不能做到这一点。

上面的内容来自:https://www.163.com/dy/article/J27DVM730538I0ZK.html

对我来说,因为自建的RKE2集群,在上面配置的是有prometheus+grafana+alertmanager监控告警体系的,但是官方开源的版本,在UI界面上没有可以配置钉钉、企业微信、飞书等告警手段的地方,要借助第三方Prometheus Alert组件,又感觉太过麻烦。

当然,也是自己有点菜。。。

在这里吐槽一下,rancher 2.4 2.5的开源版本,还支持直接配置钉钉、微信告警,到了2.6、2.7、2.8,就只有商业版支持了。开源版支持的告警类型,在国内,基本上用不上。

又尝试了夜莺系统,这个告警系统可以对接Pormetheus系统,可以只当做告警系统来用。

夜莺监控是一款开源云原生观测分析工具,采用 All-in-One 的设计理念,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成,提供开箱即用的企业级监控分析和告警能力。夜莺于 2020 年 3 月 20 日,在 github 上发布 v1 版本,已累计迭代 100 多个版本。
参考:https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/introduction/
尝试了之后,感觉夜莺监控k8s的文档还是不够完善,还是用zabbix可能更熟悉一些。

1.2 部署环境

首先要配置k8s集群和helm3,我使用的是RKE2部署的三节点集群,然后又配置的rancher。

k8s版本:v1.28.12+rke2r1
Rancher版本:v2.8.4
操作系统:Anolis OS 8.9
内核版本:4.19.91-26.an8.x86_64
zabbix helm版本:6.4(注意跟server版本最好要一致,或者至少大版本一致)
Helm版本:v3.15.3
zabbix server / web:6.x (注意:这个是配置在k8s集群之外的,是单独的主机)

docker镜像拉取的问题:

现阶段,由于docker官方镜像站在国内无法访问,所以需要先把需要的镜像先下载打包,然后进行导入,或者自己搭建镜像站。具体操作根据自己的情况来吧。
可以参考:https://blog.csdn.net/weixin_43092290/article/details/131004307

1.3 部署前的一些问题

在部署之前,我也搜了一些其他博客,发现写的有些是语焉不详,参考来做,并不能很顺利就成了。
比如,zabbix proxy使用主动模式还是被动模式,数据上报的流程,zabbix web页面怎么配置,自动发现怎么实现的等等,很多问题说的都不详细。
因为之前没有使用过zabbix proxy的配置方式,我还以为这种配置方式比较特殊,又用docker镜像重新搞了一遍,发现并没有那么复杂。
按照别人的博客来,一直卡住,折腾了好几天,反复对比,反复试,才把整个流程跑通。我有时候怀疑,一些博主成功之后,估计自己也没搞清楚为啥就成功了。。。
好了,不说那么多了,下面开始部署,我尽量写的详细一些,里面可能遇到的问题,为什么这样配置,也写一写。

2. 使用helm3部署zabbix proxy和zabbix agent

直接按照官方文档来就行

https://git.zabbix.com/projects/ZT/repos/kubernetes-helm/browse?at=refs%2Fheads%2Frelease%2F6.0

注意,这里面选择的版本,最好是跟zabbix server版本一致,至少大版本一致

2.1 添加仓库

添加helm仓库

helm repo add zabbix-chart-6.0  https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0

2.2 修改配置

输出默认配置文件

helm show values zabbix-chart-6.0/zabbix-helm-chrt > $HOME/zabbix_values.yaml

修改配置文件

# vim $HOME/zabbix_values.yaml

# zabbix proxy配置段
zabbixProxy:
  image:
    ## Tag of Docker image of Zabbix proxy
    tag: ubuntu-6.4-latest   #  镜像标签改了
  env:
   - name: ZBX_PROXYMODE
      value: 0  # 使用了默认的主动模式,active proxy
    ## Zabbix proxy hostname
    - name: ZBX_HOSTNAME
      value: zabbix-proxy-rke2  # 修改了proxy名称,当有多个proxy的时候,需要一个特别的名字来区分
    - name: ZBX_SERVER_HOST
      value: "192.168.0.1"     # 这个改成你单独部署的zabbix server的地址,如果没有使用10051,记得带上端口号,比如192.168.0.1:20051,但是不建议,一个主机上面还是不要部署太多服务

# zabbix agent配置段
zabbixAgent:
  ## Enables use of Zabbix agent
  enabled: true
  image:
    ## Tag of Docker image of Zabbix agent
    tag: ubuntu-6.4-latest  #  镜像标签改了
  env:
      ## Zabbix server host
    - name: ZBX_SERVER_HOST
      value: 0.0.0.0/0
      ## This variable is boolean (true or false) and enables or disables feature of passive checks. By default, value is true
    - name: ZBX_PASSIVE_ALLOW
      value: true
      ## This variable is boolean (true or false) and enables or disables feature of active checks
    - name: ZBX_ACTIVE_ALLOW
      value: false
	# 注意: zabbix agent的主被动模式不需要改!!!server的那个,直接用0.0.0.0/0配置即可,不要乱改了!!!

其实改的配置很少。我刚开始的时候跟着其他博主做,说要用被动模式,然后又改了其它参数,改来改去,越来越乱,怎么都不成。
说一下,为啥要改镜像标签

因为zabbix proxy镜像,如果用默认的,自动发现功能会失败!!!

报错如下:

Preprocessing failed for: {"error":"Error: cannot set cURL option CURLOPT_INTERFACE: A libcurl function was given a bad arg...1. Failed: cannot extract value from json by path "$.nodes..filternode": no data matches the specified path

用ubuntu-6.4-latest这个镜像就可以成功,应该是默认的镜像缺少了一些程序包、库。

2.3 部署

改好配置之后,进行部署

git clone https://git.zabbix.com/scm/zt/kubernetes-helm.git
cd kubernetes-helm
kubectl create namespace monitoring
helm install --enable-dns --plain-http zabbix . --dependency-update -f $HOME/zabbix_values.yaml -n monitoring

解释一下下面两个参数:

--enable-dns   enable DNS lookups when rendering templates
--plain-http   use insecure HTTP connections for the chart download

正常的官方的安装命令是

 helm install zabbix . --dependency-update -f $HOME/zabbix_values.yaml -n monitoring

但是会出现一个问题,由于helm安装的时候需要连接github.io这个域名,来获取国内kube-state-metrics这个组件的最新镜像与配置,但是国内连接github.io这个域名经常超时,所以很可能会失败。刚开始失败的时候,我用nslookup查了github.io的解析,修改了hosts,成功了几次,但是后面又不行了,所有加上了–enable-dns 这个参数,成功概率较大。
在这里插入图片描述
安装完之后如果要更新配置

helm upgrade --enable-dns --plain-http zabbix . --dependency-update -f $HOME/zabbix_values.yaml -n monitoring

在这一步安装中,还有一个问题,部署zabbix-kube-state-metrics时候,需要拉取

registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2

这个镜像,如果你只配置了docker.io的镜像站,还需要注意重新导出导入。我用的rke2集群,默认使用的containerd进行管理,还要用ctr命令,如果用的是docker管理,那样更简单一些。这也是需要注意的。

ln -sv /run/k3s/containerd/containerd.sock /run/containerd/containerd.sock
ctr -n=k8s.io i import kube-state-metrics.tar
ctr images ls 

参考:https://blog.csdn.net/jmmyhans/article/details/131913046

获取api token,这个等会儿配置自动发现的时候,需要用到

kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d

2.4 确认部署情况

查看相关的资源,是否部署成功

kubectl get svc -n monitoring
kubectl get pods -n monitoring
kubectl get all -n monitoring

完成部署之后,可以在rancher控制台,或者使用命令行查看相关的日志进行排错,确认服务配置正常。

删除部署

helm uninstall zabbix -n monitoring

3. 在zabbix web页面配置连接zabbix proxy

因为没办法直接用生产环境的zabbix server,我用docker镜像直接部署了zabbix web,zabbix server进行测试。
docker镜像下载地址:https://www.zabbix.com/cn/container_images
具体的部署方式就不在这里写了。但是生产环境不建议用容器镜像的方式进行部署。

用helm完成zabbix-agent和zabbix-proxy的部署后,我们可以看到3个zabbix-agent pod以demonset的方式,zabbix proxy只有一个,以普通deployment的方式运行。我在测试的时候,为了调试zabbix proxy被动模式,还加了10051的nodeport端口映射,最后没有用上。
在这里插入图片描述

3.1 添加Proxy代理

第一步,在“管理”–“Proxy”里面添加代理,如下
在这里插入图片描述
proxy名称:这个要跟helm value.yaml配置文件里面的name: ZBX_HOSTNAME value: zabbix-proxy-rke2,这个配置对应上,否则proxy会注册失败

proxy模式:主动模式,还是被动模式?

我用的主动模式。主动模式的时候,proxy代理地址一定要注意zabbix proxy和zabbix server的日志,如果有两者数据传输异常的情况,一定要及时更改这个代理地址的配置,为什么我用10.251.0.1,而不用rke集群中的node节点的ip,就是因为server端日志报错了,ip deny。而10.251.0.1这个地址对应的是zabbix server部署后的docker网桥地址。对,就是那么麻烦。而且如果你的zabbix proxy中间如果重新部署,pod漂移到了其它k8s节点,也需要改一下配置,否则server会有ip deny的日志,两边监控数据传输不了。
如果使用被动模式,那么需要加一个nodeport,或者是修改yaml配置文件,实现对zabbix proxy这个服务,对外可以访问,如下
在这里插入图片描述
192.168.0.10是其中一个k8s节点。

3.2 k8s主机自动注册

配置完成Proxy,且从proxy和server的日志,看到数据传输正常,日志正常,开始配置监控
在这一步配置的时候,可以先设置一个
在这里插入图片描述
注意看我上面的配置,上面是完成所有配置后的截图,其中有两个是没有关联主机接口的,但是监控项是最多的。其他主机都是自动发现的。实际的节点只有3个,但是因为我配置的是master节点,所以监控模板很多,有API的、Controller的、Kubelet的、Scheduler的,还有最基础的node的。
所以在最开始配置的时候,你要先选择一个主机,关联那几个监控模板。

首先配置第一个模版Kubernetes Kubelet by HTTP,添加主机,添加模板
在这里插入图片描述
其实这两个模版,好像哪个是第一个都行。我们先添加Kubernetes Kubelet by HTTP
注意配置的时候,要修改两个“宏”参数,否则获取不到主机
在这里插入图片描述
{$KUBE.API.TOKEN}这个参数,就是通过下面的命令获取的

kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d

这个参数,有些博主描述的很不清晰。。。搞得我刚开始的时候很迷惑
{$KUBE.KUBELET.URL}这个参数,默认的是https://localhost:10250,要修改成k8s某一节点的IP地址,比如

https://192.168.0.10:10250  # 192.168.0.10是三个节点其中一个,随便选一个节点就行

为什么要修改这个参数,因为localhost这个配置不通。
配置完成之后,注意观察proxy和server的日志,过一段时间就会根据自动发现规则,有新主机更新到“数据采集”–“主机”下面了
在这里插入图片描述
在这里插入图片描述

然后再配置Kubernetes nodes by HTTP,来自动发现k8s的所有节点,包括master、worker。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个k8s模板的node发现规则,默认绑定的是Linux by Zabbix agent监控模板,我稍微改了一下。因为默认的规则里面,监控的网卡如果用默认的,监控项就会把虚拟网卡也算上,太多了没必要。我改了一下网卡的过滤规则
在这里插入图片描述
不过这个实际上用默认的模板也可以,里面有一个参数可以设置
在这里插入图片描述
在这个里面修改,有两个参数

{$NET.IF.IFNAME.MATCHES}
{$NET.IF.IFNAME.NOT_MATCHES}

根据自己的实际情况进行修改。

3.3 绑定另外三个模板

下面绑定另外三个模板,为啥要分开绑定?因为把5个模板绑到一个上面会报错
在这里插入图片描述
所以新建了一个
在这里插入图片描述
这个模板里面也要修改一些参数
在这里插入图片描述
还是在这个位置改,我改了这四个变量。
改完之后生效,稍等一会儿,就会自动发现了。如果没有,再查一下proxy和server的日志
在这里插入图片描述

在生产环境中配置的时候,我截图里面的k8s-node,k8s-node-cluster,可以不配置,找其中一台主机加上相应的模板就可以了。

4. 配置告警

zabbix 6.x支持webhook告警了,但是我试了一下没成功,所以还是用脚本告警吧。
这种配置比较成熟了,就不在这里写了。

5. 部署完之后的一些问题

5.1 zabbix proxy主动模式还是被动模式?

其实都行。建议zabbix server独立部署,这种情况下,使用被动模式没有任何问题。使用主动模式,有一个很大的问题,就是那个IP可能会有变动,当zabbix proxy的pod异常,重新调度,你还要在web界面更新你配置。

5.2 zabbix监控,数据量的问题

看一下监控模板,监控项还是不少的,而且zabbix用的是关系型数据库,数据量累计之后可能会很大,所以最好改一下监控模板的历史留存。prometheus数据库,我一般也就保留最多14天的数据。当节点数达到几十个的时候,感觉mysql历史表很可能很快达到上亿条数据,查询速度就会越来越慢。

5.3 zabbix proxy镜像标签的问题

为啥我没有用默认的镜像标签,一个原因就是默认的标签里面缺少了curl的一些库,导致没办法自动发现。而且默认的是本地sqllite库,如果有条件,还是用mysql库更合适一些。因为每次proxy的pod重新部署,都会跟zabbix server同步一次数据,如果节点数比较多,数据量就会比较大,同步时间会比较长,影响监控数据传输。

参考:

zabbix容器镜像下载地址
https://www.zabbix.com/cn/container_images
zabbix helm安装包地址
https://git.zabbix.com/projects/ZT/repos/kubernetes-helm/browse?at=refs%2Fheads%2Frelease%2F6.4
Monitoring Kubernetes with Zabbix
https://blog.zabbix.com/monitoring-kubernetes-with-zabbix/25055/
Zabbix + Kubernetes
https://www.zabbix.com/cn/integrations/kubernetes

Zabbix6监控K8S(Zabbix-Proxy监控K8S)
https://blog.csdn.net/weixin_43092290/article/details/131004307
Zabbix实现监控Kubernetes
https://blog.csdn.net/qq_25854057/article/details/128885621

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2101246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kali (linux) 配置windows远程桌面(mstsc.exe)连接

Kali 安装 tightvncserver 一、软件说明 1) tightvncserver是一个轻量级,只能建立桌面,不能查看TTY7/TTY1正在显示的桌面,但x11vnc可以,相比x11vnc安全传输差一些。反之,x11 vnc:安全传输较好,但占用资源比 tightvncs…

PB级内存计算项目实战-富华保险

一、保险项目的基本介绍 项目名称:富华阳光人寿保险 1. 行业背景介绍 在保险行业中,最为核心技术就是精算,精算简单来说就是根据人的年龄来计算应交保费问题,通过精算,让整个保险行业更加专业化,精细化 从而取代之间依靠经验判断的方式 精算到目前为止,并不仅仅计算保费,主要包…

Leetcode 1143. 最长公共子序列 记忆化搜索 优化 C++实现

Leetcode 1143. 最长公共子序列 问题:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对…

一体化智能电动窗帘:开启智能生活新时尚

史新华 在科技不断进步的今天,人们对生活品质的追求也越来越高。电动窗帘作为智能家居的重要组成部分,以其便捷、智能、时尚的特点,正逐渐走进千家万户。 添加图片注释,不超过 140 字(可选) 一、电动窗帘…

KEYSIGHT U2020 X系列 USB峰值和均值功率传感器

​ _是德(KEYSIGHT) _ U2020 X系列 USB峰值和均值功率传感器 苏州新利通仪器仪表 U2020 X 系列功率传感器得到 Keysight BenchVue 软件的支持。使用 BenchVue 软件,您无需编程便可轻松控制功率计记录数据,并以各种形式显示测量结果。 只需将传感器…

AI大模型与量子纠缠理论的结合,以及相关应用思考

大家好,我是微学AI,今天给大家介绍一下AI大模型与量子纠缠理论的结合,以及相关应用思考。将大模型(LLM)的基本原理与量子纠缠理论相结合是一个高度抽象的概念。我们首先需要理解这两个领域的基本原理,然后探…

#ARM开发 笔记

课程介绍 ARM开发 --> Linux移植 --> 驱动开发 前后联系:ARM和系统移植为驱动开发学习做准备工作 所需知识:C语言基础及STM32需要的硬件知识 学习方法 学习流程、思想和解决问题的方法即可 知道驱动的基本框架以及基本开发要求 底层课程导学 接口技…

NTFS安全权限和文件共享

一.常见文件系统 NTFS 描述: Windows最常使用的文件系统(New Technology File System)微软公司开发的一种专用于 Windows 操作系统的文件系统。 特点: 效率性 可以提高磁盘的读写性能; 可靠性 加密文件系统访问控制列…

Vue组件:使用Prop实现父组件向子组件传递数据

1、Prop 基本用法 由于组件实例的作用域是孤立的,因此子组件的模板无法直接应用父组件的数据。如果想要通过父组件向子组件传递数据,就需要定义 Prop。Prop 是父组件用来传递数据的一个自定义属性,这样的属性需要定义在组件选项对象的 props…

并发集合(二):CopyOnWriteArrayList

1、CopyOnWriteArrayList介绍 CopyOnWriteArrayList 是一个线程安全的ArrayList。 CopyOnWriteArrayList 是基于Lock锁和线程副本的形式来保证线程安全的, 在写数据时,先获取Lock锁,然后复制一个副本,添加数据时&…

Delphi7实现Json对象的序列化与反序列化

在高版本的 Delphi 中,实现序列化和反序列化非常简单。然而,在 Delphi 7 中,这个过程仍然需要一些额外的努力。为了简化这个问题,我花了一些时间封装了一个支持序列化和反序列化的 JSON 解析库。 type{$M}TStartupParameters cla…

MySQL的服务器与客户端:架构解析与实践

文章目录 MySQL的服务器和客户端服务端处理客户端请求连接管理解析与优化查询缓存语法解析查询优化 存储引擎不同的存储引擎查看支持的存储引擎为不同的表设置存储引擎 MySQL是一个广泛使用的开源关系数据库管理系统,其核心架构由服务器端和客户端两大部分组成。本文…

9/3 链表-力扣160 、203、206

160.相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函…

CUDA-MODE课程笔记 第9课: 归约(也对应PMPP的第10章)

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第9课: 归约(也对应PMPP的第10章) 课程笔记 本节课的题目。 这节课的内容主要是 Chapter 10 of PMPP …

TCP连接重置,到底怎么回事?还是得网工大佬来分析!

来源:科来。 连接建立失败并不仅仅包含无响应问题,还有一种常见的情况,即RST(Reset)包的发送。RST包是TCP协议中用来进行“连接重置”的数据包,本文将围绕RST包进行详细展开讨论。 TCP连接中为何会有RST包…

VideoCrafter1:Open Diffusion models for high-quality video generation

https://zhuanlan.zhihu.com/p/677918122https://zhuanlan.zhihu.com/p/677918122 视频生成无论是文生视频,还是图生视频,图生视频这块普遍的操作还是将图片作为一个模态crossattention进unet进行去噪,这一步是需要训练的,svd除此之外,还将图片和noise做拼接,这一步,很…

【压测】ab命令

安装 sudo yum install httpd-toolssudo apt update sudo apt install apache2-utils介绍 ab:参数数量错误 用法:ab [选项] [http[s]://]主机名[:端口]/路径 选项包括: -n 请求次数 执行的请求数 -c 并发数 同时发起的多个请求数量 -t 时间…

springboot博客系统

基于springbootvue实现的博客系统 (源码L文ppt)4-031 4 系统设计 博客系统的整体结构设计主要分为两大部分:管理员和博主。他们的权限不同,于是操作功能也有所不同。整体结构设计如图4-2所示。 图4-2 系统结构图 4.3 数据库设…

HALCON与LabVIEW的联合编程 视觉与控制结合

HALCON与LabVIEW的联合编程在工业自动化和视觉检测领域中越来越受到重视。通过将HALCON的强大图像处理能力与LabVIEW的灵活控制功能相结合,工程师们可以开发出高效且精确的自动化系统。这种整合不仅提高了系统的整体性能,还简化了开发流程。本文将详细介…

前端DatePicker组件设置默认日期并限制可选日期范围

前言 在前端 element-ui 组件库中有一款组件叫做 DatePicker,是一个灵活选择日期的封装组件,它既能选择单个日期,也能选择一个日期范围(两个日期的组合),后者的应用场景主要有以下两类:1、作为…