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 Exporter 或 Micrometer + 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,对接短信服务 |