云原生监控实战:Prometheus+Grafana监控Kubernetes集群

一、架构概述

监控系统采用分层架构:

+----------------+       +-------------+       +-----------+
| K8s 集群组件   |------>| Prometheus  |<------| Grafana   |
| (Pod/Node/API) |       | (采集+存储) |       | (可视化)  |
+----------------+       +-------------+       +-----------+

Prometheus通过服务发现自动获取Kubernetes集群的监控目标,Grafana通过$datasource$连接Prometheus实现数据可视化。


二、环境准备
  1. Kubernetes集群要求

    • 版本 ≥ 1.16
    • 开启Metrics API(默认启用)
    • 配置RBAC权限
  2. 工具安装

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
    


三、部署Prometheus
1. 通过Helm部署
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false

2. 关键组件说明
组件功能访问方式
Prometheus Server指标采集与存储kubectl port-forward svc/prometheus-operated 9090 -n monitoring
Alertmanager告警管理默认端口9093
Node Exporter节点资源监控DaemonSet自动部署
3. 验证部署
kubectl get pods -n monitoring
# 预期输出包含:prometheus-operated-*、alertmanager-*、node-exporter-*


四、部署Grafana
1. 通过Helm部署(已包含在kube-prometheus-stack中)
# values.yaml 自定义配置示例
grafana:
  adminPassword: "admin123"
  service:
    type: LoadBalancer
  dashboardProviders:
    dashboardproviders.yaml:
      apiVersion: 1
      providers:
      - name: 'default'
        orgId: 1
        folder: ''
        type: file
        disableDeletion: false
        editable: true
        options:
          path: /var/lib/grafana/dashboards

2. 导入Kubernetes仪表板
  1. 登录Grafana(默认账号admin/admin123)
  2. 添加数据源:选择Prometheus,URL填写http://prometheus-operated:9090
  3. 导入仪表板:
    • 使用ID 3119 导入Kubernetes集群概览
    • 使用ID 6417 导入节点资源监控

五、核心监控指标
指标类型PromQL示例监控目标
节点资源$100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)$CPU使用率
内存$node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100$内存利用率
Pod状态$sum(kube_pod_status_phase{phase="Running"}) by (namespace)$运行中Pod数
网络流量$irate(container_network_receive_bytes_total{namespace!=""}[5m])$入站流量

六、告警配置示例

在Prometheus Rules中配置CPU告警:

- alert: HighNodeCPU
  expr: $100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100) > 85$
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: "高CPU使用率 ({{ $labels.instance }})"
    description: "CPU使用率持续高于85%"


七、优化实践
  1. 存储优化

    • 添加PVC持久化存储
    prometheus:
      prometheusSpec:
        storageSpec:
          volumeClaimTemplate:
            spec:
              storageClassName: standard
              resources:
                requests:
                  storage: 50Gi
    

  2. 高可用部署

    prometheus:
      prometheusSpec:
        replicas: 2
        enableAdminAPI: true
    

  3. 指标过滤

    prometheus:
      prometheusSpec:
        ignoreNamespaceSelectors: false
        ruleNamespaceSelector: {}
    


八、故障排查指南
问题现象排查命令解决方案
无指标数据kubectl get servicemonitors -n monitoring检查ServiceMonitor配置
Grafana无数据curl http://prometheus:9090/targets验证Prometheus目标状态
内存溢出kubectl top pods -n monitoring增加Prometheus内存限制

提示:使用$kubectl logs <prometheus-pod> -n monitoring$查看实时日志

通过以上步骤,可实现完整的Kubernetes集群监控体系,实时掌握集群健康状态,快速定位性能瓶颈。

更多推荐