news 2026/5/28 9:17:23

Kubernetes持续监控与告警管理:构建实时的监控体系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes持续监控与告警管理:构建实时的监控体系

Kubernetes持续监控与告警管理:构建实时的监控体系

一、监控概述

Kubernetes监控是保障集群稳定性的关键,涉及指标收集、可视化展示和告警通知。

1.1 监控架构

┌─────────────────────────────────────────────────────────────────┐ │ 监控目标 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Node │ │ Pod │ │ Service │ │ Cluster │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ └───────┼─────────────┼─────────────┼─────────────┼─────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 指标收集层 │ │ Node Exporter / cAdvisor │ │ ┌──────────────────┐ │ │ │ Metrics API │ │ │ └────────┬─────────┘ │ └─────────────────────────────────┼───────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 指标存储层 │ │ Prometheus │ │ ┌──────────────────┐ │ │ │ Time Series │ │ │ └────────┬─────────┘ │ └─────────────────────────────────┼───────────────────────────────┘ │ ┌─────────────┼─────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │Alertmanager│ │ Grafana │ │ Rule │ │ 告警 │ │ 可视化 │ │ 规则 │ └──────────┘ └──────────┘ └──────────┘

1.2 监控组件

组件功能
Prometheus指标存储与查询
Grafana可视化仪表盘
Alertmanager告警管理
Node Exporter节点指标
cAdvisor容器指标

二、Prometheus配置

2.1 Prometheus部署

apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: prometheus namespace: monitoring spec: replicas: 2 resources: requests: memory: 4Gi serviceAccountName: prometheus serviceMonitorSelector: matchLabels: app: prometheus alerting: alertmanagers: - namespace: monitoring name: alertmanager port: web

2.2 ServiceMonitor配置

apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: node-exporter namespace: monitoring spec: selector: matchLabels: app: node-exporter endpoints: - port: metrics interval: 30s

2.3 Prometheus规则配置

apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: cluster-alerts namespace: monitoring spec: groups: - name: node.rules rules: - record: node_cpu_usage expr: 1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) - record: node_memory_usage expr: 1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)

三、告警配置

3.1 Alertmanager配置

apiVersion: monitoring.coreos.com/v1 kind: Alertmanager metadata: name: alertmanager namespace: monitoring spec: replicas: 2 serviceAccountName: alertmanager config: global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'webhook' receivers: - name: 'webhook' webhook_configs: - url: 'http://alert-webhook:8080/webhook'

3.2 告警规则

apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: alert-rules namespace: monitoring spec: groups: - name: critical-alerts rules: - alert: NodeDown expr: up{job="node-exporter"} == 0 for: 5m labels: severity: critical annotations: summary: "Node {{ $labels.instance }} is down" - alert: HighCPU expr: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.1 for: 10m labels: severity: critical annotations: summary: "High CPU usage on {{ $labels.instance }}"

四、Grafana配置

4.1 Grafana部署

apiVersion: grafana.integreatly.org/v1beta1 kind: Grafana metadata: name: grafana namespace: monitoring spec: config: log: mode: "console" datasources: - name: Prometheus type: prometheus access: proxy url: http://prometheus:9090

4.2 自定义仪表盘

{ "title": "Cluster Overview", "panels": [ { "type": "graph", "title": "CPU Usage", "targets": [ { "expr": "sum(node_cpu_seconds_total{mode!=\"idle\"})", "legendFormat": "Total CPU" } ], "yAxes": [ { "format": "percent" } ] }, { "type": "graph", "title": "Memory Usage", "targets": [ { "expr": "sum(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)", "legendFormat": "Used Memory" } ], "yAxes": [ { "format": "bytes" } ] }, { "type": "stat", "title": "Active Pods", "targets": [ { "expr": "count(kube_pod_status_phase{phase=\"Running\"})" } ] } ] }

五、监控最佳实践

5.1 自定义指标

from prometheus_client import start_http_server, Gauge REQUESTS = Gauge('app_requests_total', 'Total requests') ERRORS = Gauge('app_errors_total', 'Total errors') LATENCY = Gauge('app_request_latency_seconds', 'Request latency') @app.route('/') def index(): REQUESTS.inc() start_time = time.time() try: # 处理请求 return 'OK' except Exception as e: ERRORS.inc() raise finally: LATENCY.set(time.time() - start_time) if __name__ == '__main__': start_http_server(8000) app.run()

5.2 监控服务配置

apiVersion: v1 kind: Service metadata: name: app-metrics annotations: prometheus.io/scrape: "true" prometheus.io/port: "8000" spec: selector: app: my-app ports: - port: 8000 name: metrics

5.3 告警通知配置

apiVersion: monitoring.coreos.com/v1 kind: AlertmanagerConfig metadata: name: alertmanager-config namespace: monitoring spec: route: groupBy: ['alertname'] receiver: 'email' receivers: - name: 'email' emailConfigs: - to: 'admin@example.com' from: 'alerts@example.com' smarthost: 'smtp.example.com:587' authUsername: 'alerts' authPassword: name: smtp-password key: password

六、总结

监控告警实践包括:

  1. 指标收集:使用Node Exporter和cAdvisor收集指标
  2. 指标存储:使用Prometheus存储时间序列数据
  3. 可视化:使用Grafana创建仪表盘
  4. 告警规则:配置告警条件和通知方式
  5. 自定义指标:暴露应用程序指标

建议建立完善的监控体系,实现实时监控和智能告警。


参考资料

  • Prometheus文档
  • Grafana文档
  • Alertmanager文档
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 9:16:21

Windows系统evr.dll文件丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/28 9:13:06

Zig语言统一LLM库llmlite:类型安全、零依赖的AI集成方案

1. 项目概述&#xff1a;为什么Zig需要一个统一的LLM库&#xff1f;如果你是一个Zig语言的开发者&#xff0c;最近想在自己的项目里集成一点AI能力&#xff0c;比如让程序能理解自然语言或者生成一些文本&#xff0c;你可能会立刻感到一阵头疼。这倒不是因为Zig语言本身有多难&…

作者头像 李华
网站建设 2026/5/28 9:00:45

从零开始:两种主流方式轻松部署Python开发环境

无论你是编程新手还是老手&#xff0c;搭建一个干净好用的Python环境&#xff0c;都是开启代码之旅的第一步。Python 之所以如此受欢迎&#xff0c;除了语法简洁、生态强大之外&#xff0c;其跨平台特性和灵活的环境管理方式也是重要原因。但很多刚入门的朋友&#xff0c;往往在…

作者头像 李华