Zabbix 监控 Kubernetes 集群
Zabbix 监控 Kubernetes 集群
Zabbix作为一个成熟且功能强大的监控系统,被许多企业广泛采用。它能够对各种IT基础设施进行全面的监控,包括服务器、网络设备、应用程序等。而将Zabbix与Kubernetes结合,可以实现对Kubernetes集群的全面监控,从而提高集群的可观察性和管理效率。
Zabbix 的最低标准是它在监控 Kubernetes 和云原生应用程序方面与 Prometheus 一样有效。
Zabbix 提供与 Prometheus、警报管理器和 Grafana for Kubernetes 类似的指标和触发器,因为它们都使用相同的后端工具来执行此操作。然而,Zabbix 可以在一个产品中做到这一点,同时仍然保持灵活性,并允许您监视几乎任何您可以编写代码来收集的内容。关于应用程序监控,Zabbix 可以转换 Prometheus 导出器和端点提供给它的 Prometheus 指标。此外,由于 Zabbix 可以调用任何 HTTP 端点,因此它可以监视没有专用 Prometheus 端点的应用程序,这与 Prometheus 不同。
准备kubernets集群
root@node40:~# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node40 Ready control-plane 60d v1.29.3 192.168.72.40 <none> Ubuntu 22.04.2 LTS 5.15.0-105-generic containerd://1.7.15
node41 Ready <none> 60d v1.29.3 192.168.72.41 <none> Ubuntu 22.04.2 LTS 5.15.0-76-generic containerd://1.7.15
node42 Ready <none> 60d v1.29.3 192.168.72.42 <none> Ubuntu 22.04.2 LTS 5.15.0-76-generic containerd://1.7.15
准备可用的默认storageclass存储
root@node40:~# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
openebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer false 60d
部署zabbix-server
项目地址:https://github.com/zabbix-community/helm-zabbix
本示例在kubernetes集群中部署zabbix-server。
添加helm仓库
helm repo add zabbix-community https://zabbix-community.github.io/helm-zabbix
安装zabbix-server
helm upgrade --install zabbix-server zabbix-community/zabbix \-n monitoring --create-namespace \--set zabbixWeb.service.type=NodePort \--set postgresql.persistence.enabled=true
查看创建的pods
root@kube001:~# kubectl -n monitoring get pods
NAME READY STATUS RESTARTS AGE
zabbix-server-postgresql-0 1/1 Running 0 47m
zabbix-server-zabbix-server-6fd6c44b57-hrdlx 2/2 Running 0 47m
zabbix-server-zabbix-web-79d84c458b-pwt7c 1/1 Running 0 47m
zabbix-server-zabbix-webservice-b8765d785-rj6g2 1/1 Running 0 47m
查看创建的service
root@kube001:~# kubectl -n monitoring get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
zabbix-server-postgresql ClusterIP 10.96.1.32 <none> 5432/TCP 48m
zabbix-server-zabbix-server ClusterIP 10.96.3.147 <none> 10051/TCP,10052/TCP 48m
zabbix-server-zabbix-web NodePort 10.96.2.122 <none> 80:31080/TCP 48m
zabbix-server-zabbix-webservice ClusterIP 10.96.0.126 <none> 10053/TCP 48m
查看为postgresql创建的pvc持久卷申请
root@node40:~# kubectl -n monitoring get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
postgresql-data-zabbix-server-postgresql-0 Bound pvc-21a8a49b-cc14-4d62-b08c-ba3a4c20ea8b 5Gi RWO openebs-hostpath <unset> 47s
浏览器访问zabbix-web,通过NodePort service 端口在集群外访问,默认账号密码为Admin/zabbix
http://192.168.72.40:31080
web访问如下:
部署zabbix-agent
项目地址:https://git.zabbix.com/projects/ZT/repos/kubernetes-helm/browse
官方博客:https://blog.zabbix.com/monitoring-kubernetes-with-zabbix/25055/
helm chart地址:https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/7.0/
Zabbix 通过收集 Kubernetes API 和 kube-state-metrics 公开的指标来监控 Kubernetes。使用 Zabbix 提供的 Helm Chart 将监视集群所需的组件安装在集群内。 Helm Chart 包括作为守护进程集安装的 Zabbix 代理,用于监视每个节点上的本地资源和应用程序。还安装了Zabbix代理来收集监控数据并将其传输到外部Zabbix服务器。
只有 Zabbix proxy 需要访问 Zabbix server,而代理可以将数据发送到安装在与每个代理相同的命名空间中的代理。集群角色允许 Zabbix 通过 Kubernetes API 访问集群中的资源。虽然可以修改集群角色来限制授予 Zabbix 的权限,但这将导致某些项目不受支持。如果您想通过 Zabbix 充分利用 Kubernetes 监控,我们建议保持不变。
Zabbix Helm Chart 将 kube-state-metrics 项目安装为依赖项。您可能已经熟悉 Kubernetes 组织下的这个项目,该项目根据 Kubernetes 资源的当前状态生成 Prometheus 格式的指标。此外,如果您有使用 Prometheus 监控集群的经验,您可能已经安装了它。如果是这种情况,您可以指向此部署,而不是安装另一个部署。
添加helm仓库
helm repo add zabbix-chart-7.0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/7.0
安装zabbix-agent
helm upgrade --install zabbix-agent zabbix-chart-7.0/zabbix-helm-chrt \-n monitoring --create-namespace \--set zabbixProxy.enabled=true \--set zabbixProxy.env[0].name=ZBX_HOSTNAME \--set zabbixProxy.env[0].value=zabbix-proxy \--set zabbixProxy.env[1].name=ZBX_SERVER_HOST \--set zabbixProxy.env[1].value=zabbix-server-zabbix-server \--set zabbixAgent.enabled=true
查看创建的pods
root@node40:~# kubectl -n monitoring get pods
......
NAME READY STATUS RESTARTS AGE
zabbix-agent-9dxl6 1/1 Running 0 43m
zabbix-agent-kube-state-metrics-67f68d9db9-fpw79 1/1 Running 0 43m
zabbix-agent-svv4l 1/1 Running 0 43m
zabbix-agent-wq2dt 1/1 Running 0 43m
zabbix-proxy-58bcbcf55c-g44q6 1/1 Running 0 39m
查看创建的service
......
root@node40:~# kubectl -n monitoring get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
zabbix-agent-kube-state-metrics ClusterIP 10.96.2.212 <none> 8080/TCP 43m
zabbix-agent-zabbix-helm-chrt-agent ClusterIP 10.96.1.235 <none> 10050/TCP 43m
zabbix-agent-zabbix-helm-chrt-proxy ClusterIP 10.96.2.129 <none> 10051/TCP 43m
需要从我们的 zabbix 服务器中提取对 api 服务器进行身份验证所需的 zabbix 服务帐户令牌。将此命令的输出保存在某处,因为我们需要它来配置 zabbix UI。
kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d
配置zabbix-web
添加代理
我们将通过管理 -> 代理来添加代理:
- 单击创建代理。因为默认情况下这是一个主动代理,所以我们只需要指定代理名称。如果您没有对 helm 图表进行任何更改,则默认为 zabbix-proxy。如果您想以不同的方式命名,可以在 helm 图表中更改代理的环境变量 zbx_hostname。我们暂时将其保留为默认值。您将输入该名称,然后单击“添加”。几分钟后,您将开始看到它说代理已被看到。
- 创建一个Host Group,放置与Kubernetes相关的主机。对于这个例子,我们创建一个,我们将其称为 Kubernetes。
- 前往配置下的主机页面,然后单击创建主机。第一个主机将收集与监控 Kubernetes 节点相关的指标,我们将使用 Zabbix 低级发现来发现节点并创建新主机。
- 将此主机命名为 Kubernetes Nodes。我们还将将此主机分配给我们创建的 Kubernetes 主机组,并通过 HTTP 附加模板 Kubernetes 节点。
- 将“Monitored by proxy”行更改为之前创建的代理,称为 zabbix-proxy。
- 单击“宏”选项卡并选择“继承和宿主宏”。您应该能够看到可能设置为影响集群中监视内容的所有宏。在这种情况下,我们需要更改前两个宏。第一个 {KUBE.API.ENDPOINT.URL} 应设置为 Kubernetes API 端点。在我们的例子中,我们可以将其设置为我之前提到的:default.svc.cluster.local:443/api。接下来,应将令牌设置为之前从命令行检索到的值。
- 点按添加。几分钟后,您应该开始在最新数据页上看到数据,并在代表每个节点的主机页上看到新主机。
zabbix-web创建proxy,选择管理–Proxy
确认proxy 状态为online
添加主机
新建主机组,选择数据采集–主机群组
zabbix-web创建host,选择数据采集–主机,在Templates/Applications
中勾选Kubernetes nodes by HTTP
模板。
配置宏
您还需要 Kubernetes API 端点。在大多数情况下,您将使用已安装的代理,而不是直接使用服务器或集群外部的代理。如果是这种情况,您可以使用 API 的服务 DNS。我们应该能够通过指向 https://kubernetes.default.svc.cluster.local:443 来访问它。
查看kubernetes监控指标,选择监测–最新数据
创建附加主机
现在让我们创建另一个主机来表示通过 Kubernetes API 和 kube-state-metrics 端点可用的指标。
- 再次单击“创建主机”,将该主机命名为“Kubernetes Cluster State”,并再次将其添加到 Kubernetes 组中。
- 我们还通过 HTTP 附加 Kubernetes 集群状态模板。同样,我们将选择之前创建的代理。
- 假设 Helm Chart 安装过程中没有进行任何其他更改,我们现在可以添加该主机。
几分钟后,您应该会收到与集群状态相关的指标,包括代表每个节点上 kubelet 的主机。
相关文章:

Zabbix 监控 Kubernetes 集群
Zabbix 监控 Kubernetes 集群 Zabbix作为一个成熟且功能强大的监控系统,被许多企业广泛采用。它能够对各种IT基础设施进行全面的监控,包括服务器、网络设备、应用程序等。而将Zabbix与Kubernetes结合,可以实现对Kubernetes集群的全面监控&am…...

网上预约就医取号系统
摘 要 近年来,随着信息技术的发展和普及,我国医疗信息产业快速发展,各大医院陆续推出自己的信息系统来实现医疗服务的现代化转型。不可否认,对一些大型三级医院来说,其信息服务质量还是广泛被大众所认可的。这就更需要…...

概念描述——TCP/IP模型中的两个重要分界线
TCP/IP模型中的两个重要分界线 协议的层次概念包含了两个也许不太明显的分界线,一个是协议地址分界线,区分出高层与低层寻址操作;另一个是操作系统分界线,它把系统与应用程序区分开来。 高层协议地址界限 当我们看到TCP/P软件的…...

ECharts,拿来吧你!
作为一名前端程序员,在日常的项目开发中,我们会遇到各种各样的图表设计,那么,为了提高我们的开发效率,ECharts便应运而生了!它提供了丰富的图表样式和多浏览器支持的API接口,不仅能够将静态的数据转换为图表,还可以动态的请求后端传递过来的数据,将其以可视化的形式展现给用户,…...

【DICOM】BitsAllocated字段值为8和16时区别
一、读取dicom C# 使用fo-dicom操作dicom文件-CSDN博客 二、DICOM中BitsAllocated字段值为8和16时区别 位深度差异: 当BitsAllocated为8时,意味着每个像素使用8位来表示其灰度值。这允许每个像素有2^8256种不同的灰度等级,适用于那些不需要高…...

【MySQL】 -- 事务
如果对表中的数据进行CRUD操作时,不加控制,会带来一些问题。 比如下面这种场景: 有一个tickets表,这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候,将票出售了&#x…...

c#调用c++生成的dll,c++端使用opencv, c#端使用OpenCvSharp, 返回一张图像
c代码: // OpenCVImageLibrary.cpp #include <opencv2/opencv.hpp> #include <vector> extern "C" { __declspec(dllexport) unsigned char* ReadImageToBGR(const char* filePath, int* width, int* height, int* step) { cv::Mat i…...

【Android面试八股文】你能说一说View绘制流程与自定义View注意点吗?
文章目录 一、自定义View的构造函数以及各参数的用法二、自定义View的几种方式三、自定义View的绘制流程四、自定义View需要注意的一些点五、举个例子一、自定义View的构造函数以及各参数的用法 在Android中,自定义View通常需要提供多个构造函数,以适应不同的使用场景。主要…...

【第24章】Vue实战篇之用户信息展示
文章目录 前言一、准备1. 获取用户信息2. 存储用户信息3. 加载用户信息 二、用户信息1.昵称2.头像 三、展示总结 前言 这里我们来展示用户昵称和头像。 一、准备 1. 获取用户信息 export const userInfoService ()>{return request.get(/user/info) }2. 存储用户信息 i…...

“打造智能售货机系统,基于ruoyi微服务版本生成基础代码“
目录 # 开篇 1. 菜单 2. 字典配置 3. 表配置 3.1 导入表 3.2 区域管理 3.3 合作商管理 3.4 点位管理 4. 代码导入 4.1 后端代码生成 4.2 前端代码生成 5. 数据库代码执行 6. 点位管理菜单顺序修改 7. 页面展示 8. 附加设备表 8.1 新增设备管理菜单 8.2 创建字…...

oracle12c到19c adg搭建(五)dg搭建后进行切换19c进行数据字典升级
一、备库切主库升级 12c切换为19c主库的时候是由低版本到高版本所以cdb和pdb的数据字典需要进行升级才可以让数据与软件版本兼容。 1.1切换 SQL> alter database recover managed standby database finish; Database altered. SQL> alter database commit to switcho…...

在公司的一些笔记
6.19 记住挂载在windows上的账户是DAHUATECH\401593,不是401593Windows与linux不能同时挂载在虚拟盘上 6.21 /******************************************************************************* pdc_ledSy7806e.c* * Description: 提供I2C访问sy7806e。 * * …...

2020C++等级考试二级真题题解
202012数组指定部分逆序重放c #include <iostream> using namespace std; int main() {int a[110];int n, k;cin >> n >> k;for (int i 0; i < n; i) {cin >> a[i];}for (int i 0; i < k / 2; i) {swap(a[i], a[k - 1 - i]);}for (int i 0…...

面试官:聊聊 nextTick
前言 在最近的面试中,不少面试官叫我聊聊 nextTick,nextTick 是个啥,这篇文章咱来好好聊聊! 我的回答 nextTick 是官方提供的一个异步方法,用于在 DOM 更新之后执行回调。正好在我的项目中用到了,就拿它来形容一下,大概的场景是渲染一个列表,每次点击按钮就会往列表后…...

shell编程之条件语句(shell脚本)
条件测试操作 要使shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等。 shell环境根据命令执行后…...

QT中QSettings的使用系列之二:保存和恢复应用程序主窗口
1、核心代码 #include "widget.h" #include "ui_widget.h" #include <QSettings> #include <QDebug> #include <QColo...

Linux系统上安装Miniconda并安装特定版本的Python
要在Linux系统上安装Miniconda并安装特定版本的Python(例如3.10.12),请按照以下步骤进行操作: 1. 下载并安装Miniconda 下载Miniconda安装脚本: 使用wget或curl下载Miniconda安装脚本。以下是使用wget的命令ÿ…...

解决Qt中 -lGL无法找到的问题
在使用Qt Creator创建并编译新项目时,可能会遇到以下错误: /usr/bin/ld: cannot find -lGL collect2: error: ld returned 1 exit status make: *** [untitled1] Error 1 18:07:41: The process "/usr/bin/make" exited with code 2. Error w…...

【重要】《HTML趣味编程》专栏内资源的下载链接
目录 关于专栏 博主简介 专栏内资源的下载链接 写在后面 关于专栏 本专栏将持续更新,至少含有30个案例,后续随着案例的增加可能会涨价,欢迎大家尽早订阅!(订阅后可查看专栏内所有文章,并且可以下载专栏内的所有资源) 博主简介 ⭐ 2024年百度文心智能体大赛 Top1⭐…...

苍穹外卖环境搭建
一、前端环境搭建 ①整体结构 ②前端工程基于nginx运行 启动nginx:双击 nginx.exe 即可启动 nginx 服务,访问端口号为 80 进入浏览器地址输入locallhost回车 二、后端环境搭建 后端初始工程基于maven进行项目构建,并且进行分模块开发 (1) idea打开初始…...

切割游戏介绍
简介 上大学时,在学校实验室里玩过一个貌似使用VC写的小游戏,一个小球在界面上四处游荡,玩家使用鼠标切割背景,将背景切割剩余到一定的百分比后,就胜利了,后边的背景图会全部展示出来。 使用qt的qml技术&a…...

对接Paypal、Stripe支付简单流程
一、Stripe卡支付简单流程: #mermaid-svg-bZxQh1bt4Z8agjJg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bZxQh1bt4Z8agjJg .error-icon{fill:#552222;}#mermaid-svg-bZxQh1bt4Z8agjJg .error-text{fi…...

微服务中不同服务使用openfeign 相互调用
首先 我们上文 已经知道了 nacos 的注册服务,现在 我们 在不同服务中相互调用就可以使用openfeign 直接调用,而不是 再写冗余的调用代码啦 首先 我们的微服务组件如下 因为我这个微服务是我在 员工登录demo 中 拆出来的,在userlogin模块中…...

社区项目-项目介绍环境搭建
文章目录 1.技术选型2.原型设计1.安装AxureRP2.进行汉化3.载入元件库4.基本设计 3.元数建模1.安装元数建模软件2.新建项目3.新增一个刷题模块主题域4.新增数据表 subject_category5.新增关系图,将表拖过来6.新增题目标签表7.新增题目信息表8.新增单选表、多选表、判…...

【论文阅读】-- Omnisketch:高效的多维任意谓词高速流分析
Omnisketch:高效的多维任意谓词高速流分析 摘要1 引言2 预备知识及相关工作3 OMNISKETCH:使用任意谓词估计频率3.1 Sketch S0:Count-Min with rid-sets 用于估计带有谓词的查询3.2 Sketch S1 (OmniSketch):…...

【ajax核心03】封装底层axios函数
目录 一:步骤总结 二:获取数据需求: 三:查找数据需求: 四:发送数据需求: 一:步骤总结 定义myAxios函数,接收配置对象,返回Promise对象发送XHR请求&#…...

python科学计算
文章目录 一、科学计算介绍二、NumPy2.1、NumPy是什么2.2、NumPy使用场景2.3、NumPy特点2.4、NumPy如何使用 三、数组3.1、数组介绍3.2、创建数组3.3、数组的大小3.4、通过索引访问数组3.5、变换数组的形态3.6、常用的ufunc运算 一、科学计算介绍 python语言提供了array模块&am…...

Leetcode - 132双周赛
目录 一、3174. 清除数字 二、3175. 找到连续赢 K 场比赛的第一位玩家 三、3176. 求出最长好子序列 I 四、3177. 求出最长好子序列 II 一、3174. 清除数字 本题可以使用栈来模拟,遇到数字弹出栈顶元素,遇到字母入栈。 代码如下: //使用字…...

Mongodb在UPDATE操作中使用$push向数组中插入数据
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第69篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…...

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果
ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果 核心代码完整代码在线示例ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类,可以添加数据以及操作 FBO(ManagedFBO); 通过操作 FBO,可以通过后处理实现很多效果,官方提供了几个示例,…...