01 一文理解,Prometheus详细介绍

01 一文理解,Prometheus详细介绍

介绍

大家好,我是秋意零。

Prometheus 是一个开源的系统监控和报警工具包,最初由SoundCloud开发,并在2012年作为开源项目发布。Prometheus 目前由Cloud Native Computing Foundation(CNCF)维护,已经成为监控和报警系统的事实标准,尤其在云原生环境中。

主要功能

  1. 多维数据模型:通过标签(键值对)定义的时间序列数据模型,可以灵活地对指标进行分类和过滤。
  2. 强大的查询语言(PromQL):提供了强大的查询语言 PromQL,允许用户对存储的时间序列数据进行复杂的查询和聚合操作。
  3. 时间序列数据库:内置高效的时间序列数据库,用于存储所有抓取到的指标数据。
  4. 抓取拉模型:使用 HTTP 协议定期从被监控的目标抓取指标数据,采用"拉"的方式获取数据。
  5. 自动化服务发现:支持多种服务发现机制,如 Kubernetes、Consul、DNS 等,可以自动发现监控目标。
  6. 多种数据导出格式:支持多种 Exporter,可以通过标准化的格式暴露各种系统和应用的指标。
  7. 告警管理:集成 Alertmanager,用于定义和处理告警规则,并支持多种通知方式,如邮件、Slack、PagerDuty 等。
  8. 可视化:内置简单的图表展示功能,并且与 Grafana 深度集成,可以创建复杂的仪表盘进行数据可视化。
  9. 扩展性强:通过远程存储接口,可以与其他存储系统集成,扩展 Prometheus 的数据存储能力。

架构图

架构图分解:

  • 左边部分:采集区(指标收集)
  • 中间部分:存储计算区(数据处理)
  • 右边部:应用区(告警、展示)

1)采集区

Exporters:用于将各种系统、服务和应用程序的指标转换为 Prometheus 可抓取格式的组件。它们通常运行在被监控系统的旁边,并持续暴露指标给 Prometheus 抓取。

特点:

持续运行: Exporters 通常作为长期运行的服务,持续暴露指标。

主动抓取: Prometheus 定期抓取 Exporters 暴露的指标。

标准化接口: Exporters 通常提供一个标准化的 HTTP 接口,Prometheus 通过配置抓取这些接口的数据。

应用场景:

  • 系统级监控: Node Exporter 用于收集主机系统的指标(如 CPU、内存、磁盘使用情况)。
  • 服务监控: MySQL Exporter、Redis Exporter 分别用于监控 MySQL 数据库和 Redis 服务。
  • 应用监控: Prometheus Python Client 用于监控基于 Python 的应用程序,通过集成 Prometheus 客户端库暴露的指标。

示例:

node_exporter 暴露主机系统的指标,Prometheus 定期抓取这些指标。

mysql_exporter 暴露 MySQL 数据库的性能指标,Prometheus 抓取这些指标进行监控。

Pushgateway:用于收集短暂或非常驻任务的指标的组件,这些任务可能无法持续运行以供 Prometheus 主动抓取。

特点:

指标推送: 短暂或一次性的作业将指标推送到 Pushgateway,而不是等待 Prometheus 抓取。

临时存储: Pushgateway 作为一个中间层,临时存储这些推送过来的指标,直到 Prometheus 来抓取。

适合短期任务: 主要用于那些无法持续运行的任务,例如批处理作业、临时脚本等。

应用场景:

  • 短暂作业监控: 例如,每天凌晨运行一次的数据处理批处理作业,通过 Pushgateway 推送指标。
  • 非常驻任务: 例如,临时启动的脚本或作业,这些任务在完成后会立即终止。

示例:

一个定时运行的批处理作业在完成后推送其运行时间和错误数到 Pushgateway,Prometheus 定期从 Pushgateway 抓取这些指标。

2)存储计算区

Prometheus 的 Service Discovery 功能旨在自动发现并监控动态基础设施中的目标(例如,容器化环境中的服务实例)。这是 Prometheus 在云原生环境中广泛使用的一个关键特性。

主要功能:

  • 自动发现监控目标:Prometheus 可以自动发现并监控动态变化的服务,无需手动更新配置。这对于容器化应用和动态伸缩的服务特别有用。
  • 支持多种服务发现机制:Prometheus 支持多种常见的服务发现机制,涵盖了大多数现代基础设施和编排系统。

支持的服务发现机制:

  • Kubernetes:自动发现 Kubernetes 集群中的所有服务、Pod 和 Endpoints,并根据标签和注解进行过滤和选择。
  • Consul:使用 Consul 服务发现注册表来自动发现并监控注册的服务。
  • DNS SRV 记录:基于 DNS SRV 记录来发现服务,适用于使用 DNS 进行服务发现的环境。
  • EC2:自动发现 AWS EC2 实例,根据标签和元数据来筛选目标。
  • GCE:自动发现 Google Cloud Engine (GCE) 实例,支持基于标签的过滤。
  • Azure:支持 Azure 虚拟机和规模集的自动发现,基于标签进行筛选。
  • OpenStack:支持 OpenStack 实例的自动发现,通过 OpenStack API 获取实例信息。
  • Triton:支持 Triton 数据中心自动发现实例。
  • Marathon:支持 Mesos/Marathon 环境的服务自动发现。
  • 文件静态配置:通过静态文件配置实现自定义的服务发现机制,文件内容会被动态重新加载。

使用示例

以下是一个Prometheus 配置,使用 Kubernetes 服务发现的示例:

这段配置将会抓取 Kubernetes 集群中所有属于 default 命名空间的 Pod。

yaml 复制代码
scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_name]
        separator: ;
        regex: default;(.*)
        target_label: pod_name
        replacement: $1
        action: replace

Prometheus Server 由多个核心组件组成,其中 Retrieval(收集)、TSDB(存储) 和 HTTP Server(查询) 是其关键部分。

a)Retrieval(数据检索) 组件负责从配置的监控目标(scrape targets)中定期抓取指标数据。它是 Prometheus 的数据采集部分。

主要功能

  • 抓取配置 :根据 prometheus.yml 中的 scrape_configs 配置,确定需要抓取的监控目标和抓取频率。
  • 数据抓取 :通过 HTTP 请求定期访问每个监控目标的 /metrics 端点,获取最新的指标数据。
  • 标签处理:在抓取过程中对指标数据进行标签重写(relabeling)和筛选,以确保数据的一致性和可用性。

工作流程

  • 配置抓取目标 :Prometheus 根据 scrape_configs 配置确定抓取目标。
  • 定期抓取数据:按照配置的抓取频率,通过 HTTP 请求抓取每个目标的指标数据。
  • 标签处理和过滤:对抓取到的指标数据进行标签处理和过滤。
  • 传递给存储组件:将处理后的数据传递给存储组件(TSDB)。

b)TSDB(时间序列数据库):TSDB(Time Series Database)是 Prometheus 内置的时间序列数据库,用于高效地存储和压缩时间序列数据。

主要功能

  • 数据存储:存储从监控目标抓取的所有指标数据。
  • 数据压缩:使用高效的存储格式和压缩算法,减少存储空间占用。
  • 数据检索:支持快速的时间序列数据检索,满足查询和分析需求。

工作流程

  1. 接收数据:接收 Retrieval 组件抓取并处理后的指标数据。
  2. 存储和压缩:将数据按照时间序列的方式进行存储和压缩。
  3. 数据检索:提供高效的数据检索接口,支持 PromQL 查询操作。

存储结构

  • 块存储:TSDB 将数据划分为固定时间跨度的块,每个块包含一组时间序列数据。
  • WAL(预写日志):在写入数据之前,首先记录在 WAL 中,确保数据的持久性和可靠性。
  • 压缩算法:TSDB 使用了多种压缩算法来优化存储效率。

c)HTTP Server(HTTP 服务器):是 Prometheus 提供的 Web 服务接口,用于与用户和其他系统进行交互。它是 Prometheus 的外部接口部分。

主要功能

  • 查询接口:提供 PromQL 查询接口,允许用户通过 HTTP 请求查询时间序列数据。
  • 管理接口 :提供各种管理和调试接口,如 /config/targets/metrics 等,用于查看当前配置、抓取状态和 Prometheus 自身的指标数据。
  • Web UI:提供内置的 Web 界面,用户可以通过浏览器访问 Prometheus 的查询和管理功能。

工作流程

  • 接收请求:接收用户和其他系统通过 HTTP 发起的请求。
  • 处理查询请求:使用 PromQL 从 TSDB 中检索数据并返回结果。
  • 处理管理请求:提供当前配置、抓取状态和 Prometheus 自身的监控数据。
  • 展示 Web UI:通过 Web 界面展示查询结果和管理信息。

3)应用区

Alertmanager 是 Prometheus 监控系统的重要组成部分,专门用于处理和管理告警(alerts)。

主要功能

  1. 接收告警:Alertmanager 从 Prometheus Server 接收告警信息。这些告警是基于 Prometheus 的告警规则定义的,当规则条件满足时触发告警。
  2. 告警去重:对重复的告警进行去重处理,以避免多次发送相同的告警信息。
  3. 告警分组:将相似的告警进行分组,以便于批量处理和发送。例如,可以根据服务或严重程度对告警进行分组。
  4. 告警抑制:支持告警抑制规则,可以在某些条件下抑制告警的发送。例如,当有一个高优先级的告警时,可以抑制相关的低优先级告警。
  5. 告警路由:基于告警内容和标签,定义路由规则,将告警发送到不同的接收器(如邮件、Slack、PagerDuty 等)。
  6. 多种通知渠道:支持多种通知方式,包括邮件、Slack、PagerDuty、Webhook 等,用户可以根据需求配置不同的通知渠道。

工作流程

  1. 告警规则定义:在 Prometheus 的配置文件中定义告警规则,当特定条件满足时触发告警。例如:

    yaml 复制代码
    groups:
      - name: example
        rules:
          - alert: HighCPUUsage
            expr: cpu_usage_seconds_total > 80
            for: 5m
            labels:
              severity: critical
            annotations:
              summary: "High CPU usage detected"
              description: "CPU usage has been above 80% for more than 5 minutes."
  2. 告警发送到 Alertmanager:Prometheus 评估告警规则,当条件满足时,将告警发送到 Alertmanager。

  3. 告警处理

    • Alertmanager 接收告警后,对告警进行去重、分组、抑制等处理。
    • 基于配置的路由规则,将告警路由到相应的接收器。
  4. 通知发送:Alertmanager 将处理后的告警通过配置的通知渠道发送给用户。例如,通过邮件、Slack、PagerDuty 等。

Grafana 是一个开源的、多平台的数据可视化和监控工具,广泛用于构建和查看数据的实时仪表盘。通过 PromQL 与 Prometheus 集成,以查询和可视化 Prometheus 收集的时间序列数据。

主要功能

  1. 数据可视化:提供丰富的图表类型,包括时间序列图、柱状图、饼图、热力图等,用户可以根据需要选择合适的图表类型展示数据。
  2. 多数据源支持:支持多种数据源,包括 Prometheus、Graphite、InfluxDB、Elasticsearch、MySQL、PostgreSQL 等,允许用户从不同的数据源中获取数据进行可视化。
  3. 动态仪表盘:支持创建动态和交互式的仪表盘,用户可以通过变量和模板在仪表盘中切换不同的视图和数据。
  4. 警报和通知:集成告警功能,允许用户基于指定的条件触发告警,并通过邮件、Slack、PagerDuty 等渠道发送通知。
  5. 用户管理:提供用户和团队管理功能,可以定义不同的用户角色和权限,控制仪表盘的访问和编辑权限。
  6. 插件扩展:支持插件系统,用户可以安装和配置第三方插件,扩展 Grafana 的功能和数据源支持。
  7. 共享和嵌入:支持将仪表盘和图表共享给其他用户,或嵌入到其他应用和网页中,方便数据展示和协作。

工作流程

  1. 安装 Grafana:Grafana 可以通过多种方式安装,例如使用 Docker、Kubernetes、二进制文件或包管理器。

    使用 Docker 安装 Grafana:

    bash 复制代码
    docker run -d -p 3000:3000 --name=grafana grafana/grafana
  2. 配置数据源

    • 启动 Grafana 后,访问其 Web 界面(默认地址为 http://localhost:3000),并登录(默认用户名和密码都是 admin)。
    • 进入 Configuration -> Data Sources -> Add data source,选择需要添加的数据源类型,并根据提示填写数据源连接信息。
  3. 创建仪表盘

    • 在 Grafana Web 界面中,进入 Dashboards -> New Dashboard,创建一个新的仪表盘。
    • 添加图表和其他可视化组件,配置查询语句和展示方式。
  4. 设置告警

    • 在图表配置中,进入 Alert 选项卡,定义告警规则和条件。
    • 配置告警通知渠道,例如邮件、Slack、PagerDuty 等。
  5. 共享和嵌入 :在仪表盘设置中,选择 Share 选项,可以生成共享链接或嵌入代码,将仪表盘或图表嵌入到其他应用中。

相关推荐
程序猿小三1 小时前
Linux下基于关键词文件搜索
linux·运维·服务器
虚拟指尖2 小时前
Ubuntu编译安装COLMAP【实测编译成功】
linux·运维·ubuntu
椎4953 小时前
苍穹外卖前端nginx错误之一解决
运维·前端·nginx
刘某的Cloud3 小时前
parted磁盘管理
linux·运维·系统·parted
极验3 小时前
iPhone17实体卡槽消失?eSIM 普及下的安全挑战与应对
大数据·运维·安全
爱倒腾的老唐3 小时前
24、Linux 路由管理
linux·运维·网络
yannan201903133 小时前
Docker容器
运维·docker·容器
_清浅3 小时前
计算机网络【第六章-应用层】
运维·服务器·计算机网络
正在努力的小河3 小时前
Linux 自带的 LED 灯驱动实验
linux·运维·服务器
李子圆圆3 小时前
电力专用多功能微气象监测装置在电网安全运维中的核心价值是什么?
运维·安全