深入 Prometheus 监控生态 - 第一篇:原理与架构详解

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:
    1. cAdvisor:用于监控 Pod 内的容器资源使用情况(CPU、内存等)。
    2. kube-state-metrics:用于监控 Kubernetes 对象的状态和变化,如 Pod 状态、Deployment 副本数、Service 状态等。

总结

Prometheus 通过 pull 模式采集时序数据,结合 PromQL 查询语言和告警系统,适合大规模分布式架构的监控需求。它与 Grafana、Alertmanager 等工具紧密集成,提供了强大的监控、告警、可视化能力。

后续还有更多 Prometheus 监控实操篇章更新,会根据现有资源进行一次部署,其中包含详细操作和解决思路。

目前,已更新的 Prometheus 及其相关篇章有:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值