【Kubernetes】如何使用 Prometheus 和 Grafana 监控 Kubernetes 集群?

发布于:2025-04-12 ⋅ 阅读:(35) ⋅ 点赞:(0)

1. Prometheus 和 Grafana 简介

  • Prometheus 是一个开源的监控系统,专为高效地抓取和存储时间序列数据而设计。它通过拉取(pull)方式从目标系统中获取指标数据,并提供强大的查询语言 PromQL。

  • Grafana 是一个开源的分析和可视化平台,通常与 Prometheus 配合使用,提供实时的仪表盘和可视化界面来展示 Prometheus 收集的监控数据。

2. 部署 Prometheus 和 Grafana

在 Kubernetes 上部署 Prometheus 和 Grafana,通常有两种方法:

  • 使用 Helm Charts(推荐方法)。
  • 手动配置和部署。
1.1 使用 Helm 部署 Prometheus 和 Grafana

首先,需要确保集群中已经安装了 Helm。可以使用以下命令安装 Helm:

# 安装 Helm
curl https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz | tar xz
mv linux-amd64/helm /usr/local/bin/helm
1.2 部署 Prometheus

Prometheus 可以通过 Helm Chart 安装。使用官方的 Helm Chart 仓库进行安装:

# 添加 Prometheus 的 Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# 安装 Prometheus
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace

该命令会在 monitoring 命名空间中安装 Prometheus,包括 Prometheus Server、Alertmanager、Pushgateway 等组件,并且自动配置了一些默认的监控项,专门用来监控 Kubernetes 集群的健康状况、资源使用情况等。

1.3 部署 Grafana

Grafana 会自动与 Prometheus 集成,Helm 安装时也会将 Grafana 部署为其中的一部分。你可以使用以下命令查看 Grafana 是否已经成功安装:

kubectl get pods -n monitoring

Grafana 默认会作为一个服务运行,使用以下命令来获取 Grafana 的服务地址(例如:NodePort 或 LoadBalancer):

kubectl get svc -n monitoring

可以通过该地址访问 Grafana Web 界面。默认的登录用户名和密码是:

  • 用户名:admin
  • 密码:prom-operator
1.4 配置 Prometheus 数据源

Grafana 会自动配置 Prometheus 作为数据源。如果没有自动配置,手动配置:

  1. 进入 Grafana Web 界面(例如:http://<Grafana_IP>:3000)。
  2. 在左侧导航栏选择 Configuration -> Data Sources -> Add Data Source
  3. 选择 Prometheus 作为数据源类型,配置 Prometheus 的 URL(例如:http://prometheus-server.monitoring.svc.cluster.local:80)。
1.5 Grafana 中的仪表盘

Grafana 提供了许多现成的仪表盘,用于监控 Kubernetes 集群。可以直接导入一些预定义的 Kubernetes 仪表盘,也可以自己创建和定制。

  • 访问 Grafana 后,在左侧菜单中选择 ExploreDashboards,并搜索“Kubernetes”相关的仪表盘(例如,ID 为 315 的 Kubernetes 集群监控仪表盘)。

通过 Grafana 的 UI 来查看和创建自定义仪表盘,进行实时监控。


3. Prometheus 的监控目标和指标

在 Kubernetes 集群中,Prometheus 主要通过以下几种方式收集监控指标:

  • Kubernetes 组件监控:Prometheus 会自动收集 Kubernetes API Server、kube-scheduler、kubelet、kube-controller-manager 等核心组件的健康和性能指标。

  • 节点监控:通过 node-exporter,Prometheus 会收集节点的 CPU、内存、磁盘、网络等资源使用指标。

  • Pod 监控:Prometheus 会通过 Kubelet 的 cAdvisor 收集每个 Pod 内部容器的资源使用情况(如 CPU、内存、网络等)。

  • 服务监控:Prometheus 可以通过 ServiceMonitorPodMonitor 来监控特定的服务和应用。

  • 自定义应用监控:你也可以通过暴露 Prometheus 格式的自定义指标接口来监控你的应用程序。

Prometheus 使用 Kubernetes SD (Service Discovery) 功能来动态发现集群中的服务、节点和Pod,并自动开始抓取相关指标数据。

4. Prometheus 查询与告警

4.1 PromQL 查询语言

Prometheus 提供了强大的查询语言 PromQL,用于查询时间序列数据。以下是一些常见的 PromQL 查询示例:

  • 查询某一节点的 CPU 使用率:

    node_cpu_seconds_total{mode="user", instance="node1"}
    
  • 查询某个 Pod 的内存使用量:

    container_memory_usage_bytes{pod="my-pod"}
    
  • 查询某个服务的 HTTP 请求数:

    http_requests_total{job="my-service"}
    
4.2 告警规则

Prometheus 支持通过 Alertmanager 配置告警规则。当某些指标达到预定义的阈值时,Prometheus 会触发告警,并通过 Alertmanager 将告警发送到 Slack、邮件等通知渠道。

例如,以下是一个简单的告警规则示例,当某个 Pod 的内存使用超过 80% 时触发告警:

groups:
- name: pod-alerts
  rules:
  - alert: HighMemoryUsage
    expr: container_memory_usage_bytes / container_spec_memory_limit_bytes > 0.8
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "Pod {{ $labels.pod }} is using more than 80% memory"

该告警规则将被 Prometheus 自动评估,并根据告警条件触发告警。

5. Grafana 仪表盘与可视化

Grafana 为 Prometheus 收集的数据提供可视化支持,允许你创建实时监控仪表盘。你可以使用 Grafana 提供的 Kubernetes 监控仪表盘,也可以根据自己的需求创建自定义仪表盘。

5.1 导入预定义仪表盘

你可以导入 Grafana 官方提供的 Kubernetes 仪表盘,进行集群监控。

例如:

  • Kubernetes 集群监控:ID 为 315 的仪表盘。
  • 节点监控仪表盘:ID 为 1860 的仪表盘。

只需在 Grafana 中选择 Dashboard -> Import,然后输入仪表盘的 ID 即可。

5.2 创建自定义仪表盘

你可以选择任何 Prometheus 查询,并将它们可视化为图表、表格、警报等。Grafana 提供了丰富的可视化组件,包括折线图、柱状图、热力图等,可以帮助你根据业务需求定制仪表盘。

6. 总结

  • Prometheus 用于收集和存储 Kubernetes 集群中的指标数据,并提供强大的查询能力。
  • Grafana 用于展示 Prometheus 收集到的指标数据,提供图形化的实时监控仪表盘。
  • 使用 Helm 安装 Prometheus 和 Grafana 可以快速部署,并通过默认配置自动收集 Kubernetes 集群的核心组件和资源监控数据。
  • 通过 Prometheus 查询语言(PromQL)和 Grafana 仪表盘,可以高效地监控 Kubernetes 集群的状态、资源使用情况、服务健康等。

https://github.com/0voice


网站公告

今日签到

点亮在社区的每一天
去签到