Prometheus 监控系统

技术分享| 如何使用Prometheus实现系统进程监控 如何监控线上正在运营的系统?如何得知系统目前是正常还是异常? Prometheus 是这么一套数据监控解决方案。它能让运维及开发人员随时掌控系统的运行状态,快速定位出现问题的位置,快速排除故障。 阅读详情

前言

软件的开发不仅仅在于解决业务,它还需要程序尽可能的运行下去,这就涉及到了服务的稳定性。稳定性涉及很多因素,硬件软件都需要保证。为了能让这些条件更加充足,我们需要不断的收集数据,分析数据,监控数据,进而优化能优化的点。Prometheus 在这方面就为我们提供了很好的监控方案。

什么是 Prometheus?

Prometheus 是一个开源的监控和报警系统,它将我们关心的指标值通过 PULL 的方式获取并存储为时间序列数据。如果单从它的收集功能来讲,我们也可以通过 mysql、redis 等方式实现。然而,这些数据是在每时每刻产生的,其庞大的规模需要我们好好的考虑其存储方式。另外,这些监控数据大多数时候是跟统计相关的,比如数据与时间的分布情况等,这需要有专业的度量知识。而这些正是 Prometheus 的擅长所在。

Prometheus

由于 Prometheus 的关注重点在于指标值以及时间点这两个因素,所以外部程序对它的接入成本非常的低。这种易用性可以让我们对数据进行多维度、多角度的观察和分析,使得监控的效果更加具体化,例如内存消耗、网络利用率、请求连接数等。

除此之外,Prometheus 还具备了操作简单、可拓展的数据收集和强大的查询语言等特性,这些特性能帮助我们在问题出现的时候,快速告警并定位错误。所以现在很多微服务基础设施都会选择接入 Prometheus,像 k8s、云原生等。

Prometheus 的整体架构

Prometheus 为了保证它的拓展性、可靠性,在除了提供核心的 server 外还提供了很多生态组件,为了不增加理解的复杂度,我们先从上帝视角,看看它的核心 Prometheus server:

Prometheus server

可以看到,Prometheus server 的处理链路很清晰,其实就是数据收集-数据存储-数据查询。当然,一个完善的系统肯定会衍生出许多组件来支撑它的特性。所以我们会看到,在 Prometheus 架构里还存在着其他的组件,例如:

  • Pushgateway:为监控节点提供 Push 功能,再由 Prometheus server 到 Pushgateway 集中 Pull 数据。
  • Targets Discover:根据服务发现获取监控节点的地址。
  • PromQL:针对指标数据查询的语言,类似 SQL。
  • Alertmanager:根据配置规则以及指标分析,提供告警服务。

最后,Prometheus 的整体架构如下:

Prometheus 架构

指标(Metrics)

上面提到 Prometheus 的核心关注点在于指标(Metrics),指标我们可以简单的理解为一个度量值,这个值可以是 CPU 负载、内存使用、请求连接数等。它们来源于操作系统、应用服务、设备数据等,会随着时间的变化而有所不同。为了能让这些指标更好的体现出度量内涵,Prometheus 提供了四种指标类型:

  • Counter(计数器):只增不减的计数器
  • Gauge(仪表盘):可增可减,任意变化的仪表盘
  • Histogram(直方图):将指标进行量化平均,得到类似在 0~10ms 之间的请求数有多少,而 10~20ms 之间的请求数又有多少的直方图
  • Summary(摘要):histogram 在客户端是简单的分桶和分桶计数,由于 prometheus 服务端基于这么有限的数据做百分位估算,不是很准确,summary 就是解决百分位准确的问题而来的。

实际上,在 Prometheus 里指标的组成有几部分:指标名、labels、指标值。 (labels 就是我们经常提到的维度)。例如,下面就是一个关于 http 的计数器类型指标数据:

# HELP prometheus_http_requests_total Counter of HTTP requests.
# TYPE prometheus_http_requests_total counter
prometheus_http_requests_total{code="200",handler="/api/v1/label/:name/values"} 7
prometheus_http_requests_total{code="200",handler="/api/v1/query"} 19
prometheus_http_requests_total{code="200",handler="/api/v1/query_range"} 27
prometheus_http_requests_total{code="200",handler="/graph"} 11
prometheus_http_requests_total{code="200",handler="/metrics"} 8929
prometheus_http_requests_total{code="200",handler="/static/*filepath"} 52
prometheus_http_requests_total{code="302",handler="/"} 1
prometheus_http_requests_total{code="400",handler="/api/v1/query_range"} 6

需要注意的是,Prometheus 需要收集的数据是随着时间的增长而增长的,所以它一般不建议保留长期的指标数据,默认保留 15 天。如果监控的数据发现问题,那么需要我们配置告警发现,快速处理。

Prometheus 配置

关于 Prometheus 的使用相信网上有很多详细教程,此处不再说明。我们来看下它的关键配置文件:prometheus.yml:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

可以看到,主要分为了三部分:全局配置(例如数据收集时间间隔)、告警规则、监控节点。告警规则是基于 PromQL 表达式触发条件的,如:

groups:
	- name: example
	  rules:
	  - alert:  InstanceDown
		expr: up == 0
		for: 1m
		labels:
		  severity: critical
		annotations:
		  summary: Instance has been down for more than 5 minutes

PromQL

PromQL 是 Prometheus 内置的数据查询语言,就像 Mysql 的 SQL 语句一样,为我们提供了丰富的查询功能,可应用在面板上查询过滤、告警规则里的表达式等。下面我们就来初步认识下 PromQL。

PromQL 是面向指标查询的,前面我们说过,指标是由指标名、labels、指标值组成的,所以当我们想要查询某个指标时,便可以在浏览器访问 http://localhost:9090/graph 后输入如下表达式:

prometheus_http_requests_total

然后就可以看到相关的指标值了:

prometheus_http_requests_total

像上面这种查询表达式返回的结果被称之为 瞬时向量,即返回结果里每个标签的每个指标只会存在单个值。如果我们想要按时间范围来查询的话,那么就需要使用区间向量表达式了,通过 [] 来选择我们的时间。例如:

prometheus_http_requests_total[1m]

表示查询最近 1 分钟的样本数据

prometheus_http_requests_total[1m]

除了瞬时向量、区间向量,PromQL 的返回还有 标量(一个浮点型的数据值)、字符串类型,根据这些结果类型,我们就也做更多的操作了。

运算符

PromQL 支持我们对指标结果进行运算,比如:

  • 算术运算符:+(加法)、–(减法)、*(乘法)、/(除)、%(模)、^(幂)。
  • 比较运算符:>(大于)、<(小于)、==(等于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)
  • 逻辑运算符:and(与)、or(或)、unless(排除)
  • 聚合运算:sum(和)、min(最小)、avg(平均)、count(总数)、stddev(计算维度上的总体标准偏差)、stdvar(计算维度上的总体标准方差)等

有了这些运算符,我们就可更灵活的处理指标值了。

数据过滤

当然,我们也可以对数据进行过滤,在 PromQL 里主要有以下两种过滤表达式:

  • 完全匹配:即 = 和 != 的用法
  • 正则匹配:携带了正则表达式,可以用 =~ 和!~ 分表表示正向和反向匹配

例如:process_cpu_seconds_total{job="Node Exporter"} 将筛选标签 job = Node Exporter 的指标数据。

数据存储

Prometheus 2.x 默认将时间序列数据库保存在本地磁盘中,当然,我们也可以将数据保存到第三方的存储服务中。

本地存储

Prometheus 按照两个小时为一个时间窗口,将两小时内产生的数据存储在一个块(Block)中。每个块都是一个单独的目录,里面包含了对应时间窗口内的所有样本数据(chunks),元数据文件(meta.json)以及索引文件(index)。

其中索引文件会将指标名称和标签索引到样板数据的时间序列中。此期间如果通过 API 删除时间序列,删除记录会保存在单独的逻辑文件 tombstone 当中。

而样本数据所在的块则会被直接保存在内存中,不会持久化到磁盘中。为了确保 Prometheus 发生崩溃或重启时能够恢复数据,Prometheus 启动时会通过预写日志(write-ahead-log(WAL))重新记录,从而恢复数据。
预写日志文件保存在 wal 目录中,每个文件大小为 128MB。wal 文件包括还没有被压缩的原始数据,所以比常规的块文件大得多。一般情况下,Prometheus 会保留三个 wal 文件,但如果有些高负载服务器需要保存两个小时以上的原始数据,wal 文件的数量就会大于 3 个。

远程存储

受限于可拓展性和持久性,Prometheus 的本地存储仅限于单个节点,所以 Prometheus 并没有提供集群的存储解决方案,而是提供了一系列的接口,以便和远程存储系统相结合,比如当我们在 prometheus.yml 配置文件里配置了 Remote Write(远程写) 的 URL 地址后,Prometheus 就会将采集到的样本数据通过 HTTP 的形式发送给适配器,后续用户就可以在适配器里对接外部服务了。外部服务可以是真正的存储系统,也可以是云存储、消息队列等。

Remote Write

和Remote Write(远程写) 一样,当我们在配置文件里配置了 Remote Read(远程读) 的 URL 地址后,就会通过 HTTP 的形式到 Adaptor 里查询数据,然后 Adaptor 再去第三方存储服务里获取数据转发回来。

Remote Read

Prometheus 缺点

由于 Prometheus 是以指标为关键数据,所以当我们想要对数据进行一条链路的走向时,是达不到的。而且它的数据是面向时间顺序的,如果我们想要提供一些报表处理,那是挺难的。

另外,由于 Prometheus 是奔着简单易拓展目的设计的,所以在分布式存储、集群、多租户等方面基本没有涉及,它更专注于实时监控。

总结

系统监控其实是每一个成熟架构都需要考虑的重点,它是基础设施里的重要组成部分,能让我们提前发现问题,解决问题。而 Prometheus 作为流行的开源监控系统,现在逐渐成为了标准,所以提前熟悉它,使用它,还是大有收益的,毕竟保证业务的稳定性,也是我们开发工作的一部分呢。

参考


感兴趣的朋友可以搜一搜公众号「 阅新技术 」,关注更多的推送文章。
可以的话,就顺便点个赞、留个言、分享下,感谢各位支持!
阅新技术,阅读更多的新知识。
阅新技术

Prometheus-10 Prometheus与其他监控解决方案对比 阅读详情

相关推荐

Prometheus + Grafana 监控系统-Prometheus 的安装部署

PrometheusPrometheus是一个开源的系统监控和警报工具包。它具有多维数据模型和强大的查询语言,可帮助您有效地监控应用程序和基础设施。Prometheus 是由谷歌研发的一款开源的监控软件,它通过安装在远程机器上的 exporter,通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上GrafanaGrafana是一个开源的数据可视化和监控平台,它允许您通过图表和图形直观地展示和分析监控数据。重要概念Exporters。

大雪冬至的博客 1645

基于Prometheus的监控解决方案

本文用来介绍如何基于开源监控软件Prometheus打造一套监控解决方案。

杨航的博客 1451

Linux运维-Prometheus监控系统搭建

Prometheus(普罗米修斯)是一个应用十分广泛的一个性能监控平台监控的原理······废话不说,直接开始安装。

秣宇的博客 1956

一、监控搭建-Prometheus

Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。

水布天 1万+

PTA-浙大版 《Python程序设计》 第三章编程题目及答案

博主第一次写优快云的博客,所以排版上可能有些不尽人意,代码部分均为自己的思路,可能复杂或者考虑欠妥,欢迎大家一起讨论~ 第一题:大于身高的平均值 这里用了np数组求得平均数,当然for循环累加也是可以的 import numpy as np data = input().split() data = list(map(int,data)) avg = np.mean(data) for i in data: if i > avg: print(i,end = '

Legendwqs的博客 1万+

FPGA实战:MIG IP核AXI接口DDR3读写优化指南

本文详细解析了FPGA中MIG IP核AXI接口的DDR3读写优化策略,涵盖关键参数配置、突发传输技巧及时序收敛方案。通过AXI接口优化和突发长度选择,可实现高达12.8GB/s的理论带宽,提升DDR3访问效率。文章还提供了Vivado配置实例和调试技巧,助力开发者解决FPGA内存控制中的实际问题。

weixin_29168393的博客 546

Prometheus监控系部署配置过程

前言 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB),基于Go语言开发,是Google BorgMon监控系统的开源版本。Prometheus在2016年加入了云原生计算基金会,成为继Kubernetes之后的第二个项目。 Prometheus通过多种数学算法能实现强大的监控需求,原生支持K8S服务发现,能监控容器的动态变化。并且结合Grafana能绘出漂亮图形,然后使用alertmanager或Grafana实现报警。它与其他监控相比有以下主要优势: · 1

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 2万+

ESP32开发环境与微信小程序通信的完整示例

通过搭建稳定的esp32开发环境,实现其与微信小程序间的双向通信,涵盖Wi-Fi连接、数据收发与协议设计,为物联网应用提供低成本解决方案。

weixin_42126677的博客 1132

Prometheus+Grafana 搭建应用监控系统

1.1 什么是监控系统?监控系统顾名思义就是监控服务器、应用系统以及其他第三方组件运行状态的系统。对于平台系统而言,监控系统就是我们第三只眼,监控系统会实时跟踪应用平台的运行状态,如果有应用系统出现问题或是服务器内存爆满,我们通过监控系统就可以快速定位问题所在,甚至可以设置预警,对一些将要出现的问题进行提前预防处理,及时避免问题的发生。1.2 监控系统的作用监控是运维系统的基础,我们衡量一个公司/部门的运维水平,看他们的监控系统就可以了。

m0_38068812的博客 4005

Silvaco二极管、三极管、CMOS的制备

Silvaco二极管和三极管的制备

yytu231的博客 5749

YOLOv9电力巡检实战:绝缘子破裂/鸟巢识别+无人机自动定位

摘要:本文聚焦电力输电线路巡检的效率与安全痛点,提出基于YOLOv9与无人机的智能巡检解决方案。针对绝缘子破裂、鸟巢等高危缺陷,通过“无人机改装-模型训练-缺陷识别-工单生成”四阶段工程落地流程,实现全自动化巡检。系统采用大疆M300无人机搭载RTK模块与Jetson边缘计算盒,结合改进YOLOv9模型实时识别5类缺陷,通过4G传输将GPS定位与缺陷数据同步至工单系统。实测表明,该方案巡检效率达50公里/天(较人工提升10倍),缺陷发现率95%(提升40%),事故预防率98%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1510

【Prometheus】 Prometheus 入门到实战搭建监控系统

多维度数据模型方便的部署和维护灵活的数据采集强大的查询语言实际上,多维度数据模型和强大的查询语言这两个特性,正是时序数据库所要求的,所以 Prometheus 不仅仅是一个监控系统,同时也是一个时序数据库。那为什么 Prometheus 不直接使用现有的时序数据库作为后端存储呢?这是因为 SoundCloud 不仅希望他们的监控系统有着时序数据库的特点,而且还需要部署和维护非常方便。..................

LoveSummer 7654

YOLOv8改进,MobileNetV3轻量化架构改进特征提取网络,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。本文开始探讨了自动化搜索算法与网络设计如何协同工作,以利用互补方法来提升整体技术水平。通过这一过程,创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用场景。这些模型随后被适配并应用于目标检测和语义分割任务。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3835

prometheus监控系统部署

多维数据模型,可以按照实例,服务,端点和方法之类的维度随意对数据进行切片和切块。操作简单,可以随时随地部署监控服务,甚至在本地工作站上,而无需设置分布式存储后端或重新配置环境。可扩展的数据收集和分散的架构,以便于可以可靠的监控服务的许多实例,独立团队可以部署独立的监控服务。转化为一种查询语言,可以利用数据模型进行有效的警报和图形展示。

2501_91557222的博客 1187

深入剖析Zynq AMP模式下CPU1中断响应机制:从原理到创新实践

在异构计算领域,Zynq-7000系列SoC的AMP(Asymmetric Multiprocessing)模式堪称多核编程的瑞士军刀。独立运行环境:CPU0运行Linux,CPU1运行FreeRTOS或裸机程序硬件资源独占:CPU0管理DDR,CPU1使用OCM(片上内存)中断隔离:默认所有中断路由到CPU0这种架构非常适合需要实时响应的工业控制系统——比如用CPU0处理网络通信,CPU1负责电机控制。AMP模式下中断路由的底层原理多维度性能优化技巧工业级可靠性的实现方案。

QQ_778132974的博客 491

QGIS004:【05矢量属性表】-保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段

摘要:QGIS矢量属性表工具箱包括保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段等选项,本文介绍各选项的基本操作。

qq_31762031的博客 2312

Prometheus—监控系统

Prometheus 是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件 Prometheus server 会定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉取数据,新拉取到的数据会持久化到存储设备当中。

aran2002的博客 1563

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Prometheus监控系统搭建

本文介绍了Prometheus监控系统的搭建与配置过程。首先概述了Prometheus作为CNCF开源监控工具的核心特性,包括多维指标、拉取式采集和内置告警功能。随后详细说明了在Web服务器和MySQL服务器上部署node_exporter和mysqld_exporter的步骤,包括服务配置和防火墙设置。接着描述了Prometheus服务器的安装与配置,重点讲解了prometheus.yml文件中监控任务的定义。最后介绍了Grafana可视化工具的安装和仪表盘模板的导入流程,展示了如何将Prometheus

weixin_64378412的博客 1221

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Prometheus监控系统

Prometheus 是一款开源的服务监控系统与时序数据库,以其灵活的数据模型、高效的采集机制和强大的查询能力被广泛应用于云原生、微服务等场景。其核心功能是通过周期性拉取(Pull)方式采集监控数据,存储于内置的时序数据库(TSDB)中,并支持基于规则的告警和丰富的可视化展示。:采集服务器 CPU、内存、磁盘、网络等物理指标;:分别监控 MySQL 数据库和 Nginx 服务;:采集 Kubernetes 资源(Pod、Deployment 等)的状态指标;cAdvisor。

2503_93012396的博客 694

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【云原生监控】Prometheus监控系统

访问地址:http://192.168.93.103:3000。此时,就会看到,新配置的被监控项主体的指标列表。需重新设置密码即可登录。默认账户:admin。默认密码:admin。

weixin_73059729的博客 2144

【Prometheus】监控系统

时间是由分秒积成的,善于利用零星时间的人,才会做出更大的成绩来

F12138X的博客 2620

Docker搭建Prometheus监控系统

一、实验环境主机:虚拟机(不做介绍)IP地址:192.168.60.130硬件配置:2vCPU、4G 内存操作系统:Ubuntu 22.04.4 LTSDocker版本:24.0.7docker-compose版本:v2.29.7Prometheus联邦集群:Prometheus:采集、存储数据。alertmanager:...

cnzzs的博客 1998

Prometheus监控系统部署及应用

多维数据模型,可以按照实例,服务,端点和方法之类的维度随意对数据进行切片和切块。操作简单,可以随时随地部署监控服务,甚至在本地工作站上,而无需设置分布式存储后端或重新配置环境。可扩展的数据收集和分散的架构,以便于可以可靠的监控服务的许多实例,独立团队可以部署独立的监控服务。转化为一种查询语言,可以利用数据模型进行有效的警报和图形展示。

henanchenxuyuan的博客 4054

Prometheus 监控系统详解

Prometheus 是一款开源的时序数据库与服务监控系统,由 SoundCloud 于 2012 年开发,2016 年加入 CNCF(云原生计算基金会),目前已成为云原生监控的事实标准。基于 HTTP 的 pull 模式采集时序数据灵活的多维数据模型(指标名 + 键值对标签)强大的查询语言 PromQL内置时序数据库(TSDB)动态服务发现与静态配置结合原生支持告警与可视化集成:监控服务器硬件与系统指标(CPU、内存、磁盘、网络等),是基础设施监控的必备组件。

m0_46589218的博客 1410

Prometheus+Grafana监控系统

Prometheus(普罗米修斯,有时简称Prom)是由SoundCloud开发的开源监控报警系统和时序数据库 (Time Series Database, TSDB)。Prometheus受Google的Brogmon监控系统的启发(Kubernetes是从Google的Brog系统的启发),从2012年开始由前Google工程师在SoundCloud以开源软件的形式进行研发,并于2015年初对外发布早期版本。.........

多回访 5256
上一篇: 搜索引擎Elasticsearch简介实践
下一篇: 分布式链路追踪
yue_xin_tech
博客等级 码龄12年 29粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值