Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警
1 介绍
Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案,该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置,主要包括以下几个功能:
- Kubernetes 自定义资源:使用 Kubernetes CRD 来部署和管理 Prometheus、Alertmanager 和相关组件。
- 简化的部署配置:直接通过 Kubernetes 资源清单配置 Prometheus,比如版本、持久化、副本、保留策略等等配置。
- Prometheus 监控目标配置:基于熟知的 Kubernetes 标签查询自动生成监控目标配置,无需学习 Prometheus 特地的配置。

2 安装配置
2.1 兼容性
通过 Prometheus Operator 可以利用 Operator 编写一整套的监控资源清单。以下是各个版本 Kubernetes 和 kube-prometheus 的兼容:
| kube-prometheus stack | Kubernetes 1.22 | Kubernetes 1.23 | Kubernetes 1.24 | Kubernetes 1.25 | Kubernetes 1.26 | Kubernetes 1.27 | Kubernetes 1.28 |
|---|---|---|---|---|---|---|---|
release-0.10 | ✔ | ✔ | ✗ | ✗ | x | x | x |
release-0.11 | ✗ | ✔ | ✔ | ✗ | x | x | x |
release-0.12 | ✗ | ✗ | ✔ | ✔ | x | x | x |
release-0.13 | ✗ | ✗ | ✗ | x | ✔ | ✔ | ✔ |
main | ✗ | ✗ | ✗ | x | x | ✔ | ✔ |
最新兼容性可参考: https://github.com/prometheus-operator/kube-prometheus/tree/main?tab=readme-ov-file#compatibility
2.2 Kube-Prometheus 的下载
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus
2.3 初始化 Kube-Prometheus ( CRDs 资源对象)
manifests/setup 中包含内容为 operator 所需的 命名空间 和 CRDs 初始化组件
kubectl apply -f manifests/setup
customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created
customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created
namespace/monitoring created
The CustomResourceDefinition "prometheuses.monitoring.coreos.com" is invalid: metadata.annotations: Too long: must have at most 262144 bytes
安装过程中可能看到提示 Too long: must have at most 262144 bytes,变更为 kubectl create 即可:
kubectl create -f manifests/setup
创建成功后资源会存放在名为 monitoring 的命名空间。

2.4 通过 Kube-Prometheus 创建资源
manifests 目录下存放着一套 Prometheus的部署规则、模板与配置,包括:Prometheus-operator、Node-exporter、Kube-state-metrics、Grafana、Prometheus-adapter 以及 Prometheus 和 Alertmanager 等大量组件.
kubectl apply -f manifests/
*注意:默认manifests的svc不提供外部访问,如果希望暴露服务,需要调整 -service.yaml 配置 或 通过 Ingress 完成控制.
# 示例为 manifests/grafana-service.yaml
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/component: grafanaapp.kubernetes.io/name: grafanaapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 10.2.2name: grafananamespace: monitoring
spec:ports:- name: httpport: 3000targetPort: http type: LoadBalancer **# SVC -> LoadBalancer 类型**selector:app.kubernetes.io/component: grafanaapp.kubernetes.io/name: grafanaapp.kubernetes.io/part-of: kube-prometheus
*注意:默认manifests的Prometheus和其他组件默认为临时存储, 可以调整 -deployment.yaml 或 prometheus-prometheus.yaml 修改挂载模式.
# manifests/prometheus-prometheus.yaml 挂载 OCI BlockVolume 示例
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:labels:app.kubernetes.io/component: prometheusapp.kubernetes.io/instance: k8sapp.kubernetes.io/name: prometheusapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 2.48.1name: k8snamespace: monitoring
spec:alerting:alertmanagers:- apiVersion: v2name: alertmanager-mainnamespace: monitoringport: webenableFeatures: []externalLabels: {}image: quay.io/prometheus/prometheus:v2.48.1nodeSelector:kubernetes.io/os: linux# ... 其他配置storage: **# Storage -> OCI StorageClass 类型, oci-bv**volumeClaimTemplate:spec:storageClassName: oci-bvresources:requests:storage: 50Gi# ... 其他配置
部署成功后可在 monitoring 命名空间下查看对应的资源
Pods 资源
Services 资源

3 请求飞书告警
3.1 初始化飞书机器人
3.1.1 创建飞书聊天群组
点击左上 “+” 按钮, 创建新的组, 此处可以添加相关的业务同事


3.1.2 添加机器人
进入聊天群组, 右上部分,点击 “…” —> “Settings”, 添加机器人;

在 Settings 中点击 Bots 选项卡, “Add Bot”

添加自定义机器人

设置机器人基础信息, 设置完成后点击 “Add”

设置安全机器人相关信息,确认后机器人配置完成

3.2 prometheusalert 部署
PrometheusAlert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus、Zabbix,日志系统Graylog2,Graylog3、数据可视化系统Grafana、SonarQube。阿里云-云监控,以及所有支持WebHook接口的系统发出的预警消息,支持将收到的这些消息发送到钉钉,微信,email,飞书,腾讯短信,腾讯电话,阿里云短信,阿里云电话,华为短信,百度云短信,容联云电话,七陌短信,七陌语音,TeleGram,百度Hi(如流)等。
3.2.1 下载 prometheusalert yaml
wget https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/example/kubernetes/PrometheusAlert-Deployment.yaml
3.2.2 开启飞书告警通道
修改YAML文件中的 configmap app.conf 部分配置
# vim PrometheusAlert-Deployment.yaml
# 83行, 打开 feishu 配置#是否开启飞书告警通道,可同时开始多个通道0为关闭,1为开启
open-feishu=1
#默认飞书机器人地址, 可以不修改,通过 alertmanager 进行配置
fsurl=https://open.feishu.cn/open-apis/bot/hook/xxxxxxxxx
3.2.3 部署
kubectl apply -n monitoring -f https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/example/kubernetes/PrometheusAlert-Deployment.yaml
3.3 prometheusalert 配置模板与告警
使用自定义模板中的默认模板或创建新的模板,配置飞书告警模板

自定义模板信息

3.4 配置 Alertmanager 对接 PrometheusAlert
注意:默认manifests的alertManager不会加载客户自定义 AlertmanagerConfig,需要配置加载项
3.4.1 加载自定义告警规则
# manifests/alertmanager-alertmanager.yaml
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:labels:app.kubernetes.io/component: alert-routerapp.kubernetes.io/instance: mainapp.kubernetes.io/name: alertmanagerapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 0.26.0name: mainnamespace: monitoring
spec:image: quay.io/prometheus/alertmanager:v0.26.0# 其他配置 .....alertmanagerConfigSelector: # 通过Label匹配告警规则matchLabels:alertmanagerConfig: feishuhook # 其他配置 .....
3.4.2 创建自定义告警规则
# vim manifests/alertmanager-config.yaml
# alertmanager-config.yaml
# 'http://prometheus-alert-center:8080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=<飞书机器人地址>'
# prometheus-alert-center:8080 -> PrometheusAlert 请求地址
# type=fs -> 飞书告警
# tpl=prometheus-fs -> 您在PrometheusAlert中配置的飞书告警模板,我的示例为 prometheus-fs ,您可以自行修改
# fsurl=<飞书机器人地址>apiVersion: monitoring.coreos.com/v1alpha1
kind: AlertmanagerConfig
metadata:name: feishuhooknamespace: monitoringlabels:alertmanagerConfig: feishuhook
spec:receivers:- name: CriticalwebhookConfigs:- url: 'http://prometheus-alert-center:8080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=<飞书机器人地址>' sendResolved: trueroute:groupBy: ['namespace']groupWait: 30sgroupInterval: 6mrepeatInterval: 12hreceiver: Criticalroutes:- receiver: Criticalmatch:severity: critical
3.5 查看飞书告警
当出现指标达到告警阈值时,飞书聊天组即可收到报警

4 参考资料
kube-Prometheus 安装:https://github.com/prometheus-operator/kube-prometheus/tree/main?tab=readme-ov-file#quickstart
kube-Prometheus k8s平台兼容性: https://github.com/prometheus-operator/kube-prometheus/tree/main?tab=readme-ov-file#compatibility
PrometheusAlert安装: https://github.com/feiyu563/PrometheusAlert/blob/master/doc/readme/base-install.md#安装部署prometheusalert
飞书机器人添加: https://www.feishu.cn/hc/zh-CN/articles/360024984973-如何在群组中使用机器人
相关文章:
Kubernetes 使用 Kube-Prometheus 构建指标监控 +飞书告警
1 介绍 Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案,该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置,主要包括以下几个功能: Kubernetes 自定义资源:使用 Kube…...
《Operating System Concepts》阅读笔记:p62-p75
《Operating System Concepts》学习第 10 天,p62-p75 总结,总计 14 页。 一、技术总结 1. system call (1) 定义 The primary interface between processes and the operating system, providing a means to invoke services made available by th…...
Node.js中不支持require和import两种导入模块的混用
最近在整理Node.js相关的知识点,发现通过Node.js支持的两个模块导入语句require和import在同时使用时会发生错误,而且错误非常诡异。 例如,在先使用require导入模块,在使用import导入模块时,出现require无法识别&#…...
WPF的页面设计和实用功能实现
目录 一、TextBlock和TextBox 1. 在TextBlock中实时显示当前时间 二、ListView 1.ListView显示数据 三、ComboBox 1. ComboBox和CheckBox组合实现下拉框多选 四、Button 1. 设计Button按钮的边框为圆角,并对指针悬停时的颜色进行设置 一、TextBlock和TextBox…...
window安装MySQL5.7
1、下载MySQL5.7.24 浏览器打开: https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 2、解压缩 下载下来的是一个压缩包,解压到你想放到的目录下面,我放的是“C:\MySQL” 3、配置MySQL环境变量 计算机右键 - 属性 …...
数据结构:哈希表(二)
目录 一、哈希表 1、概念 二、哈希冲突 1、概念 2、冲突避免 (1)哈希函数设计 (2)负载因子调节 3、冲突解决 (1)闭散列 1、线性探测 2、二次探测 (2)开散列 4、哈希桶实…...
blender笔记2
一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式:反方,相对于:场景原点,对齐:z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后,物体面有阴影。 数据-&g…...
1.21作业
1 unserialize3 当序列化字符串中属性个数大于实际属性个数时,不会执行反序列化 外部如果是unserialize()会调用wakeup()方法,输出“bad request”——构造url绕过wakeup 类型:public class&…...
深入浅出:理解闭包在JavaScript中的应用
什么是闭包 闭包(Closure)是 JavaScript 中的一个重要概念,也是函数式编程中的核心特性之一。简单来说,闭包是指一个函数能够访问并记住其词法作用域(Lexical Scope),即使这个函数在其词法作用…...
【Quest开发】全身跟踪(一)
软件:Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件:Meta Quest3 最终效果:能像meta的操作室沉浸场景一样根据头盔移动来推断用户姿势,实现走路、蹲下、手势匹配等功能 需要借助UnityMovement这个包 GitHub …...
【QT中的一些高级数据结构,持续更新中...】
QT中有一些很精妙、便捷的设计,在了解这些数据的同时,我们可以学到如何更好的设计代码。本贴持续更新中,欢迎关注和收藏 一 QScopedPointer主要特点:示例代码 二 Q_DISABLE_COPY 一 QScopedPointer QScopedPointer 是 Qt 中的一种…...
最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程
ExoPlayer 是一个开源的 Android 媒体播放库,由 Google 开发和维护,用于替代 Android 系统自带的 MediaPlayer。它提供了更强大的功能、更好的性能和更高的灵活性,适用于各种复杂的媒体播放场景。所以被广泛用于各种播放器场景。 最近项目中…...
JS:页面事件
文章目录 一、页面加载事件二、页面滚动事件三、页面尺寸事件总结 一、页面加载事件 有时候我们会把script的内容放在body前,这时候代码的执行在元素的加载之前,会导致页面元素未加载而报错 解决办法是调用Window的load加载事件,将所有操作放…...
✨ 索引有哪些缺点以及具体有哪些索引类型
索引的定义与原理 索引是数据库中用于提高数据检索效率的数据结构。它就像是书籍的目录,通过目录可以快速定位到所需内容的页码,而在数据库中,索引可以帮助数据库系统快速找到符合查询条件的数据行,而不必对整个表进行扫描。 其…...
C++ ——继承
体现的是代码复用的思想 1、子类继承父类,子类就拥有了父类的特性(成员方法和成员属性) 2、已存在的类被称为“基类”或者“父类”或者“超类”;新创建的类被称为“派生类”或者“子类” 注意: (1&#…...
vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive
keepalive没有效果,无法缓存页面? 问题大概是组件的name值不对应,vue2修改组件文件的name值,vue3保持组件文件名称和路由页面配置的name一致就可以了,如果vue3不想保持一致,必须手动在文件后面添加export..…...
DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化
前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…...
【ELK】【Elasticsearch】数据查询方式
1. 简单查询(URI Search) 通过 URL 参数直接进行查询,适合简单的搜索场景。 示例: bash 复制 GET /index_name/_search?qfield_name:search_value 说明: index_name:索引名称。 field_name…...
Kotlin 优雅的接口实现
1. 日常遇到的冗余的接口方法实现 日常开发中,经常会要实现接口,但是很多场景中,只需要用到其中一两个方法,例如 ActivityLifecycleCallbacks,它有很多个接口需要实现,但是很多时候我们只需要用到其中的一…...
go 通过ssh连接linux golang.org/x/crypto/ssh
ssh.Dial golang.org/x/crypto/ssh package mainimport ("bytes""log""os""strings""golang.org/x/term""golang.org/x/crypto/ssh" )// go ssh 连接ssh // 参考blog: // // https://www.cnblogs.c…...
纯手工搭建整套CI/CD流水线指南
目录 一、前言 二、环境准备 1、服务器开荒(192.168.1.200) 2、离线资源清单(提前用U盘拷好) 三、硬核安装:比拧螺丝还细的步骤 Step1:搭建GitLab(注意!这是只内存饕餮…...
智能硬件新时代,EasyRTC开启物联音视频新纪元
在万物互联的时代浪潮中,智能硬件正以前所未有的速度融入我们的生活,从智能家居的便捷控制,到智能穿戴设备的健康监测,再到工业物联网的高效管理,智能硬件的应用场景不断拓展。而在这个智能硬件蓬勃发展的背后…...
Rust编程语言入门教程(八)所有权 Stack vs Heap
Rust 系列 🎀Rust编程语言入门教程(一)安装Rust🚪 🎀Rust编程语言入门教程(二)hello_world🚪 🎀Rust编程语言入门教程(三) Hello Cargo…...
spring 狂神说的详细笔记(完整版)
最近在B站找教程视频自学java框架(SSM),最后发现自己迷上了狂神说,不得不说秦疆老师 讲得太好了,通俗易懂,而且在听他的课你会不由衷得到一些思想的启发和转变,而且教程视频 还是无偿免费的&…...
交易所开发:数字市场的核心动力
数字资产交易所作为连接用户与市场的核心枢纽,已成为推动数字经济发展的关键引擎。其开发不仅需要技术创新,还需兼顾用户体验、合规安全与生态构建,以下是交易所开发的核心要素与实践路径分析: 一、交易所的核心定位与技术架构…...
C++ 课程设计 汇总(含源码)
C 课程设计 [C课程设计 个人账务管理系统(含源码)](https://arv000.blog.csdn.net/article/details/145601695)[C课程设计 运动会分数统计(含源码)](https://arv000.blog.csdn.net/article/details/145601819)[C 课程设计打印万年历(含源码&a…...
android调用ffmpeg解析rtsp协议的视频流
文章目录 一、背景二、解析rtsp数据1、C层功能代码2、jni层的定义3、app层的调用 三、源码下载 一、背景 本demo主要介绍android调用ffmpeg中的接口解析rtsp协议的视频流(不解析音频),得到yuv数据,把yuv转bitmap在android设备上显…...
Android 之 AIDL for HAL
Android AIDL for HAL 的作用与实现 作用: Android AIDL for HAL(Android Interface Definition Language for Hardware Abstraction Layer)旨在统一 HAL 开发接口,替代 HIDL(Hardware Interface Definition Language…...
Jmeter进阶篇(34)如何解决jmeter.save.saveservice.timestamp_format=ms报错?
问题描述 今天使用Jmeter完成压测执行,然后使用命令将jtl文件转换成html报告时,遇到了报错! 大致就是说jmeter里定义了一个jmeter.save.saveservice.timestamp_format=ms的时间格式,但是jtl文件中的时间格式不是标准的这个ms格式,导致无法正常解析。对于这个问题,有如下…...
TensorFlow v2.16 Overview
TensorFlow v2.16 Overview 一、模块 Modules二、类 Classes三、函数 Functions TensorFlow v2.16.1 Overview 一、模块 Modules 模块是TensorFlow中组织代码的一种方式,将相关的功能和类封装在一起,方便用户使用和管理。每个模块都提供了特定领域的公共…...
