Prometheus快速入门实战

news2025/1/19 3:16:14

介绍

prometheus 受启发于 Google 的 Brogmon 监控系统(相似 kubernetes 是从 Brog 系统演变而来)。2016 年 5 月继 kubernetes 之后成为第二个加入 CNCF 基金会的项目,同年 6 月正式发布 1.0 版本。2017 年底发布基于全新存储层的 2.0 版本,能更好地与容器平台、云平台配合。

官方网站:https://prometheus.io
项目托管:https://github.com/prometheus

优势

prometheus 是基于一个开源的完整监控方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算、统一分析和告警的新模型。 相对传统的监控系统有如下几个优点。

  • 易于管理

部署使用的是 go 编译的二进制文件,不存在任何第三方依赖问题,可以使用服务发现动态管理监控目标。

  • 监控服务内部运行状态

我们可以使用 prometheus 提供的常用开发语言提供的 client 库完成应用层面暴露数据,采集应用内部运行信息。

  • 强大的查询语言 promQL

prometheus 内置一个强大的数据查询语言 PromQL,通过 PromQL 可以实现对监控数据的查询、聚合。同时 PromQL 也被应用于数据可视化(如 grafana )以及告警中的。

  • 高效

对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效地处理这些数据。

  • 可扩展

prometheus 配置比较简单,可以在每个数据中心运行独立的 prometheus server,也可以使用联邦集群,让多个 prometheus 实例产生一个逻辑集群,还可以在单个 prometheus server 处理的任务量过大的时候,通过使用功能分区和联邦集群对其扩展。

  • 易于集成

目前官方提供多种语言的客户端 sdk,基于这些 sdk 可以快速让应用程序纳入到监控系统中,同时还可以支持与其他的监控系统集成。

  • 可视化

prometheus server 自带一个 ui,通过这个 ui 可以方便对数据进行查询和图形化展示,可以对接 grafana 可视化工具展示精美监控指标。

架构

图片1.png
prometheus 负责从 pushgateway 和 Jobs 中采集数据,存储到后端 Storatge 中,可以通过 PromQL 进行查询,推送 alerts 信息到 AlertManager。AlertManager 根据不同的路由规则进行报警通知。

  • prometheus server

是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

  • exporter

简单说是采集端,通过 http 服务的形式保留一个 url 地址,prometheus server 通过访问该 exporter 提供的 endpoint 端点,即可获取到需要采集的监控数据。exporter 分为 2 大类。
直接采集:这一类 exporter 直接内置了对 Prometheus 监控的支持,比如 cAdvisor,Kubernetes 等。
间接采集:原有监控目标不支持 prometheus,需要通过 prometheus 提供的客户端库编写监控采集程序,例如 Mysql Exporter,JMX Exporter 等。

  • AlertManager

在 prometheus 中,支持基于 PromQL 创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入 AlertManager 进行处理。可以集成邮件,Slack 或者通过 webhook 自定义报警。

  • PushGateway

由于 Prometheus 数据采集采用 pull 方式进行设置的,内置必须保证 prometheus server 和对应的 exporter 必须通信,当网络情况无法直接满足时,可以使用 pushgateway 来进行中转,可以通过 pushgateway 将内部网络数据主动 push 到 gateway 里面去,而 prometheus 采用 pull 方式拉取 pushgateway 中数据。

  • web ui

Prometheus 内置一个简单的 Web 控制台,可以查询指标,查看配置信息或者 Service Discovery 等,实际工作中,查看指标或者创建仪表盘通常使用 Grafana,Prometheus 作为 Grafana 的数据源。

数据模型

Prometheus 将所有数据存储为时间序列,具有相同度量名称以及标签属于同一个指标。每个时间序列都由度量名称和一组键值对(也称为标签)组成。
格式:

# 表示一个度量指标和一组键值对标签
<metric name>{<label name>=<label value>, ...}

度量指标名称是 api_http_requests_total,标签为method="POST", handler="/messages"的示例如下所示:

api_http_requests_total{method="POST", handler="/messages"}

指标类型

prometheus 的指标有四种类型,分别是 Counter,Gauge,Histogram,Summary。

  • Counter

只增不减的计数器,用于描述某个指标的累计状态,比如请求量统计,http_requests_total。

  • Gauge

可增可减的计量器,用于描述某个指标当前的状态,比如系统内存余量,node_memory_MemFree_bytes。

  • Histogram

直方图指标用于描述指标的分布情况,比如对于请求响应时间,总共 10w 个请求,小于 10ms 的有 5w 个,小于 50ms 的有 9w 个,小于 100ms 的有 9.9w 个。

  • Summary

和直方图类似,summary 也是用于描述指标分布情况,不过表现形式不同,比如还是对于请求响应时间, summary 描述则是,总共 10w 个请求,50% 小于 10ms,90% 小于 50ms,99% 小于 100ms。

安装

大致了解了 Prometheus 后,我们将其先安装起来。

linux 安装

Prometheus 也是 go 语言开发的,所以只需要下载其二进制包进行安装即可。
前往官网下载最新版本即可。

下载地址:https://prometheus.io/download

[root@localhost prometheus]# tar -zxvf prometheus-2.37.1.linux-amd64.tar.gz 
prometheus-2.37.1.linux-amd64/
prometheus-2.37.1.linux-amd64/consoles/
prometheus-2.37.1.linux-amd64/consoles/index.html.example
prometheus-2.37.1.linux-amd64/consoles/node-cpu.html
prometheus-2.37.1.linux-amd64/consoles/node-disk.html
prometheus-2.37.1.linux-amd64/consoles/node-overview.html
prometheus-2.37.1.linux-amd64/consoles/node.html
prometheus-2.37.1.linux-amd64/consoles/prometheus-overview.html
prometheus-2.37.1.linux-amd64/consoles/prometheus.html
prometheus-2.37.1.linux-amd64/console_libraries/
prometheus-2.37.1.linux-amd64/console_libraries/menu.lib
prometheus-2.37.1.linux-amd64/console_libraries/prom.lib
prometheus-2.37.1.linux-amd64/prometheus.yml
prometheus-2.37.1.linux-amd64/LICENSE
prometheus-2.37.1.linux-amd64/NOTICE
prometheus-2.37.1.linux-amd64/prometheus
prometheus-2.37.1.linux-amd64/promtool
[root@localhost prometheus]# cd prometheus-2.37.1.linux-amd64
[root@localhost prometheus-2.37.1.linux-amd64]# ll
total 206252
drwxr-xr-x. 2 3434 3434        38 Sep 12 09:04 console_libraries
drwxr-xr-x. 2 3434 3434       173 Sep 12 09:04 consoles
-rw-r--r--. 1 3434 3434     11357 Sep 12 09:04 LICENSE
-rw-r--r--. 1 3434 3434      3773 Sep 12 09:04 NOTICE
-rwxr-xr-x. 1 3434 3434 109681846 Sep 12 08:46 prometheus
-rw-r--r--. 1 3434 3434       934 Sep 12 09:04 prometheus.yml
-rwxr-xr-x. 1 3434 3434 101497637 Sep 12 08:49 promtool
[root@localhost prometheus-2.37.1.linux-amd64]# ./prometheus --help
usage: prometheus [<flags>]

The Prometheus monitoring server

Flags:
  -h, --help                     Show context-sensitive help (also try --help-long and --help-man).
      --version                  Show application version.

Prometheus 是通过一个 YAML 配置文件来进行启动的,如果我们使用二进制的方式来启动的话,可以使用下面的命令:

./prometheus --config.file=prometheus.yml

其中 prometheus.yml 文件的基本配置如下:

global:
  scrape_interval:     15s
  evaluation_interval: 15s
rule_files:
  # - "first.rules"
  # - "second.rules"
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']

上面这个配置文件中包含了 3 个模块:global、rule_files 和 scrape_configs。

  • global

模块控制 Prometheus Server 的全局配置:
oscrape_interval:表示 prometheus 抓取指标数据的频率,默认是 15s,我们可以覆盖这个值;
oevaluation_interval:用来控制评估规则的频率,prometheus 使用规则产生新的时间序列数据或者产生警报;

  • rule_files

指定了报警规则所在的位置,prometheus 可以根据这个配置加载规则,用于生成新的时间序列数据或者报警信息,当前我们没有配置任何报警规则。

  • scrape_configs

用于控制 prometheus 监控哪些资源。

由于 prometheus 通过 HTTP 的方式来暴露的它本身的监控数据,prometheus 也能够监控本身的健康情况。在默认的配置里有一个单独的 job,叫做 prometheus,它采集 prometheus 服务本身的时间序列数据。这个 job 包含了一个单独的、静态配置的目标:监听 localhost 上的 9090 端口。prometheus 默认会通过目标的 /metrics 路径采集 metrics。所以,默认的 job 通过 URL:[http://localhost:9090/metrics](http://localhost:9090/metrics) 采集 metrics。收集到的时间序列包含 prometheus 服务本身的状态和性能。如果我们还有其他的资源需要监控的话,直接配置在 scrape_configs 模块下面就可以了。

[root@localhost prometheus-2.37.1.linux-amd64]# ./prometheus --config.file=prometheus.yml

docker 安装

对于 Docker 用户,直接使用 Prometheus 的镜像即可启动 Prometheus Server:

docker run -d -p 9090:9090 -v /etc/prometheus:/etc/prometheus prom/prometheus

启动完成后,可以通过[http://localhost:9090](http://localhost:9090)访问 Prometheus 的 UI 界面。

配置文件详解

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
  • global

此片段指定的是 prometheus 的全局配置,比如采集间隔,抓取超时时间等。

  • rule_files

此片段指定报警规则文件,prometheus 根据这些规则信息,会推送报警信息到 alertmanager 中。

  • scrape_configs

此片段指定抓取配置,prometheus 的数据采集通过此片段配置。

  • alerting

此片段指定报警配置, 这里主要是指定 prometheus 将报警规则推送到指定的 alertmanager 实例地址。

  • remote_write

指定后端的存储的写入 api 地址。

  • remote_read

指定后端的存储的读取 api 地址。

global

# How frequently to scrape targets by default.
[ scrape_interval: <duration> | default = 1m ] # 抓取间隔

# How long until a scrape request times out.
[ scrape_timeout: <duration> | default = 10s ] # 抓取超时时间

# How frequently to evaluate rules.
[ evaluation_interval: <duration> | default = 1m ] # 评估规则间隔

# The labels to add to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels: # 外部一些标签设置
[ <labelname>: <labelvalue> ... ]

scrapy_config

一个 scrape_config 片段指定一组目标和参数,目标就是实例,指定采集的端点,参数描述如何采集这些实例,主要参数如下

  • scrape_interval

抓取间隔,默认继承 global 值。

  • scrape_timeout

抓取超时时间,默认继承 global 值。

  • metric_path

抓取路径,默认是 /metrics。

  • scheme

指定采集使用的协议,http 或者 https。

  • params

指定 url 参数。

  • basic_auth

指定认证信息。

  • *_sd_configs

指定服务发现配置

  • static_configs

静态指定服务 job。

  • relabel_config

relabel 设置。

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

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

相关文章

软件设计师——数据库系统(三)

&#x1f4d1;前言 本文主要是【数据库系统】——软件设计师——数据库系统的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1…

深入浅出理解TensorFlow的padding填充算法

一、参考资料 notes_on_padding_2 二、TensorFlow的padding算法 本文以TensorFlow v2.14.0版本为例&#xff0c;介绍TensorFlow的padding算法。 1. 引言 tf.nn.conv2d and tf.nn.max_pool2d 函数都有padding参数&#xff0c;在执行函数之前&#xff0c;都需要进行填充padd…

【进收藏夹吃灰系列】Python学习指南

文章目录 [toc]Python基础字符串判断语句循环语句异常文件读写迭代器生成器闭包线程 个人主页&#xff1a;丷从心 系列专栏&#xff1a;进收藏夹吃灰系列 Python基础 字符串 【Python基础】字符串 判断语句 【Python基础】判断语句 循环语句 【Python基础】循环语句 异常 …

【华为OD机试真题2023CD卷 JAVAJS】手机App防沉迷系统

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 手机App防沉迷系统 知识点数组字符串编程基础循环统计 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 智能手机方便了我们生活的同时,也侵占了我们不少的时间。“手机App防沉迷系统”能够让我们每天合理的规…

WPF 消息日志打印帮助类:HandyControl+NLog+彩色控制台打印+全局异常捕捉

文章目录 前言相关文章Nlog配置HandyControl配置简单使用显示效果文本内容 全局异常捕捉异常代码运行结果 前言 我将简单的HandyControl的消息打印系统和Nlog搭配使用&#xff0c;简化我们的代码书写 相关文章 .NET 控制台NLog 使用 WPF-UI HandyControl 控件简单实战 C#更改…

行人重识别(ReID)基础知识入门

这里写目录标题 1、ReID技术概述1.1 基本原理1.2 实现流程1.3 重识别存在的技术挑战 2、训练数据格式介绍 1、ReID技术概述 1.1 基本原理 ReID&#xff0c;全称Re-identification&#xff0c;目的是利用各种智能算法在图像数据库中找到与要搜索的目标相似的对象。ReID是图像检…

阿里开源大模型 Qwen-72B 私有化部署

近期大家都知道阿里推出了自己的开源的大模型千问72B&#xff0c;据说对于中文非常友好&#xff0c;在开源模型里面&#xff0c;可谓是名列前茅。 千问拥有有强大的基础语言模型&#xff0c;已经针对多达 3 万亿个 token 的多语言数据进行了稳定的预训练&#xff0c;覆盖领域、…

《微信小程序开发从入门到实战》学习六十七

6.6 网络API 部分小程序服务端不是用云开发技术实现&#xff0c;而是由开发人员使用后端开发语言实现。 在小程序用网络API与&#xff08;开发人员使后端开发语言建设的&#xff09;服务端进行交互&#xff0c;可与服务端交换数据、上传或下载文件。 6.6.1 服务器域名配置 …

C#使用条件语句判断用户登录身份

目录 一、示例 二、生成 利用条件语句判断用户登录身份&#xff0c;根据用户登录身份的不同&#xff0c;给予相应的操作权限。 一、示例 主要用if语句及ComboBox控件。其中&#xff0c;ComboBox是窗体中的下拉列表控件&#xff0c;在使用ComboBox控件前&#xff0c;可以先向…

Spring6入门

1、入门 1.1、环境要求 JDK&#xff1a;Java17&#xff08;Spring6要求JDK最低版本是Java17&#xff09;Maven&#xff1a;3.6Spring&#xff1a;6.1.2 1.2、构建模块 &#xff08;1&#xff09;构建父模块spring6 在idea中&#xff0c;依次单击 File -> New -> Proj…

Vue3-30-路由-嵌套路由的基本使用

什么是嵌套路由 嵌套路由 &#xff1a;就是一个组件内部还希望展示其他的组件&#xff0c;使用嵌套的方式实现页面组件的渲染。 就像 根组件 通过路由渲染 普通组件一样&#xff0c;嵌套路由也是一样的道理。 嵌套路由的相关关键配置 1、<router-view> 标签 声明 被嵌套组…

乒乓球廉价底板及套胶评测4

球拍找到适应自己的不容易&#xff0c;因为初学者或者说业余爱好者无法确定是按打法特点选拍还是按拍子练打法特点&#xff0c;所以有时候就要孤注一掷&#xff0c;想想练球的初衷&#xff0c;不用被打的好的对手所左右。我和朋友打球的时候发现大家借力的能力越来越强&#xf…

三巨头对决:深入了解pnpm、yarn与npm

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 三巨头对决&#xff1a;深入了解pnpm、yarn与npm 前言包管理器简介npm&#xff08;Node Package Manager&#xff09;&#xff1a;Yarn&#xff1a;pnpm&#xff08;Performant Npm&#xff09;&#…

FL Studio 21.2.2官方中文版重磅发布

纯正简体中文支持&#xff0c;更快捷的音频剪辑及素材管理器&#xff0c;多样主题随心换&#xff01; Mac版新增对苹果M2/1家族芯片原生支持。 丰富的主题换肤 现在大家可以通过控制色调、饱和度、亮度、文本、仪表和步进序列器的颜色来改变你的DAW外观&#xff0c; DAW“情绪…

Docker 概述以及整体架构

文章目录 一、Docker概述1.1 什么是 Docker1.2 Docker 如何工作1.3 底层技术 二、Docker架构2.1 Docker 整体架构2.2 Docker daemon2.3 Docker client2.4 Docker registries2.5 Docker objects2.6 Docker Desktop 参考资料 一、Docker概述 1.1 什么是 Docker Docker是一个用于…

JVM工作原理与实战(二):字节码编辑器jclasslib

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、字节码编辑器jclasslib介绍和安装 1.介绍 2.安装 3.IntelliJ IDEA 插件安装 二、字节码编辑器jclasslib的使用 1.使用jclasslib bytecode viewer打开字节码文件 2.使用Intell…

Spring 是如何解决循环依赖的

1.什么是循环依赖? 所谓的循环依赖是指&#xff0c;A 依赖 B&#xff0c;B 又依赖 A&#xff0c;它们之间形成了循环依赖。或者是 A 依赖 B&#xff0c;B 依赖 C&#xff0c;C 又依赖 A。它们之间的依赖关系如下&#xff1a; 2.通过手写代码演示理解Spring循环依赖 DEMO: pu…

模型性能评估简介

模型评估 混淆矩阵 Positive - 正例Negative (N) - 负例 结果: 预测为正类别 预测为负类别 真实为正类别 True Positive (TP) False Negative (FN) 真实为负类别 False Positive (FP) True Negative (TN)TP - 预测 P, 实际 P, 模型预测正确FP - 预测 P, …

Spring-5-切入点的高级使用

Spring提供了两个额外的Pointcut实现&#xff0c;分别是ComposablePointcut和ControlFlowPointcut,它们提供了所需的灵活性。 使用控制流切入点 由ControlFlowPointcut类实现的Spring控制流切入点类似于许多其他AOP实现中可用的cflow构造&#xff0c;尽管功能上没有那么强大。…

2023十大编程语言及未来展望

2023十大编程语言及未来展望 1. 2023年十大编程语言排行榜2. 十大编程语言未来展望PythonCCJavaC#JavaScriptPHPVisual BasicSQLAssembly language 1. 2023年十大编程语言排行榜 TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量&#xff0c;并使用搜索引擎&a…