首页 > 其他分享 >Prometheus 入门

Prometheus 入门

时间:2025-01-12 22:12:58浏览次数:1  
标签:采样 node 入门 Prometheus job prometheus localhost

测试环境

prometheus-2.26.0.linux-amd64.tar.gz

下载地址:https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz

prometheus-2.54.1.linux-amd64.tar.gz

下载地址:https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz

CentOS 7.9

下载并运行Prometheus

# wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
# tar xvzf prometheus-2.26.0.linux-amd64.tar.gz
# cd prometheus-2.26.0.linux-amd64
# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool

开始运行之前,先对它进行配置。

配置Prometheus自身监控

Prometheus通过抓取度量HTTP端点来从目标收集指标。由于Prometheus以同样的方式暴露自己的数据,它也可以搜集和监控自己的健康状况。
虽然只收集自身数据的Prometheus服务器不是很有用,但它是一个很好的开始示例。保存以下Prometheus基础配置到一个名为prometheus.yml的文件(安装包自动解压后,解压目录下,默认就就有一个名为prometheus.yml的文件)

global:
  scrape_interval:     15s # 默认,每15秒采样一次目标

  # 与其它外部系统(比如federation, remote storage, Alertmanager)交互时,会附加这些标签到时序数据或者报警
  external_labels:
    monitor: 'codelab-monitor'

# 一份采样配置仅包含一个 endpoint 来做采样
# 下面是 Prometheus 本身的endpoint:
scrape_configs:
  # job_name 将被被当作一个标签 `job=<job_name>`添加到该配置的任意时序采样.
  - job_name: 'prometheus'

    # 覆盖全局默认值,从该job每5秒对目标采样一次
    scrape_interval: 5s

    static_configs:
      # 如果需要远程访问, localhost  也可以替换为具体IP,比如10.118.71.170
      - targets: ['localhost:9090'] 

有关配置选项的完整说明,请参阅配置文档

启动Prometheus

使用新创建的配置文件来启动 Prometheus,切换到包含 Prometheus 二进制文件的目录并运行

# 启动 Prometheus.
# 默认地, Prometheus 在 ./data 路径下存储其数据库 (flag --storage.tsdb.path).
# ./prometheus --config.file=prometheus.yml

通过访问 localhost:9000 来浏览状态页。等待几秒让他从自己的 HTTP metric endpoint 来收集数据。

还可以通过访问到其 metrics endpoint(http://localhost:9090/metrics) 来验证 Prometheus 是否正在提供有关其自身的 metrics

开放防火墙端口

# firewall-cmd --permanent --zone=public --add-port=9090/tcp
success
# firewall-cmd --reload
success

使用expressin browser

使用 Prometheus 内置的expressin browser访问 localhost:9090/graph,选择 Graph 导航菜单下的 Table tab页 (Classic UI下为Console tab页)。

通过查看localhost:9090/metrics 页面内容可知,Prometheus 导出了关于其自身的一个名为 prometheus_target_interval_length_seconds指标(目标采样之间的实际间隔)。将其作为搜索表达式,输入到表达式搜索框中,点击 Execute 按钮,如下,将返回多个不同的时间序列(以及每个时间序列的最新值),所有时间序列的 metric 名称均为 prometheus_target_interval_length_seconds,但具有不同的标签。 这些标签具有不同的延迟百分比目标组间隔(target group intervals)

如果我们只对第 99 个百分位延迟感兴趣,则可以使用以下查询来检索该信息:

prometheus_target_interval_length_seconds{quantile="0.99"}

如果需要计算返回的时间序列数,可以修改查询如下:

count(prometheus_target_interval_length_seconds)

更多有关 expression language 的更多信息,请查看 expression language 文档

使用绘图界面

要绘制图形表达式,请使用 “Graph” 选项卡。

例如,输入以下表达式以绘制在自采样的 Prometheus 中每秒创建 chunk 的速率:

rate(prometheus_tsdb_head_chunks_created_total[1m])

启动一些采样目标

现在让我们增加一些采样目标供 Prometheus 进行采样。

使用Node Exporter作为采样目标,多关于它的使用请查阅

# wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
# tar -xvzf node_exporter-1.1.2.linux-amd64.tar.gz
# ./node_exporter --web.listen-address 127.0.0.1:8001
# ./node_exporter --web.listen-address 127.0.0.1:8002
# ./node_exporter --web.listen-address 127.0.0.1:8003

现在,应该存在监听 http://localhost:8080/metrics, http://localhost:8081/metrics 和http://localhost:8082/metrics的示例目标

配置 Prometheus 来监控示例目标

现在,我们将配置 Prometheus 来采样这些新目标。 让我们将所有三个 endpoint 分组为一个称为 “node” 的 job。 但是,假设前两个 endpoint 是生产目标,而第三个 endpoint 代表金丝雀实例。 为了在 Prometheus 中对此建模,我们可以将多个端组添加到单个 job 中,并为每个目标组添加额外的标签。 在此示例中,我们将 group=“ production” 标签添加到第一个目标组,同时将 group=“ canary” 添加到第二个目标。

为此,请将以下job定义添加到 prometheus.yml 中的 scrape_configs 部分,然后重新启动 Prometheus 实例。修改后的 prometheus.yml内容如下

global:
  scrape_interval:     15s # 默认,每15秒采样一次目标

  # 与其它外部系统(比如federation, remote storage, Alertmanager)交互时,会附加这些标签到时序数据或者报警
  external_labels:
    monitor: 'codelab-monitor'

# 一份采样配置仅包含一个 endpoint 来做采样
# 下面是 Prometheus 本身的endpoint:
scrape_configs:
  # job_name 将被被当作一个标签 `job=<job_name>`添加到该配置的任意时序采样.
  - job_name: 'prometheus'

    # 覆盖全局默认值,从该job每5秒对目标采样一次
    scrape_interval: 5s

    static_configs:
      - targets: ['10.118.71.170:9090']

  - job_name: 'node'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8001', 'localhost:8002']
        labels:
          group: 'production'

      - targets: ['localhost:8003']
        labels:
          group: 'canary'

查看Targets(Status -> Targets)

Graph查询

配置规则以将采样的数据聚合到新的时间序列

尽管在我们的示例中并不会有问题,但是在聚集了数千个时间序列中查询时可能会变慢。 为了提高效率,Prometheus 允许通过配置的记录规则将表达式预记录到全新的持久化的时间序列中。 假设我们感兴趣的是 5 分钟的窗口内测得的每个实例的所有cpu上平均的cpu时间(node_cpu_seconds_total,保留 Job,instance,和mode 维度))。 我们可以这样写:

avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))

Graph中执行查询,结果如下

现在,要将由该表达式产生的时间序列记录到一个名为:job_instance_mode:node_cpu_seconds:avg_rate5m 的新指标,使用以下记录规则创建文件并将其保存 prometheus.rules.yml

groups:
- name: cpu-node
  rules:
  - record: job_instance_mode:node_cpu_seconds:avg_rate5m
    expr: avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))

prometheus.yml 中添加 rule_files 语句,以便 Prometheus 选择此新规则。 现在,prometheus.yml配置应如下所示:

global:
  scrape_interval:     15s # 默认,每15秒采样一次目标

  # 与其它外部系统(比如federation, remote storage, Alertmanager)交互时,会附加这些标签到时序数据或者报警
  external_labels:
    monitor: 'codelab-monitor'

rule_files:
  - 'prometheus.rules.yml'

# 一份采样配置仅包含一个 endpoint 来做采样
# 下面是 Prometheus 本身的endpoint:
scrape_configs:
  # job_name 将被被当作一个标签 `job=<job_name>`添加到该配置的任意时序采样.
  - job_name: 'prometheus'

    # 覆盖全局默认值,从该job每5秒对目标采样一次
    scrape_interval: 5s

    static_configs:
      - targets: ['10.118.71.170:9090']

  - job_name: 'node'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8001', 'localhost:8002']
        labels:
          group: 'production'

      - targets: ['localhost:8003']
        labels:
          group: 'canary'

通过新的配置重新启动 Prometheus,并通过expression brower查询 job_instance_mode:node_cpu_seconds:avg_rate5m,结果如下

参考连接

https://www.kancloud.cn/nicefo71/prometheus-doc-zh/1331204

https://prometheus.io/docs/prometheus/latest/getting_started/

标签:采样,node,入门,Prometheus,job,prometheus,localhost
From: https://www.cnblogs.com/shouke/p/18667439

相关文章

  • 从入门到精通:Java 基础语法全解析,快速掌握核心编程技能
    系列文章目录01-从入门到精通:Java基础语法全解析,快速掌握核心编程技能文章目录系列文章目录前言一、Java的基本语法规则1.1Java程序结构1.1.1代码解析1.1.2Java的基本语法规则1.2Java的代码风格和规范二、变量与数据类型2.1变量的定义与使用2.1.1变量的声......
  • 数据结构入门
    数据结构数据结构分为顺序表,链表,栈,队列,堆,树,图顺序表顺序表的物理结构和逻辑结构都是连续的去建立一个顺序表,我们需要先去了解底层是什么。在脑海中很容易就会联想到数组,所以创建一个顺序表,首先要有一个数组。但是仅仅有数组是不够的,我们需要在其中对数据进行处理,那么其有......
  • 大语言模型入门指南:一篇掌握学习计划和路线,给自己三个月然后惊艳所有人
    课题介绍一、方向介绍在不到四年时间里,Transformer模型以其强大的性能迅速在NLP社区崭露头角,进而,基于Transformer这一标准架构的BERT、T5,乃至当下热门的GPT模型已经逐渐成为各个领域中的不可或缺的模型架构。深入理解Transformer模型背后的底层原理,以及Transformer相关的......
  • 大模型技术学习指南:从入门到精通_大模型从入门到高级的学习路线!
    “技术学习无非涵盖三个方面,理论,实践和应用**”**大模型技术爆火至今已经有两年的时间了,而且大模型技术的发展潜力也不言而喻。因此,很多人打算学习大模型,但又不知道该怎么入手,因此今天就来了解一下大模型的学习路线。‍‍丁元英说:“透视社会有三个层面,技术,制度与文化”;同......
  • 多 Agent 框架入门:开启智能协作新时代(24/30)
    一、引言:多Agent系统的崛起在当今科技飞速发展的时代,人工智能已深深融入人们生活的方方面面,多Agent系统作为其中的璀璨明珠,正散发着独特魅力。从智能家居设备的默契协作,到工业生产线上各环节的智能调度;从复杂交通网络的流量优化,再到金融市场的风险预测与策略制定,多Agent......
  • 单智能体入门:开启智能新世界的钥匙(23/30)
    一、智能体的神秘面纱近年来,智能体(Agent)成为科技领域炙手可热的话题。从OpenAI首席执行官奥特曼对智能体的前瞻布局,到各大科技巨头与初创公司纷纷涌入赛道,智能体已然站在科技浪潮之巅。它宛如一个灵动的数字化精灵,能感知环境、自主决策并采取行动,以达成预设目标。在智能体......
  • C++基础入门(一)
    目录前言C语言和C++的关系和区别一、命名空间1.命名空间的作用2.自定义命名空间二、从C语言快速入门C++1.输入输出2.基本变量类型3.内联函数4.Lambda表达式三.类1.类的初探2.结构体引入类3.新建C++工程来使用结构体(类)4.真正的成员函数四、权限初识五、引用1.......
  • PyQt5入门级超详细教程中篇
    PyQt5入门级超详细教程中篇:信号槽机制与表格数据展示接上篇:第4部分:事件处理与信号槽机制4.1什么是信号与槽?在PyQt5中,信号(Signal)和槽(Slot)是处理事件和交互的核心机制。信号代表某个事件的发生,而槽是信号触发后执行的函数。信号:信号是控件发出的消息,用来通知外界......
  • DOS入门
    DOS简单入门1.快速打开CMD按住shift鼠标右键点击桌面任意空白位置,点击打开Powershell,即可快速打开CMD;也可以按win键后搜索查找CMD点击命令提示符打开;或者是在文件管理器地址栏中输入CMD,即可打开CMD;2.常用DOS命令#盘符切换输入对应盘符加上英文冒号即可切换盘......
  • Unity TextMesh Pro入门
    概述TextMeshPro是Unity提供的一组工具,用于创建2D和3D文本。与Unity的UI文本和TextMesh系统相比,TextMeshPro提供了更好的文本格式控制和布局管理功能。本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功能可能在以后的时候完善.......