Prometheus 是一个开源的监控系统,专为高效地抓取和存储时间序列数据而设计。它通过拉取(pull)方式从目标系统中获取指标数据,并提供强大的查询语言 PromQL。
Grafana 是一个开源的分析和可视化平台,通常与 Prometheus 配合使用,提供实时的仪表盘和可视化界面来展示 Prometheus 收集的监控数据。
在 Kubernetes 上部署 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
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 集群的健康状况、资源使用情况等。
Grafana 会自动与 Prometheus 集成,Helm 安装时也会将 Grafana 部署为其中的一部分。你可以使用以下命令查看 Grafana 是否已经成功安装:
kubectl get pods -n monitoring
Grafana 默认会作为一个服务运行,使用以下命令来获取 Grafana 的服务地址(例如:NodePort 或 LoadBalancer):
kubectl get svc -n monitoring
可以通过该地址访问 Grafana Web 界面。默认的登录用户名和密码是:
admin
prom-operator
Grafana 会自动配置 Prometheus 作为数据源。如果没有自动配置,手动配置:
Grafana 提供了许多现成的仪表盘,用于监控 Kubernetes 集群。可以直接导入一些预定义的 Kubernetes 仪表盘,也可以自己创建和定制。
315
的 Kubernetes 集群监控仪表盘)。通过 Grafana 的 UI 来查看和创建自定义仪表盘,进行实时监控。
在 Kubernetes 集群中,Prometheus 主要通过以下几种方式收集监控指标:
Kubernetes 组件监控:Prometheus 会自动收集 Kubernetes API Server、kube-scheduler、kubelet、kube-controller-manager 等核心组件的健康和性能指标。
节点监控:通过 node-exporter,Prometheus 会收集节点的 CPU、内存、磁盘、网络等资源使用指标。
Pod 监控:Prometheus 会通过 Kubelet 的 cAdvisor 收集每个 Pod 内部容器的资源使用情况(如 CPU、内存、网络等)。
服务监控:Prometheus 可以通过 ServiceMonitor 和 PodMonitor 来监控特定的服务和应用。
自定义应用监控:你也可以通过暴露 Prometheus 格式的自定义指标接口来监控你的应用程序。
Prometheus 使用 Kubernetes SD (Service Discovery) 功能来动态发现集群中的服务、节点和Pod,并自动开始抓取相关指标数据。
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"}
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 自动评估,并根据告警条件触发告警。
Grafana 为 Prometheus 收集的数据提供可视化支持,允许你创建实时监控仪表盘。你可以使用 Grafana 提供的 Kubernetes 监控仪表盘,也可以根据自己的需求创建自定义仪表盘。
你可以导入 Grafana 官方提供的 Kubernetes 仪表盘,进行集群监控。
例如:
315
的仪表盘。1860
的仪表盘。只需在 Grafana 中选择 Dashboard -> Import,然后输入仪表盘的 ID 即可。
你可以选择任何 Prometheus 查询,并将它们可视化为图表、表格、警报等。Grafana 提供了丰富的可视化组件,包括折线图、柱状图、热力图等,可以帮助你根据业务需求定制仪表盘。
https://github.com/0voice