云原生之k8s集成数据采集工具Prometheus
核心概念时间序列数据:Prometheus 存储所有数据为时间序列(随时间变化的指标),每个数据点包含时间戳和数值。指标(Metric):具有名称和标签的多维数据模型,例如。拉取模型(Pull-based):Prometheus 主动从配置的目标(如 HTTP 端点)拉取指标数据。PromQL:强大的查询语言,支持聚合、筛选、数学运算等操作,用于分析指标数据。
·
一、Prometheus 详细介绍
1. 核心概念
- 时间序列数据:Prometheus 存储所有数据为时间序列(随时间变化的指标),每个数据点包含时间戳和数值。
- 指标(Metric):具有名称和标签的多维数据模型,例如
http_requests_total{method="GET", status="200"}。 - 拉取模型(Pull-based):Prometheus 主动从配置的目标(如 HTTP 端点)拉取指标数据。
- PromQL:强大的查询语言,支持聚合、筛选、数学运算等操作,用于分析指标数据。
2. 架构组件
- Prometheus Server:
- 负责抓取(Scrape)和存储时间序列数据。
- 内置时序数据库(TSDB),支持本地存储和远程写入(如 Thanos、InfluxDB)。
- Exporters:
- 将第三方系统的指标转换为 Prometheus 兼容格式的工具(如 Node Exporter 监控主机指标)。
- Pushgateway:
- 允许短生命周期任务(如批处理作业)将指标推送到中间网关,再由 Prometheus 拉取。
- Alertmanager:
- 处理来自 Prometheus 的告警,进行去重、分组、静默,并路由到通知渠道(如邮件、Slack)。
- Client Libraries:
- 支持多种编程语言(如 Go、Java、Python),用于在应用中直接暴露 Prometheus 指标。
3. 核心功能
- 服务发现:自动发现监控目标(如 Kubernetes Pod、Service)。
- 动态配置:通过 Reload API 或 Kubernetes ConfigMap 更新配置。
- 告警规则:定义基于 PromQL 的告警条件(如 CPU 使用率超过 90%)。
- 可视化:原生 Web UI 支持简单图表,通常与 Grafana 集成实现高级可视化。

二、将 Prometheus 集成到 Kubernetes 集群
方法 1:使用 Helm 部署 Prometheus Stack
Helm 是 Kubernetes 的包管理工具,可快速部署包含 Prometheus、Alertmanager、Grafana 等的完整监控栈。
步骤 1:安装 Helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
步骤 2:添加 Prometheus Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
步骤 3:安装 kube-prometheus-stack
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false
serviceMonitorSelectorNilUsesHelmValues=false:允许 Prometheus 发现所有 ServiceMonitor,不限于 Helm 管理的资源。
步骤 4:验证部署
kubectl get pods -n monitoring
应看到以下 Pod:
prometheus-prometheus-kube-prometheus-prometheus-*alertmanager-prometheus-kube-prometheus-alertmanager-*grafana-*
步骤 5:访问 Web 界面
-
Prometheus:
kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n monitoring 9090:9090浏览器访问
http://localhost:9090 -
Grafana:
kubectl get secret -n monitoring prometheus-grafana -o jsonpath='{.data.admin-password}' | base64 -d kubectl port-forward svc/prometheus-grafana -n monitoring 3000:80访问
http://localhost:3000,使用用户名admin和上一步获取的密码登录。
方法 2:手动部署 Prometheus Operator
Prometheus Operator 简化了 Prometheus 在 Kubernetes 上的管理。
步骤 1:安装 Prometheus Operator
kubectl create namespace monitoring
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yaml
步骤 2:部署 Prometheus 实例
创建 prometheus.yaml:
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
namespace: monitoring
spec:
serviceAccountName: prometheus
serviceMonitorSelector: {}
resources:
requests:
memory: 400Mi
enableAdminAPI: false
应用配置:
kubectl apply -f prometheus.yaml
步骤 3:部署 ServiceMonitor
示例 ServiceMonitor 用于监控 Kubernetes API:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: kube-apiserver
namespace: monitoring
spec:
endpoints:
- port: https
scheme: https
tlsConfig:
insecureSkipVerify: true
selector:
matchLabels:
component: apiserver
应用配置:
kubectl apply -f servicemonitor.yaml
步骤 4:配置持久化存储(可选)
修改 prometheus.yaml,添加持久化卷声明:
spec:
storage:
volumeClaimTemplate:
spec:
storageClassName: standard
resources:
requests:
storage: 50Gi
关键配置说明
- 服务发现:通过
ServiceMonitor或PodMonitor自动发现监控目标。 - RBAC:确保 ServiceAccount 具有访问 Kubernetes API 的权限。
- 告警规则:通过
PrometheusRule资源定义告警条件。 - 远程存储:集成 Thanos 或 Cortex 实现长期存储和高可用。
三、监控 Kubernetes 集群组件
1. 监控节点资源
- Node Exporter:部署 DaemonSet 收集节点指标。
- ServiceMonitor:配置 Prometheus 抓取 Node Exporter 数据。
2. 监控 Kubernetes 核心组件
- kube-state-metrics:部署以获取 Kubernetes 资源状态(如 Deployment、Pod 状态)。
- kube-apiserver、kube-controller-manager、kube-scheduler:通过 ServiceMonitor 监控其指标端点。
3. 应用监控
- 暴露应用指标:在应用中集成 Prometheus Client Library,暴露
/metrics端点。 - 配置 ServiceMonitor:定义如何抓取应用的指标。
四、告警与可视化
1. 配置 Alertmanager
创建 alertmanager.yaml 定义告警路由:
route:
receiver: 'slack-notifications'
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#alerts'
send_resolved: true
api_url: 'https://hooks.slack.com/services/XXX/YYY/ZZZ'
2. Grafana 仪表盘
- 导入官方仪表盘(如 ID
315查看 Kubernetes 集群概览)。 - 自定义仪表盘使用 PromQL 查询数据。
五、生产环境注意事项
- 高可用:部署多个 Prometheus 实例,使用 Thanos 或 Cortex 实现全局查询和存储。
- 资源限制:为 Prometheus 和 Alertmanager 设置合理的 CPU/内存限制。
- 安全:
- 启用 TLS 加密指标端点。
- 使用 NetworkPolicy 限制对 Prometheus 的访问。
- 备份:定期备份 Prometheus 数据或配置远程存储。
总结
通过 Helm 或 Prometheus Operator 在 Kubernetes 中部署 Prometheus,能够高效监控集群和应用状态。结合 Alertmanager 和 Grafana,可实现完整的监控告警体系。根据实际需求调整资源配置、存储方案和告警规则,确保系统稳定性和可观测性。
更多推荐




所有评论(0)