概述
Prometheus
Prometheus是一个云原生计算基金会项目,是一个系统和服务监控系统。它以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并可以在观察到指定条件时触发警报。Prometheus是Kubeernetes的事实标准。Prometheus仓库地址:https://github.com/prometheus/prometheus。
Prometheus包含以下组件:
- Prometheus Server:
- 数据搜集:定期从配置的位置抓取指标
- 数据存储:存储抓取到的指标数据
- 查询:提供PromQL
- 规则提醒或警报:对指标数据进行规则评估,生成新的时间序列或触发告警
- Exporters:这些是外部进程,用于将现有的第三方服务和应用程序指标转换为Prometheus可以抓取的格式。例如,node_exporter用于提取操作系统级指标。
- Pushgateway:用于短暂的批处理作业。由于 Prometheus 本质上是一个抓取模型,因此 Pushgateway 允许短暂的任务推送指标,以便 Prometheus 可以随后抓取
- Prometheus Pushgateway仓库。允许临时和批处理作业向 Prometheus 公开其指标,这些类型的作业可能存在的时间不够长,无法抓取,因此他们可以将其指标推送到 Pushgateway,然后,Pushgateway将这些指标公开给Prometheus。
- AlertManager:管理警报。当 Prometheus 检测到某些条件满足预先配置的规则时,它会向 AlertManager 发送警报,然后 AlertManager 负责通知或采取其他操作。
- Client Libraries:允许用户在其应用程序中集成和导出自定义指标。
Google Cloud Managed Service for Prometheus
Google Cloud Managed Service for Prometheus是Google对于Prometheus的托管服务,它托管指标的完全托管的收集、存储和查询服务。它建立在Monarch之上,Monarch是一个全球可扩展数据存储服务,为Google的所有应用程序监控提供支持。在标准 Prometheus 部署中,数据收集、查询评估、规则和提醒评估,以及数据存储都在单个 Prometheus 服务器中处理。Managed Service for Prometheus 将这些功能的责任拆分为多个组件:
- 数据收集由代管式收集器、自行部署的收集器、OpenTelemetry 收集器或 Ops Agent 处理,这些收集器或代理会爬取本地导出器,并将收集到的数据转发到 Monarch。这些收集器可用于 Kubernetes 和传统工作负载,并且可以在任何地方运行,包括其他云和本地部署。
- 查询评估由 Monarch 处理,它会在所有 Google Cloud 区域和多达 1,000 个 Google Cloud 项目中执行查询并联合结果。
- 规则和提醒评估由本地运行和本地配置的规则评估器组件处理,这些组件针对全局 Monarch 数据存储区执行规则和提醒,并将所有触发的提醒转发到 Prometheus AlertManager
- 数据存储由 Monarch 处理,它会将所有 Prometheus 数据存储 24 个月,不产生额外费用。
Grafana 连接到全局 Monarch 数据存储区,而不是连接到各个 Prometheus 服务器。
部署
代管式搜集器
以下默认已经启用了 Cloud Monitoring API 的 Google Cloud 项目,创建了GKE集群并在本地设置好了gcloud和kubectl工具。
启用代管式搜集器
启用代管式收集会在集群中安装以下组件:
- gmp-operator Deployment,用于为 Managed Service for Prometheus 部署 Kubernetes Operator。
- rule-evaluator Deployment,用于配置并运行提醒和记录规则。
- collector DaemonSet,用于从与收集器所在节点上运行的 Pod 爬取指标来横向扩缩收集。
- alertmanager StatefulSet,配置为向首选通知渠道发送触发的提醒。
在GKE 1.25 版或更高版本的 GKE Autopilot 集群和GKE 1.27 版或更高版本的 GKE Standard 集群,代管式搜集器是默认启用的。
1 | gcloud container clusters update CLUSTER_NAME --enable-managed-prometheus --zone ZONE/REGION |
配置PodMonitoring资源
假设有一个在metrics 端口上发出 example_requests_total 计数器指标和 example_random_numbers 直方图指标的应用:
1 | apiVersion: monitoring.googleapis.com/v1 |
启用目标状态
启用目标状态可以检查资源的目标状态,通过如下启动:
1 | apiVersion: monitoring.googleapis.com/v1 |
查询应用注入的指标
参见 https://cloud.google.com/stackdriver/docs/managed-prometheus/query?hl=zh-cn#gmp-in-monitoring
配置Prometheus和Grafana
部署Prometheus前端页面
1 | apiVersion: apps/v1 |
修改上述AUTH_USERNAME,AUTH_PASSWORD,然后将$PROJECT_ID修改为字面量,如果不知道可以通过gcloud projects list查看。
Grafana页面
1 | kubectl -n monitor apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/beb779d32f4dd531a3faad9f2916617b8d9baefd/examples/grafana.yaml |
然后可以在本地访问http://localhost:3000,即可看到Grafana页面。