Prometheus + Grafana 监控:Kubernetes 集群资源与应用指标的可视化配置

在 Kubernetes(K8s)集群中,使用 Prometheus 收集指标数据并结合 Grafana 进行可视化,是监控集群资源(如 CPU、内存)和应用指标(如请求延迟、错误率)的高效方案。以下配置步骤基于最佳实践,逐步指导您完成设置。整个过程分为部署 Prometheus、配置指标收集、部署 Grafana 和创建仪表盘四个阶段。所有操作均在 K8s 集群内执行,使用 Helm 工具简化部署(确保您已安装 Helm)。


1. 部署 Prometheus

Prometheus 负责从 K8s 组件和应用中拉取指标数据。推荐使用 Helm chart 快速安装。

  • 步骤:

    1. 添加 Prometheus Helm 仓库并更新:
      helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
      helm repo update
      

    2. 安装 Prometheus(默认配置适用于大多数集群):
      helm install prometheus prometheus-community/prometheus -n monitoring --create-namespace
      

    3. 验证部署:检查 Pod 状态:
      kubectl get pods -n monitoring
      

      • 预期输出:prometheus-server-*prometheus-node-exporter-* Pod 应为 Running 状态。
  • 关键点:

    • Prometheus 会自动发现 K8s 服务(通过 ServiceMonitor),但需确保目标暴露了指标端点(如 /metrics)。
    • 资源指标(如节点 CPU)由 node-exporter 提供;应用指标需应用自身暴露 Prometheus 格式的端点。

2. 配置指标收集

配置 Prometheus 收集 K8s 集群资源指标和应用自定义指标。

  • 集群资源指标:

    • 部署 kube-state-metrics 以获取 Pod、Deployment 等资源状态:
      helm install kube-state-metrics prometheus-community/kube-state-metrics -n monitoring
      

    • Prometheus 会自动发现这些目标(通过 ServiceMonitor)。例如,节点 CPU 使用率公式在查询时可用行内表达式表示:$ \text{CPU使用率} = \frac{\text{已用CPU}}{\text{总CPU}} \times 100% $。
  • 应用指标:

    • 确保您的应用暴露 Prometheus 指标端点(如 Spring Boot Actuator 的 /actuator/prometheus)。
    • 创建 ServiceMonitor 资源(YAML 示例),让 Prometheus 自动拉取:
      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: app-metrics
        namespace: monitoring
      spec:
        selector:
          matchLabels:
            app: your-app  # 匹配应用的 Service 标签
        endpoints:
        - port: web  # 应用的指标端口名
          path: /metrics  # 指标路径
      

      • 应用后,Prometheus 的 Targets 页面(通过 kubectl port-forward 访问)应显示新目标。
  • 验证:

    • 使用 Prometheus UI 查询指标:kubectl port-forward svc/prometheus-server 9090:80 -n monitoring,然后访问 http://localhost:9090
    • 输入查询如 kube_pod_container_resource_limits_cpu_cores 检查资源指标。

3. 部署 Grafana

Grafana 用于可视化 Prometheus 数据。同样使用 Helm 安装。

  • 步骤:
    1. 添加 Grafana Helm 仓库:
      helm repo add grafana https://grafana.github.io/helm-charts
      helm repo update
      

    2. 安装 Grafana:
      helm install grafana grafana/grafana -n monitoring
      

    3. 获取管理员密码(用于首次登录):
      kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode
      

    4. 访问 Grafana:kubectl port-forward svc/grafana 3000:80 -n monitoring,然后打开 http://localhost:3000

4. 配置 Grafana 仪表盘

添加 Prometheus 数据源并创建仪表盘,可视化集群和应用指标。

  • 添加数据源:

    1. 在 Grafana UI 中,导航到 Configuration > Data Sources > Add data source
    2. 选择 Prometheus,输入 URL:http://prometheus-server.monitoring.svc.cluster.local:80(K8s 内部服务地址)。
    3. 保存并测试连接(应显示 "Success")。
  • 创建仪表盘:

    • 集群资源仪表盘:
      • 导入预建仪表盘(如 ID 3119 用于节点监控):
        • 在 Grafana 中选择 Create > Import,输入 ID 3119,加载 Kubernetes 集群仪表盘。
        • 仪表盘显示 CPU、内存、网络等指标,例如内存使用率公式:$ \text{内存使用率} = \frac{\text{已用内存}}{\text{总内存}} \times 100% $。
    • 应用指标仪表盘:
      • 手动创建面板:选择 Create > Dashboard > Add new panel
      • 在 Query 选项卡中,选择 Prometheus 数据源,输入应用指标查询(如 http_requests_total 计算请求率)。
        • 错误率公式示例:$ \text{错误率} = \frac{\text{http_requests_total{status="500"}}}{\text{http_requests_total}} \times 100% $。
      • 设置可视化类型(如图表、仪表),保存仪表盘。
    • 示例仪表盘元素:
      • CPU 使用率:折线图显示所有节点趋势。
      • Pod 状态:表格显示运行/失败计数。
      • 应用延迟:直方图展示请求延迟分布。
  • 优化:

    • 设置告警:在 Grafana 面板中配置规则(如 CPU > 80% 时触发)。
    • 使用变量:在仪表盘中添加集群或命名空间变量,实现动态过滤。

总结

通过以上步骤,您已实现 K8s 集群的全面监控:Prometheus 收集资源与应用指标,Grafana 提供实时可视化仪表盘。此方案可扩展性强,支持自定义指标和告警。

  • 优势:实时监控、快速故障诊断、资源优化依据。
  • 后续建议:定期更新 Helm chart,集成 Alertmanager 告警,并扩展应用到业务指标(如数据库查询延迟)。

如需更详细配置(如特定应用指标),请提供更多上下文,我将进一步优化指导!

更多推荐