Prometheus之终极指南(The Ultimate Guide to Prometheus)

Prometheus之终极指南

Prometheus 彻底改变了我们在现代 DevOps 生态系统中监控基础设施、应用程序和服务的方式。它不仅仅是一个工具;它是一个由指标收集、告警和实时监控组成的生态系统,受到 Uber、Google 和 SoundCloud 等组织的信任。在本文中,我们将探讨 Prometheus,包括其架构、高级用例和实际应用。通过本文,您不仅将了解 Prometheus 的工作原理,还将学会如何在项目中有效实施它。让我们开始吧!

什么是 Prometheus?

Prometheus 是一个开源的系统和服务的监控系统,最初由 SoundCloud 于 2012 年构建。自诞生以来,它已成为 云原生计算基金会 (CNCF) 的基石,与其他关键工具如 Kubernetes、Fluentd 和 Helm 并列。Prometheus 的受欢迎程度源于其在监控基础设施和应用程序指标方面的简单性、灵活性和可扩展性。它提供了强大的功能,包括:

  • 收集和存储 时间序列指标,

  • 实时查询数据,

  • 告警和通知,

  • 可视化(使用 Grafana 等工具)。

为什么选择 Prometheus?

Prometheus 是一个用于监控和可观测性的系统,提供了一个创新、强大且灵活的框架,专为复杂的云原生环境设计。随着现代基础设施的规模呈指数级增长,传统的监控工具往往在动态工作负载和分布式系统的压力下表现不佳。然而,Prometheus 重新定义了时间序列数据的收集、存储、查询和可视化方式,与 DevOps 理念无缝契合。

Prometheus 的关键特性和优势

  • 基于拉取的监控:与传统的推送数据监控工具不同,Prometheus 使用拉取模型,使其更高效和可扩展。Prometheus 坚持 拉取模型,与推送导向的监控系统有所不同。Prometheus 服务器主动从目标系统暴露的指定端点定期抓取指标。

  • **强大的查询语言 (PromQL)**:Prometheus 查询语言 (PromQL) 使工程师和操作员能够从原始时间序列数据中提取有意义的见解。其表达式语法支持实时查询、数学计算和跨多维指标的动态告警。它允许您对指标进行切片和切块,以获得深入的洞察,并支持复杂的查询用于告警和仪表板。

  • 可扩展性:可扩展性是 Prometheus 设计理念的核心,解决了监控大量 时间序列数据 的基本需求,既高效又精确。时间序列数据本质上是时间相关的,记录了系统的状态,如 CPU 利用率、磁盘 I/O 或网络延迟,并定期进行记录。随着数据集的增长,传统的监控系统可能会不堪重负,但 Prometheus 的架构决策确保了企业级工作负载的无缝扩展。

Prometheus 架构组件

Prometheus 的架构由多个组件协同工作,以收集、存储、处理和可视化指标。以下是关键组件的详细介绍:

Prometheus 架构的关键组件

1. Prometheus 服务器

Prometheus 服务器是 Prometheus 生态系统的核心。它执行三个主要任务:

  • 数据收集:Prometheus 通过 HTTP 定期从目标端点或导出器抓取指标。

  • 数据存储:它将收集到的指标存储在其本地的 时间序列数据库 (TSDB) 中,该数据库针对快速读写进行了优化。

  • 查询处理:Prometheus 使用 PromQL(Prometheus 查询语言)处理查询,以提取和分析存储的数据。

Prometheus 服务器使用 拉取模型 来检索指标,定期抓取暴露指标的目标端点(例如 /metrics)。

2. 数据模型

Prometheus 使用 多维数据模型 来高效存储和组织指标。

  • 时间序列:指标作为时间序列数据存储,每个数据点都有一个 时间戳 和一个 值。

  • 指标名称和标签:每个时间序列由一个 指标名称 和一组 键值对(标签) 标识。

指标示例:
http_requests_total{method="GET", status="200"}
  • 指标名称:http_requests_total(表示 HTTP 请求总数)

  • 标签:method="GET", status="200"

  • 值:表示特定时间戳的指标的数值。

标签使 Prometheus 能够区分指标的不同维度,使数据模型高度灵活且可查询。

3. 时间序列数据库 (TSDB)

Prometheus 使用其本地的 时间序列数据库 来存储收集到的指标。TSDB 在追加新数据和快速查询现有数据方面非常高效。

  • 存储机制:数据以块的形式存储,以实现高效的内存和磁盘使用。

  • 内存索引:将指标名称和标签映射到相应的时间序列。

  • 保留期:Prometheus 允许配置数据保留期。对于长期存储,可以使用 Thanos 或 Cortex 等工具扩展 Prometheus 的存储能力。

TSDB 的设计确保了大规模系统中读写的高性能。

4. 导出器

并非所有系统都原生暴露 Prometheus 格式的指标。导出器 通过将指标转换为 Prometheus 兼容的数据来填补这一空白。导出器是轻量级进程,将各种系统或应用程序的指标暴露为 Prometheus 可以抓取的格式。导出器通过 HTTP 端点暴露指标,Prometheus 可以抓取这些端点。

常见导出器:

  • Node Exporter:暴露系统级指标(CPU、内存、磁盘使用情况)。

  • Blackbox Exporter:测试外部端点的正常运行时间和延迟。

  • MySQL Exporter:从 MySQL 数据库收集指标。

  • 应用程序特定导出器:适用于数据库、Web 服务器或自定义应用程序。

5. 服务发现

Prometheus 使用 服务发现 动态定位和监控目标,而无需手动配置。这在动态环境(如 Kubernetes、Consul 或静态配置)中特别有用。

服务发现方法:
  • 静态配置:目标在配置文件中手动指定。

动态服务发现:

  • Kubernetes:发现 Pod、服务和端点。

  • 云提供商:AWS、Azure 和 GCP 服务发现。

服务发现使 Prometheus 能够适应不断变化的环境,并确保目标始终是最新的。

6. 指标抓取

Prometheus 采用 拉取模型 来收集指标:

  • 它以配置的间隔从目标端点抓取指标。

  • 目标在 HTTP 端点上暴露指标,通常是 /metrics

指标端点示例:
# HELP http_requests_total Total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="GET", status="200"} 12345
  • Prometheus 获取上述数据并将其作为时间序列存储在 TSDB 中。

拉取模型确保更好地控制数据收集间隔,并使调试更加简单。

7. PromQL(Prometheus 查询语言)

用于无法直接抓取的短期作业或批处理过程的组件。Prometheus 提供了 PromQL,一种专门为时间序列数据分析设计的查询语言。PromQL 允许用户提取、过滤和聚合指标。

PromQL 功能:
  • 时间序列选择:使用标签检索特定指标。

  • 聚合:应用 sum()avg()count() 等函数。

  • 速率计算:使用 rate() 等函数进行基于时间的更改。

  • 过滤:基于特定标签值进行查询。

示例查询:

1. 基本查询:

http_requests_total

2. 返回指标的所有时间序列:

http_requests_total

3. 速率计算:

rate(http_requests_total[5m])

4. 按标签聚合:

sum(rate(http_requests_total[5m])) by (method)

8. Alertmanager

Prometheus 与 Alertmanager 集成,以处理和路由告警。Alertmanager 处理由 Prometheus 告警规则触发的告警。

global:resolve_timeout: 5m
route:receiver: 'team-X-mails'group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 3h
receivers:- name: 'team-X-mails'email_configs:- to: 'team-X+alerts@example.org'from: 'alertmanager@example.org'smarthost: 'smtp.example.org:587'auth_username: 'alertmanager@example.org'auth_identity: 'alertmanager@example.org'auth_password: 'password'
Alertmanager 功能:
  1. 去重:防止重复告警使系统过载。

  2. 分组:将相似的告警分组以便于管理。

  3. 路由:将通知告警发送到指定的接收者(例如电子邮件、Slack、PagerDuty)。

  4. 静音:暂时静音告警。

工作流程:
  1. Prometheus 评估告警规则。

  2. 如果满足条件,则生成告警并发送至 Alertmanager。

  3. Alertmanager 将告警路由到配置的通知渠道。

9. 可视化

Prometheus 支持基本的 表达式浏览器 用于查询指标。对于更高级的可视化,它与 Grafana 无缝集成。

  • Grafana:广泛使用的 Prometheus 数据可视化工具。

  • Prometheus 作为数据源添加到 Grafana 中。

  • 仪表板可以使用 PromQL 查询显示实时指标和趋势。

Grafana 提供了灵活且视觉上吸引人的仪表板,用于分析指标和系统性能。

10. Pushgateway(可选)

虽然 Prometheus 主要使用 拉取模型,但 Pushgateway 用于无法持续暴露指标的系统(例如批处理作业)。

  • 系统将其指标推送到 Pushgateway。

  • Prometheus 抓取 Pushgateway 以收集指标。

Pushgateway 对于 短期作业 和拉取模型不可行的环境非常有用。

Prometheus 的工作原理

1. 数据收集(抓取)
  • Prometheus 定期从配置的目标(例如导出器、应用程序)通过 HTTP 抓取指标。

  • 目标以特定格式(通常是纯文本或 OpenMetrics 格式)暴露指标。

2. 数据存储
  • 抓取的指标存储在 Prometheus 的时间序列数据库中。

  • 每个指标作为时间序列存储,由唯一的指标名称和可选的键值对(标签)标识。

3. 查询和分析
  • 用户使用 PromQL 查询存储的指标。

  • PromQL 允许进行复杂的查询,如聚合、过滤和数学操作,以分析数据。

4. 告警
  • Prometheus 定期评估告警规则。

  • 如果满足规则条件,则触发告警并发送至 Alertmanager。

  • Alertmanager 处理告警并将其发送到配置的渠道。

5. 可视化
  • 可以使用 Grafana 等工具可视化指标,Grafana 将 Prometheus 作为数据源连接。

  • 仪表板提供了对系统性能、趋势和异常的洞察。

设置 Prometheus

安装

要开始使用,您可以从 官方网站[1] 下载最新的 Prometheus 版本。解压 tarball 并运行 Prometheus 服务器:

tar xvfz prometheus-*.tar.gz
cd prometheus-*
./prometheus --config.file=prometheus.yml

配置

prometheus.yml 文件是 Prometheus 配置的核心。以下是一个基本示例:

global:scrape_interval: 15s
scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']

服务发现

Prometheus 支持多种服务发现机制,如 Kubernetes、Consul 等。以下是 Kubernetes 服务发现的示例:

scrape_configs:- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: pod

Prometheus 的高级功能

导出器:扩展指标收集

导出器对于将第三方系统与 Prometheus 集成至关重要。例如,node_exporter 收集由 *NIX 内核暴露的硬件和操作系统指标。

wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.linux-amd64.tar.gz
tar xvfz node_exporter-*.linux-amd64.tar.gz
cd node_exporter-*
./node_exporter

将 node_exporter 添加到您的 Prometheus 配置中:

scrape_configs:- job_name: 'node_exporter'static_configs:- targets: ['localhost:9100']

监控 Kubernetes 集群

Kubernetes 是一个流行的编排平台,Prometheus 常用于监控其健康和性能。kube-prometheus 项目提供了一组全面的清单,用于监控 Kubernetes 集群。

1. 安装 kube-prometheus:
kubectl apply -f https://github.com/prometheus-operator/kube-prometheus/releases/download/v0.*/manifests-*.yaml
2. 访问 Prometheus:
kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090

监控微服务

在微服务架构中,监控单个服务及其交互至关重要。Prometheus 可以与各种微服务框架(如 Spring Boot、Django 等)集成。

1. Spring Boot 集成:

将 micrometer-registry-prometheus 依赖项添加到您的 pom.xml 中:

<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2. 暴露指标:
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
@BeanMeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {return registry -> registry.config().commonTags("application", "my-app");}
}

Prometheus 中的指标

在 Prometheus 中,指标是收集和存储的基本数据点。它们代表了关于您的服务、硬件和应用程序的各种类型的测量。Prometheus 指标有助于监控和分析系统的性能和健康状况。

Prometheus 中的指标类型

Prometheus 支持四种指标类型:

  1. 计数器:计数器是一种随时间递增的指标。它表示一个累积值,永远不会减少(例如,Web 服务器处理的请求数量或发生的错误数量)。

  2. 仪表:仪表是一种可以随时间上下波动的指标。它表示一个可以增加或减少的值(例如,当前内存使用量、温度或活动连接数)。

  3. 直方图:直方图对观察值(通常是持续时间或大小)进行分桶,并提供每个桶中的观察计数以及所有观察值的总和。这允许计算平均值、百分位数和其他统计指标。

  4. 摘要:摘要类似于直方图,因为它跟踪观察值并可以提供统计信息,例如分位数(例如,请求持续时间的第 95 百分位)。与直方图不同,摘要预先计算分位数(例如 0.5、0.9 和 0.99),这在某些用例中更高效。

在实践中,计数器 和 仪表 最常用于跟踪一般指标,而 直方图 和 摘要 更专业,用于处理分布或统计数据。根据用例,您可能会选择一种以获得最佳性能和分析便利性。

结论:

Prometheus 已成为现代分布式系统中可观测性的基石,提供了无与伦比的可扩展性、可靠性和分析能力。其拉取架构、PromQL 查询语言、Alertmanager、导出器以及与 Kubernetes 和 Grafana 的无缝集成,使其成为云原生监控策略的关键组件。

对于 DevOps 从业者来说,Prometheus 不仅仅是一个监控工具;它是系统弹性、性能优化和主动异常检测的推动者。随着软件架构变得越来越动态,Prometheus 已准备好应对未来基础设施的挑战。

准备好通过 Prometheus 增强您的可观测性了吗? 下载 Prometheus 并开始监控您的基础设施。将其与 Grafana 配对以创建仪表板,并与 Alertmanager 配对以进行主动告警。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

活动预告 |【Part2】 Azure 在线技术公开课:迁移和保护 Windows Server 和 SQL Server 工作负载

课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft 云技术的了解。参加我们举办的“迁移和保护 Windows Server 和 SQL Server 工作负载”活动&#xff0c;了解 Azure 如何为将工作负载…

PP模块部分BAPI函数

工艺路线 BAPI_ROUTING_CREATE 创建工艺路线 BAPI_ROUTING_EXISTENCE_CHECK 检查工艺路线是否存在 参考操作集 BAPI_REFSETOFOPERATIONS_CREATE 创建参考操作集 BAPI_REFSETOFOPR_EXISTENCE_CHK 检查参考操作集是否存在 计划订单 BAPI_PLANNEDORDER_CREATE 创建计划订单 BAPI…

nature reviews genetics | 需要更多的针对不同种族的癌症基因组图谱研究,促进精准治疗和维护治疗公平权益

–https://doi.org/10.1038/s41576-024-00796-w Genomic landscape of cancer in racially and ethnically diverse populations 研究团队和单位 Ulrike Peters–Public Health Sciences Division, Fred Hutchinson Cancer Center Claire E. Thomas–Public Health Scienc…

两个等号和三个等号(待查资料)

1太癫了&#xff0c;居然时要才行&#xff0c;都不行 2. 三等号的结果 .。。。。毁灭吧

SpringCloud源码分析-Gateway

Gateway核心原理&#xff0c;请求经过一系列的责任链最后到达服务端。

大模型—Ollama将Python函数作为参数传递,增强函数调用功能

Ollama将Python函数作为参数传递,增强函数调用功能 在最新版本的Ollama Python库中,现在可以将函数作为工具提供。该库现在也全面支持类型提示,并添加了新的例子。 开始使用 首先安装或升级Ollama Python库: pip install -U ollama将Python函数作为工具传递 定义一个Py…

智能商业分析 Quick BI

Quick BI 是阿里云提供的一款智能商业分析&#xff08;BI&#xff09;工具&#xff0c;旨在帮助企业快速获取业务洞察、优化决策过程、提升数据分析效率。通过强大的数据可视化和分析功能&#xff0c;Quick BI 能够帮助用户轻松连接多种数据源、创建多维度的报表和仪表盘&#…

折旧后将成本中心折旧费调整到订单中

背景&#xff1a;设备原作为通用设备&#xff0c;按成本中心折旧&#xff0c;在12月月结正常折旧后才明确为专用设备&#xff0c;需要按内部订单折旧。 问&#xff1a;折旧能不能冲销。 回复&#xff1a; 在SAP中&#xff0c;折旧凭证是无法直接冲销的。如果折旧计提有误&#…

【Unity3D】3D渲染流水线总结

3D渲染流水线&#xff1a; CPU阶段&#xff08;应用阶段&#xff09;&#xff1a; 1、加载数据&#xff1a;硬盘->内存->显存 场景数据从硬盘HDD加载到内存RAM&#xff0c;网格和纹理等数据会再次加载到显存VRAM&#xff0c;显卡对显存访问速度更快。 2、设置渲染状态…

写作词汇积累:尽善尽美、装傻充愣、攀谈、训示

尽善尽美 1、基本介绍 【尽善尽美】是指极其完善&#xff0c;极其美好&#xff0c;形容事物完美到没有一点缺点。 2、实例实操 1. 他的表演【尽善尽美】&#xff0c;赢得了观众们的热烈掌声。2. 这幅画在色彩和构图上都达到了【尽善尽美】的境界。3. 她对工作的态度非常认真…

开源的Vue低代码表单设计器 form-create-designer v3.2.9 版本发布,新增10多种功能

form-create-designer 是一款开源的低代码表单设计器&#xff0c;通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单&#xff0c;提高开发者对表单的开发效率&#xff0c;节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。 项目采…

每日一题 373. 查找和最小的 K 对数字

373. 查找和最小的 K 对数字 两种解法 class Solution { public:vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {auto cmp [&](const vector<int> &a,const vector<int> &b…

Qt之简易音视频播放器设计(十五)

Qt开发 系列文章 - MediaPlayer&#xff08;十五&#xff09; 目录 前言 一、QMediaPlayer 二、实现方式 1.添加multimedia 2.创建类vedioplayer 3.UI设计 4.用户使用 5.效果演示 总结 前言 利用Qt进行音视频播放器设计&#xff0c;首先比较方便使用的是Qt自带的音视…

OpenCV-Python实战(13)——图像轮廓

一、找轮廓 cv2.findContours() contours,hierarchy cv2.findContours(image*,mode*,method*) contours&#xff1a;找到的所有轮廓数组&#xff0c;数组内的元素为轮廓像素点坐标。 hierarchy&#xff1a;轮廓间的层次关系。 image&#xff1a;二值图像&#xff08;cv2.t…

UVM:testbench architecture

uvm介绍 验证计划 验证平台 uvm phase uvm 仿真实例 uvm消息机制 父类和子类 uvm elements uvm component uvm message Uvm_info中小于verbosity数值的信息打印出来。

框架(Mybatis配置日志)

mybatis配置日志输出 先导入日志依赖 <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency> 编写log4j.properties配置文件 # Root logger option log4j.rootLogge…

简单的生产数据库重连策略优化

简单的druid生产数据库重连策略优化 1. 需求 我们生产环境有一次在大量请求拥堵后&#xff0c;好多数据库操作都超时了&#xff0c;在此之后数据库的连接池不能正常的获取数据库连接了&#xff0c;我们确认了数据库服务是没有问题的&#xff0c;那么就是连接池的配置有问题&a…

大模型的prompt的应用二

下面总结一些在工作中比较实用的prompt应用。还可以到以下网站参考更多的prompt AI Prompts - WayToAGI 举个例子&#xff0c;让大模型写一份周报 # 角色:智能周报编写助手 ## 背景: 需要根据产品经理提供的简要周报框架,补充完整的周报内容。 ## 注意事项: 言简意赅,重点突…

期权懂|期权都有哪些存在的风险因素?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 期权都有哪些存在的风险因素&#xff1f; 一、市场价格波动风险 期权的价格受到多种因素的影响&#xff0c;包括标的资产价格、市场利率、波动率等。 这些因素的变化可能导致期…

2025跨年倒计时

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>2025年跨年倒计时</title><style>/* 页…