当前位置: 首页 > 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: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 10.2.2
  name: grafana
  namespace: monitoring
spec:
  ports:
  - name: http
    port: 3000
    targetPort: http 
  type: LoadBalancer   **# SVC -> LoadBalancer 类型**
  selector:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.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: prometheus
    app.kubernetes.io/instance: k8s
    app.kubernetes.io/name: prometheus
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 2.48.1
  name: k8s
  namespace: monitoring
spec:
  alerting:
    alertmanagers:
    - apiVersion: v2
      name: alertmanager-main
      namespace: monitoring
      port: web
  enableFeatures: []
  externalLabels: {}
  image: quay.io/prometheus/prometheus:v2.48.1
  nodeSelector:
    kubernetes.io/os: linux
  # ... 其他配置
  storage:    **# Storage -> OCI StorageClass 类型, oci-bv**
    volumeClaimTemplate:
      spec:
        storageClassName: oci-bv
        resources:
          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-router
    app.kubernetes.io/instance: main
    app.kubernetes.io/name: alertmanager
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 0.26.0
  name: main
  namespace: 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: feishuhook
  namespace: monitoring
  labels:
    alertmanagerConfig: feishuhook
spec:
  receivers:
    - name: Critical
      webhookConfigs:
        - url: 'http://prometheus-alert-center:8080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=<飞书机器人地址>'  
          sendResolved: true
  route:
    groupBy: ['namespace']
    groupWait: 30s
    groupInterval: 6m
    repeatInterval: 12h
    receiver: Critical
    routes:
      - receiver: Critical
        match:
          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-如何在群组中使用机器人


http://www.kler.cn/a/555334.html

相关文章:

  • 未来AI方向落地场景:小语言模型,super_private_agent
  • 深度学习之图像回归(一)
  • Linux-ubuntu系统移植之Uboot启动流程
  • 使用open-webui+deepseek构建本地AI知识库
  • 黑马Javascript基础02
  • 面向架构评估的质量属性
  • 精读解析:华为MPP营销计划流程培训课件
  • el-input无法输入0.0001的小数,自动转换为0在vue3中的bug
  • 机器学习数学基础:29.t检验
  • 面试编程题
  • 自然语言处理入门1——单词的表示和距离
  • 在 Visual Studio Code (VSCode) 中创建 React 项目
  • 解决华硕主板的Boot界面无法设置M.2的系统启动盘问题
  • javascript安全解码base64
  • linux云服务器部署deepseek,并通过网页访问
  • linux+KMS+AD域自动激活
  • mysql云上安装慢问题解决
  • Java面试宝典:什么是Java中的双亲委派模型?
  • DeepSeek私有化专家 | 云轴科技ZStack入选IDC中国生成式AI市场概览
  • 纯手工搭建整套CI/CD流水线指南