深入 Prometheus 监控生态 - 第一篇:原理与架构详解
Prometheus 通过 pull 模式采集时序数据,结合 PromQL 查询语言和告警系统,适合大规模分布式架构的监控需求。它与 Grafana、Alertmanager 等工具紧密集成,提供了强大的监控、告警、可视化能力。
文章目录
Prometheus 是什么?
Prometheus 是一个开源的监控和告警系统,最初由 SoundCloud 开发,现已成为 CNCF 的一个重要项目。它的基本原理、架构和配套使用的插件如下:
基本原理
Prometheus 基于时间序列的数据存储和查询,它主要通过主动拉取(pull)方式从被监控的目标(targets)中收集数据。每个被监控的服务暴露一个 HTTP 端点(通常是 /metrics
),Prometheus 定期从这些端点拉取指标数据,并存储在时序数据库中。
Prometheus 采用的时间序列数据模型是多维度的,包含如下组成部分:
-
Metric 名称:
指标的名称,如http_requests_total
,用于描述具体的监控指标。 -
标签(Label):
指标的标签用于为同一个指标打上不同的维度,如method="POST"
或status="200"
。 -
时间戳:
每个数据点带有一个时间戳,记录数据收集的时间。 -
值:
在特定时间点采集的数值。
解决的问题
Prometheus 主要用于监控和告警,适用于大规模分布式系统。它可以帮助你实现以下功能:
-
实时监控:
实时采集和存储系统、服务的运行指标数据(如 CPU 使用率、内存占用、网络流量等)。 -
历史查询:
存储的时间序列数据可以用于分析历史性能,查询特定时间点的系统状态。 -
告警:
基于收集到的监控数据,Prometheus 可以设置告警规则,当某个指标超过预设阈值时,触发告警(如 CPU 占用率超过 90%)。 -
自动发现目标:
通过服务发现或静态配置,自动找到需要监控的服务和实例,动态调整监控对象。
Prometheus 架构
Prometheus 的架构由多个组件组成,主要包括以下部分:
-
Prometheus Server:
核心组件,负责从各个数据源拉取指标数据,存储时间序列数据,并提供查询功能(通过 PromQL)。 -
Pushgateway:
对于不适合通过 pull 模式获取数据的场景(如短暂性任务),可使用 Pushgateway 将数据推送给 Prometheus。 -
Alertmanager:
用于处理 Prometheus 的告警,定义告警规则,并将告警信息发送给邮件、Slack、PagerDuty 等通知渠道。 -
Exporter:
每个被监控的服务通过 Exporter 暴露监控指标。常见的 Exporter 包括 Node Exporter(监控系统层面的指标)、MySQL Exporter、Redis Exporter 等。
Prometheus 的常见组件及配套插件
-
Grafana:
Grafana 是一个流行的开源可视化工具,常与 Prometheus 配合使用来创建漂亮的仪表板,实时展示系统和服务的运行状况。 -
Node Exporter:
用于采集主机系统指标,如 CPU、内存、磁盘使用率等。 -
Blackbox Exporter:
用于执行网络探测(如 HTTP、TCP、DNS 检查),监控外部站点的可用性。 -
Alertmanager:
作为告警管理器,可以对 Prometheus 发出的告警进行分类、分组、去重和发送到不同的告警接收端。 -
Thanos:
一个用于解决 Prometheus 在大规模集群中存储和高可用性问题的插件。Thanos 可以扩展 Prometheus 的存储,并支持跨多个 Prometheus 实例的查询。 -
Prometheus Operator:
这是在 Kubernetes 环境中管理 Prometheus 的工具,简化了 Prometheus 的部署、配置和管理。
常见部署方案(exporter)
下面提供各系统/设备/容器常见的监控部署方案:
1. 网络等硬件设备监控(snmp-exporter)
如,交换机/路由器/防火墙/nas等,通常使用 snmp 获取监控硬件信息,部署流程如下:
开启 snmp → 部署 snmp-exporter → Prometheus 抓取 exporter 信息 → Grafana 抓取 Prometheus 信息制作看板 + 警告规则 + 信息推送
- snmp: snmp 服务一般都有,只需要开启就好了
- snmp-exporter:需要查阅设备厂商的 mib 文档,过滤出自己要监控的信息(不过滤的话,信息获取会很慢)
- Grafana:可以制作看板,更直观地查看性能使用情况,并且新版 Grafana 还支持企业微信、钉钉、飞书等报警信息推送
2. 操作系统信息监控(node-exporter)
如,Ubuntu,Centos等,通常需要部署 node-exporter 获取监控系统信息,如:CPU、内存、磁盘使用率等,部署流程如下:
部署 node-exporter → Prometheus 抓取 Exporter 信息 → Grafana 抓取 Prometheus 信息制作看板 + 警告规则 + 信息推送
3. 服务器硬件信息监控(ipmi-exporter)
该服务器必须支持 IPMI ,如:Dell、Supermicro 等服务器,通常需要部署 ipmi-exporter 获取监控硬件信息,如:CPU、内存、磁盘使用率等,部署流程如下:
部署 ipmi-exporter → Prometheus 抓取 Exporter 信息 → Grafana 抓取 Prometheus 信息制作看板 + 警告规则 + 信息推送
- ipmi: BIOS 设置通常有个选项可开/禁 ipmi 功能,相比 node,它抓取的是设备硬件信息,如:磁盘健康信息,阵列信息等
4. 服务器硬件信息监控(品牌机)
部分品牌服务器会有一个自己的管理后台,如 Dell 的 OpenManage Enterprise(OME)或 iDRAC ,结合 Prometheus Exporter 实现监控。戴尔的 OME 提供了集中式的硬件管理功能,尤其是戴尔 PowerEdge 服务器,部署流程如下:
安装 OME 和启用 API → 编写和部署 Prometheus Exporter → Prometheus 抓取 Exporter 信息 → Grafana 抓取 Prometheus 信息制作看板 + 警告规则 + 信息推送
- 编写 Exporter:需要查看品牌机文档,通过调用 API 获取硬件设备信息,然后制定一个 Exporter
5. k8s 各节点及其容器信息监控
K8s 节点的软件和硬件健康信息,参考上方 2. 操作系统信息监控 和 3. 服务器硬件信息监控(IPMI) 可实现信息监控。K8s 容器监控得额外部署一个 kube-state-metrics 容器(dockerhub 上有)。它通过与 Kubernetes API 服务器交互,收集集群中所有资源的状态信息,将这些信息转化为 Prometheus 格式的指标,供 Prometheus 抓取,部署流程如下:
K8s 创建角色(若要)→ K8s/helm 部署 kube-state-metrics → Prometheus 抓取 Exporter 信息 → Grafana 抓取 Prometheus 信息制作看板 + 警告规则 + 信息推送
- kube-state-metrics:通常结合两种方式来监控 Kubernetes:
- cAdvisor:用于监控 Pod 内的容器资源使用情况(CPU、内存等)。
- kube-state-metrics:用于监控 Kubernetes 对象的状态和变化,如 Pod 状态、Deployment 副本数、Service 状态等。
总结
Prometheus 通过 pull 模式采集时序数据,结合 PromQL 查询语言和告警系统,适合大规模分布式架构的监控需求。它与 Grafana、Alertmanager 等工具紧密集成,提供了强大的监控、告警、可视化能力。
后续还有更多 Prometheus 监控实操篇章更新,会根据现有资源进行一次部署,其中包含详细操作和解决思路。
目前,已更新的 Prometheus 及其相关篇章有:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)