当前位置: 首页 > article >正文

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 stackKubernetes 1.22Kubernetes 1.23Kubernetes 1.24Kubernetes 1.25Kubernetes 1.26Kubernetes 1.27Kubernetes 1.28
release-0.10xxx
release-0.11xxx
release-0.12xxx
release-0.13x
mainxx

最新兼容性可参考: 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 机器相关监控组件的本地部署和管理方案&#xff0c;该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置&#xff0c;主要包括以下几个功能&#xff1a; Kubernetes 自定义资源&#xff1a;使用 Kube…...

《Operating System Concepts》阅读笔记:p62-p75

《Operating System Concepts》学习第 10 天&#xff0c;p62-p75 总结&#xff0c;总计 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相关的知识点&#xff0c;发现通过Node.js支持的两个模块导入语句require和import在同时使用时会发生错误&#xff0c;而且错误非常诡异。 例如&#xff0c;在先使用require导入模块&#xff0c;在使用import导入模块时&#xff0c;出现require无法识别&#…...

WPF的页面设计和实用功能实现

目录 一、TextBlock和TextBox 1. 在TextBlock中实时显示当前时间 二、ListView 1.ListView显示数据 三、ComboBox 1. ComboBox和CheckBox组合实现下拉框多选 四、Button 1. 设计Button按钮的边框为圆角&#xff0c;并对指针悬停时的颜色进行设置 一、TextBlock和TextBox…...

window安装MySQL5.7

1、下载MySQL5.7.24 浏览器打开&#xff1a; https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-winx64.zip 2、解压缩 下载下来的是一个压缩包&#xff0c;解压到你想放到的目录下面&#xff0c;我放的是“C:\MySQL” 3、配置MySQL环境变量 计算机右键 - 属性 …...

数据结构:哈希表(二)

目录 一、哈希表 1、概念 二、哈希冲突 1、概念 2、冲突避免 &#xff08;1&#xff09;哈希函数设计 &#xff08;2&#xff09;负载因子调节 3、冲突解决 &#xff08;1&#xff09;闭散列 1、线性探测 2、二次探测 &#xff08;2&#xff09;开散列 4、哈希桶实…...

blender笔记2

一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式&#xff1a;反方&#xff0c;相对于&#xff1a;场景原点&#xff0c;对齐&#xff1a;z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后&#xff0c;物体面有阴影。 数据-&g…...

1.21作业

1 unserialize3 当序列化字符串中属性个数大于实际属性个数时&#xff0c;不会执行反序列化 外部如果是unserialize&#xff08;&#xff09;会调用wakeup&#xff08;&#xff09;方法&#xff0c;输出“bad request”——构造url绕过wakeup 类型&#xff1a;public class&…...

深入浅出:理解闭包在JavaScript中的应用

什么是闭包 闭包&#xff08;Closure&#xff09;是 JavaScript 中的一个重要概念&#xff0c;也是函数式编程中的核心特性之一。简单来说&#xff0c;闭包是指一个函数能够访问并记住其词法作用域&#xff08;Lexical Scope&#xff09;&#xff0c;即使这个函数在其词法作用…...

【Quest开发】全身跟踪(一)

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 最终效果&#xff1a;能像meta的操作室沉浸场景一样根据头盔移动来推断用户姿势&#xff0c;实现走路、蹲下、手势匹配等功能 需要借助UnityMovement这个包 GitHub …...

【QT中的一些高级数据结构,持续更新中...】

QT中有一些很精妙、便捷的设计&#xff0c;在了解这些数据的同时&#xff0c;我们可以学到如何更好的设计代码。本贴持续更新中&#xff0c;欢迎关注和收藏 一 QScopedPointer主要特点&#xff1a;示例代码 二 Q_DISABLE_COPY 一 QScopedPointer QScopedPointer 是 Qt 中的一种…...

最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程

ExoPlayer 是一个开源的 Android 媒体播放库&#xff0c;由 Google 开发和维护&#xff0c;用于替代 Android 系统自带的 MediaPlayer。它提供了更强大的功能、更好的性能和更高的灵活性&#xff0c;适用于各种复杂的媒体播放场景。所以被广泛用于各种播放器场景。 最近项目中…...

JS:页面事件

文章目录 一、页面加载事件二、页面滚动事件三、页面尺寸事件总结 一、页面加载事件 有时候我们会把script的内容放在body前&#xff0c;这时候代码的执行在元素的加载之前&#xff0c;会导致页面元素未加载而报错 解决办法是调用Window的load加载事件&#xff0c;将所有操作放…...

✨ 索引有哪些缺点以及具体有哪些索引类型

索引的定义与原理 索引是数据库中用于提高数据检索效率的数据结构。它就像是书籍的目录&#xff0c;通过目录可以快速定位到所需内容的页码&#xff0c;而在数据库中&#xff0c;索引可以帮助数据库系统快速找到符合查询条件的数据行&#xff0c;而不必对整个表进行扫描。 其…...

C++ ——继承

体现的是代码复用的思想 1、子类继承父类&#xff0c;子类就拥有了父类的特性&#xff08;成员方法和成员属性&#xff09; 2、已存在的类被称为“基类”或者“父类”或者“超类”&#xff1b;新创建的类被称为“派生类”或者“子类” 注意&#xff1a; &#xff08;1&#…...

vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive

keepalive没有效果&#xff0c;无法缓存页面&#xff1f; 问题大概是组件的name值不对应&#xff0c;vue2修改组件文件的name值&#xff0c;vue3保持组件文件名称和路由页面配置的name一致就可以了&#xff0c;如果vue3不想保持一致&#xff0c;必须手动在文件后面添加export..…...

DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化

前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…...

【ELK】【Elasticsearch】数据查询方式

1. 简单查询&#xff08;URI Search&#xff09; 通过 URL 参数直接进行查询&#xff0c;适合简单的搜索场景。 示例&#xff1a; bash 复制 GET /index_name/_search?qfield_name:search_value 说明&#xff1a; index_name&#xff1a;索引名称。 field_name&#xf…...

Kotlin 优雅的接口实现

1. 日常遇到的冗余的接口方法实现 日常开发中&#xff0c;经常会要实现接口&#xff0c;但是很多场景中&#xff0c;只需要用到其中一两个方法&#xff0c;例如 ActivityLifecycleCallbacks&#xff0c;它有很多个接口需要实现&#xff0c;但是很多时候我们只需要用到其中的一…...

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&#xff1a; // // https://www.cnblogs.c…...

纯手工搭建整套CI/CD流水线指南

目录 一、前言 二、环境准备 1、服务器开荒&#xff08;192.168.1.200&#xff09; 2、离线资源清单&#xff08;提前用U盘拷好&#xff09; 三、硬核安装&#xff1a;比拧螺丝还细的步骤 Step1&#xff1a;搭建GitLab&#xff08;注意&#xff01;这是只内存饕餮&#xf…...

智能硬件新时代,EasyRTC开启物联音视频新纪元

在万物互联的时代浪潮中&#xff0c;智能硬件正以前所未有的速度融入我们的生活&#xff0c;从智能家居的便捷控制&#xff0c;到智能穿戴设备的健康监测&#xff0c;再到工业物联网的高效管理&#xff0c;智能硬件的应用场景不断拓展。而在这个智能硬件蓬勃发展的背后&#xf…...

Rust编程语言入门教程(八)所有权 Stack vs Heap

Rust 系列 &#x1f380;Rust编程语言入门教程&#xff08;一&#xff09;安装Rust&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;二&#xff09;hello_world&#x1f6aa; &#x1f380;Rust编程语言入门教程&#xff08;三&#xff09; Hello Cargo&#x1f…...

spring 狂神说的详细笔记(完整版)

最近在B站找教程视频自学java框架&#xff08;SSM&#xff09;&#xff0c;最后发现自己迷上了狂神说&#xff0c;不得不说秦疆老师 讲得太好了&#xff0c;通俗易懂&#xff0c;而且在听他的课你会不由衷得到一些思想的启发和转变&#xff0c;而且教程视频 还是无偿免费的&…...

交易所开发:数字市场的核心动力

数字资产交易所作为连接用户与市场的核心枢纽&#xff0c;已成为推动数字经济发展的关键引擎。其开发不仅需要技术创新&#xff0c;还需兼顾用户体验、合规安全与生态构建&#xff0c;以下是交易所开发的核心要素与实践路径分析&#xff1a; 一、交易所的核心定位与技术架构…...

C++ 课程设计 汇总(含源码)

C 课程设计 [C课程设计 个人账务管理系统(含源码)](https://arv000.blog.csdn.net/article/details/145601695)[C课程设计 运动会分数统计&#xff08;含源码&#xff09;](https://arv000.blog.csdn.net/article/details/145601819)[C 课程设计打印万年历&#xff08;含源码&a…...

android调用ffmpeg解析rtsp协议的视频流

文章目录 一、背景二、解析rtsp数据1、C层功能代码2、jni层的定义3、app层的调用 三、源码下载 一、背景 本demo主要介绍android调用ffmpeg中的接口解析rtsp协议的视频流&#xff08;不解析音频&#xff09;&#xff0c;得到yuv数据&#xff0c;把yuv转bitmap在android设备上显…...

Android 之 AIDL for HAL

Android AIDL for HAL 的作用与实现 作用&#xff1a; Android AIDL for HAL&#xff08;Android Interface Definition Language for Hardware Abstraction Layer&#xff09;旨在统一 HAL 开发接口&#xff0c;替代 HIDL&#xff08;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中组织代码的一种方式&#xff0c;将相关的功能和类封装在一起&#xff0c;方便用户使用和管理。每个模块都提供了特定领域的公共…...