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 选项,可以生成共享链接或嵌入代码,将仪表盘或图表嵌入到其他应用中。

相关推荐
EasyNVR2 小时前
NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案
安全·音视频·监控·视频监控
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
Kkooe6 小时前
GitLab|数据迁移
运维·服务器·git
久醉不在酒7 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
虚拟网络工程师8 小时前
【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
运维·服务器·网络·数据库·mariadb
BLEACH-heiqiyihu8 小时前
RedHat7—Linux中kickstart自动安装脚本制作
linux·运维·服务器
可观测性用观测云9 小时前
巧用观测云可用性监测(云拨测)
监控
MXsoft6189 小时前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
1900439 小时前
linux6:常见命令介绍
linux·运维·服务器
Camellia-Echo10 小时前
【Linux从青铜到王者】Linux进程间通信(一)——待完善
linux·运维·服务器