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 的下载

bash 复制代码
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus

2.3 初始化 Kube-Prometheus ( CRDs 资源对象)

manifests/setup 中包含内容为 operator 所需的 命名空间 和 CRDs 初始化组件

bash 复制代码
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 即可:

bash 复制代码
kubectl create -f manifests/setup

创建成功后资源会存放在名为 monitoring 的命名空间。

2.4 通过 Kube-Prometheus 创建资源

manifests 目录下存放着一套 Prometheus的部署规则、模板与配置,包括:Prometheus-operator、Node-exporter、Kube-state-metrics、Grafana、Prometheus-adapter 以及 Prometheus 和 Alertmanager 等大量组件.

bash 复制代码
kubectl apply -f manifests/

*注意:默认manifests的svc不提供外部访问,如果希望暴露服务,需要调整 -service.yaml 配置 或 通过 Ingress 完成控制.

yaml 复制代码
# 示例为 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 修改挂载模式.

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

bash 复制代码
wget https://raw.githubusercontent.com/feiyu563/PrometheusAlert/master/example/kubernetes/PrometheusAlert-Deployment.yaml

3.2.2 开启飞书告警通道

修改YAML文件中的 configmap app.conf 部分配置

bash 复制代码
# 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 部署

bash 复制代码
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 加载自定义告警规则

bash 复制代码
# 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 创建自定义告警规则

bash 复制代码
# 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-如何在群组中使用机器人

相关推荐
yongui4783419 分钟前
CentOS系统如何查看当前内存容量
linux·运维·centos
xzq_java25 分钟前
CentOS操作系统虚拟机安装以及连接工具下载和远程连接工具远程连接
linux·运维·centos
Sweety丶╮7941 小时前
【Ansible】实施 Ansible Playbook知识点
服务器·云原生·ansible
ZLRRLZ1 小时前
【Docker】Docker安装
运维·docker·容器
逐梦吧!旅行者1 小时前
Linux之环境变量(内容由浅入深,层层递进)
linux·运维
挨踢攻城2 小时前
Linux 应急响应实操 Checklist
linux·运维·linux命令·rhce·rhca·厦门微思网络·linux 应急响应
wanhengidc2 小时前
什么是云手机?
运维·网络·安全·游戏·智能手机
optiz2 小时前
细菌基因组genome二代测序数据分析
linux·运维·服务器
IT成长日记3 小时前
【Linux基础】Linux系统管理:GPT分区实践详细操作指南
linux·运维·服务器·gpt·parted·磁盘分区·fdisk
爱喝水的鱼丶3 小时前
SAP-ABAP: ABAP ASSIGN COMPONENT 语句详解:动态字段符号的利器作用用法示例详解
运维·开发语言·sap·abap·开发经验·动态字段符号