Kubernetes 监控告警方案


✅ 一、整体架构图(逻辑结构)基于开源技术

Kubernetes Cluster
│
├── Metrics Exporters
│   ├── Node Exporter (主机指标)
│   ├── kube-state-metrics (K8s 状态指标)
│   ├── cAdvisor (容器指标)
│   └── JVM Exporter / Micrometer (JVM & 线程池指标)
│
├── Prometheus Server
│   └── 拉取指标、存储时间序列数据
│
├── Alertmanager
│   └── 告警路由、分组、抑制、通知(Email/SMS)
│
├── Grafana
│   └── 可视化展示监控数据
│
└── Notification Channels
    ├── Email (SMTP)
    └── SMS via Webhook (如阿里云短信服务、Twilio 等)

✅ 二、各组件说明及部署建议

1. 指标采集(Metrics Exporters)

组件功能部署方式
node_exporter收集节点级资源使用情况(CPU、内存、磁盘等)DaemonSet
kube-state-metrics提供 K8s 对象状态(Pod、Deployment、Service 等)Deployment
cAdvisor容器资源使用统计(默认集成在 kubelet)启用 kubelet 的 /metrics/cadvisor 接口
JVM ExporterMicrometer + Prometheus暴露 JVM 指标(GC、堆内存、线程池等)Sidecar 或 Java Agent

示例:在 Spring Boot 应用中启用 Micrometer:

management:
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    export:
      prometheus:
        enabled: true

2. 数据存储与抓取 —— Prometheus

  • 功能:定时拉取 Exporter 上报的指标,存储为时间序列。
  • 配置示例
scrape_configs:
  - job_name: 'kubernetes-nodes'
    kubernetes_sd_configs:
      - role: node
    relabel_configs:
      - source_labels: [__address__]
        action: replace
        target_label: __address__
        replacement: <node_ip>:9100

  - job_name: 'jvm-applications'
    metrics_path: '/actuator/prometheus'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true

3. 告警管理 —— Alertmanager

  • 功能:接收 Prometheus 告警、去重、分组、路由并发送通知。
  • 告警规则示例(Prometheus Rule)
groups:
  - name: instance-health
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "Instance {{ $labels.instance }} down"
          description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute."
  • 告警通知模板
receivers:
  - name: email-alert
    email_configs:
      - to: your_email@example.com
        from: alertmanager@example.com
        smarthost: smtp.example.com:587
        auth_username: "your_email@example.com"
        auth_password: "your_password"

  - name: sms-alert
    webhook_configs:
      - url: https://your-sms-webhook-endpoint.com/alert

4. 可视化展示 —— Grafana

  • 功能:可视化 Prometheus 数据,支持丰富的 Dashboard。
  • 推荐 Dashboard ID
    • Node Exporter Full (ID: 1860)
    • Kubernetes / Compute Resources / Cluster (ID: 14226)
    • JVM (Micrometer) (ID: 4701)

5. 短信通知实现方案

方式一:通过 Webhook 调用短信服务接口

  • 使用阿里云、腾讯云、Twilio 等短信服务提供商提供的 Webhook 接口。
  • 在 Alertmanager 中配置 webhook_configs,将告警内容 POST 到短信服务 URL。

方式二:自定义脚本 + Kafka + 消费者处理

  • Prometheus 告警触发后写入 Kafka;
  • 自研消费者监听 Kafka 并调用短信网关 API 发送短信。

✅ 三、部署建议(Kubernetes)

  • 所有组件可通过 Helm Chart 快速部署:
    • prometheus-community/kube-prometheus-stack 包含 Prometheus、Alertmanager、Grafana、Exporters 等全套组件。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack

✅ 四、总结

需求实现方案
监控容器状态kube-state-metrics + Prometheus
监控容器 CPU/内存node_exporter + cAdvisor
监控 JVM 指标JVM Exporter / Micrometer
监控线程池通过 Micrometer/JMX Exporter 暴露线程池指标
容器挂掉告警Prometheus 抓取 up 指标,触发告警
邮箱通知Alertmanager 配置 email_configs
短信通知Alertmanager 配置 webhook_configs,对接短信服务