Prometheus 上手指南

news2024/9/20 22:34:02

文章目录

  • Prometheus 相关概念
    • Prometheus 的特点
    • Prometheus 架构
    • 数据模型 Datemode
      • 使用场景
    • 指标类型 Metric type
      • 适用场景
    • 作业和实例 Jobs and instances
      • 使用场景
  • Prometheus 安装
  • Prometheus 配置
    • prometheus
    • alertmanager
  • Grafana 可视化
    • Grafana 安装
    • Grafana 配置选项
    • Grafana UI
  • PromQL
    • 使用位置
    • 样例
    • 格式


Prometheus 相关概念

Prometheus 是一个开源系统监控和警报工具包

Prometheus 的特点

  • 多维数学模型:基于时间序列的数据模型,每个时间序列由度量名称和键值对标签组成
  • PromQL 查询:Prometheus特有的查询语言,可让用户实时选择和聚合时间序列数据,并且表达式结果可显示为图形
  • 无分布式存储:不依赖分布式存储,单个服务器节点是自主的
  • 采用拉取模式:通过HTTP主动从目标处拉取指标数据
  • 可视化选项丰富:Prometheus内置 UI,并支持 Grafana 等可视化工具,支持多种图形和仪表盘

与Prometheus类似的监控系统有:

  • Nagios:传统的IT基础设施监控工具。
  • Zabbix:企业级的分布式监控解决方案。
  • Graphite:专注于时间序列数据存储和图形化。
  • InfluxDB:专门为时间序列数据设计的数据库,常与Telegraf结合使用。
  • Sensu:云原生监控工具,支持自动发现和动态环境。
  • Datadog:SaaS 型监控平台,提供全面的基础设施和应用程序监控。

Prometheus相较于其他监控系统的优势:

  1. 安装配置简单:安装和使用都相对简单,配置文件使用 YAML 格式
  2. 数据模型丰富:数据查询和聚合更加灵活和高效
  3. 专注于高性能:专注于监控和告警,而不是试图成为全能型解决方案,使得它在特定领域表现极为出色,可以每秒处理数百万个指标
  4. 云原生更好支持:与 Kubernetes 等容器编排系统有很好的集成,支持服务发现

Prometheus 架构

Prometheus 的架构与其他一些生态组件

在这里插入图片描述

metrics 是指标的意思

图片中间部分:

  1. Prometheus Server:
    • 核心组件,负责数据的采集、存储和查询
    • Retrieval:检索,负责从目标拉去指标数据
    • TSDB (Time Series Database) :时间序列数据库,用于存储所有采集到的时间序列数据
    • HTTP server:HTTP服务器,用于提供 API 接口,用于数据查询等接口操作
  2. Service discovery:
    • kubernetes:自动发现 Kubernetes 集群中的监控目标
    • file_sd:基于文件的服务发现,用于静态配置监控目标
  3. Node:
    • 表示运行 Prometheus 服务器的物理或者虚拟服务器
    • HDD/SSD:存储 TSDB 数据的硬盘

图片左侧部分:

  1. Prometheus Targets:
    • 通常是长期运行的服务或应用程序
    • 暴露 HTTP 接口提供 Prometheus 抓去指标数据
    • Jobs/exporters:被监控的目标(服务器、应用程序等)
  2. Pushgateway:
    • 用于接收短期作业的指标推送
    • 允许那些无法被 Prometheus 直接拉取的作业推送它们的指标数据
  3. Short-lived jobs:
    • 生命周期较短的作业,难以被 Prometheus 直接拉取
    • 在作业退出时将指标推送到 Prometheus

图片右侧部分:

  1. Data Visualization and Export:
    • Prometheus Web UI:Prometheus内置的简单用户界面
    • Grafana:Prometheus更好的可视化工具
    • API clients:使用 Prometheus API 的客户端应用程序
  2. PromQL:
    • Prometheus 查询语言,用于查询和聚合时间序列数据
  3. Alertmanager:
    • 处理由 Prometheus 服务器发送的警报
    • 对警报进行分组、去重,并路由到正确的接收方式(如 PagerDuty、Email 等)

关于Prometheus Targets与Pushgateway:

Pormetheus Targets:

作用:

  • 是 Prometheus 直接抓取指标数据的目标
  • 通常是长期运行的服务或应用程序

特点:

  • 暴露 HTTP 端点(通常是 /metrics),Prometheus 定期从这个端点拉取数据
  • 被动等待 Prometheus 来抓取数据

适用场景:

  • 持续运行的服务,如 web 服务器、数据库、应用服务器等
  • 能够持续暴露最新指标的系统
  • 适合大多数标准的监控场景

Pushgateway:

作用:

  • 作为中间人接收来自短期作业的指标推送
  • 存储这些指标,知道 Prometheus 来抓取

特点:

  • 主动接收来自客户端推送的指标数据
  • 允许短期作业在完成时推送它们的指标

适用场景:

  • 短期作业或者批处理任务
  • 防火墙后不能直接被 Prometheus 访问的作业
  • 需要汇总多个源数据后再提供给 Prometheus 的场景
区别Prometheus TargetsPushgateway
数据流向被动等待拉取主动接收推送
持久性长期运行处理短期作业
数据新鲜度最新数据存储旧数据,直到被覆盖
复杂度简单直接额外的组件和复杂性

无法被 Prometheus 直接拉取的作业示例:

  • 批处理作业:如夜间数据处理、定期报告生成等
  • CI/CD 流水线中的构建作业
  • 定期备份任务
  • 防火墙后的内部服务,Prometheus 无法直接访问
  • 短期的云函数或 serverless 任务
  • 分布式系统中的临时工作节点
  • 离线数据处理任务,如 ETL 作业
  • 定期维护脚本或系统检查
  • 动态扩缩容的实例,可能在 Prometheus 下一次抓取前就已经消失。
  • 需要聚合多个微服务数据的场景,where 个别微服务可能短暂不可用

以上场景需要使用 Pushgateway


数据模型 Datemode

Prometheus官网介绍:https://prometheus.io/docs/concepts/data_model/

Prometheus 的数据模型基于时间序列。每个时间序列的组成:

  • 指标名称(Metirc name):描述被测量的系统特征(例如 http_requests_total
  • 标签对(Label pairs):键值对的形式,用于进一步区分指标的不同维度(例如 method="POST",status="200"
  • 时间戳(Timestamp):数据点的采集时间
  • 样本值(Sample value):在特定时间点测量的数值

示例:

http_requests_total{method="POST",status="200"} 1234 1600781977

使用场景

  • 需要存储和查询随时间变化的数据
  • 需要对数据进行多维度分析

指标类型 Metric type

Prometheus官网介绍:https://prometheus.io/docs/concepts/metric_types/

四种指标类型:

  1. 计数器(Counter):单调递增的累计值
  2. 仪表盘(Gauge):可以上下波动的瞬时值
  3. 直方图(Histogram):对观察值进行采样,提供总和和观察次数
  4. 摘要(Summary):类似直方图,但提供基于滑动窗口的分位数计算

适用场景

  • Counter: 用于累积值,例如:请求总数、错误总数
  • Gauge: 用于可变值,例如:当前温度、内存使用量
  • Histogram: 用于需要分布情况的数据,例如:响应时间分布
  • Summary: 用于需要准确百分位数的场景,例如:请求持续时间的第 90 百分位

作业和实例 Jobs and instances

Prometheus官网介绍:https://prometheus.io/docs/concepts/jobs_instances/

  • 作业(Job):一组执行相同任务的实例集合
  • 实例(Instance):一个可以被抓取的端点,通常对应一个单独的进程

yaml 文件中 Prometheus 自动为每个抓取的目标添加这些标签:

  • job:配置的作业名称
  • instance:被抓取的目标 <host>:<port>

示例 yaml 配置:

scrape_configs:
  - job_name: 'node exporter'
    static_configs:
    - targets: ['192.168.84.10:9100', '192.168.84.11:9100', '192.168.84.12:9100']

使用场景

  • 需要对多个相似的目标进行分组和管理
  • 需要区分相同服务的不同实例

Prometheus 安装

此处以三台 CentOS 9 虚拟机为例:

虚拟机安装推荐文章:Linux CentOS9安装配置-CSDN博客

虚拟机固定 IP主机名
192.168.84.10node1
192.168.84.11node2
192.168.84.12node3

Prometheus组件下载地址:https://prometheus.io/download/

需要下载的组件:

组件介绍
prometheusPrometheus监控系统与时间序列数据库
node_exporter机器指标导出器
pushgateway用于临时和批量作业的推送接受器
alertmanagerPrometheus 警报管理器

介绍都是官方直译

  1. 在 node1 节点上上传解压这四个组件(此处对组件进行了重命名,去除了.linux-amd64 后缀)

在这里插入图片描述

  1. 进入 prometheus 组件目录

在这里插入图片描述

其中 prometheus.yml 是它的配置文件(由后缀可以看出改配置文件使用的是 yaml 语法),默认内容为:

# 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"]
  1. scrape_configs 模块中 static_configstargets 内容 localhost 改为 node1 IP或主机名(需注意是否配置主机名映射)
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: ["192.168.84.10:9090"]
  1. 通过 pushgateway 组件获取数据,需要在 prometheus.yml 文件 scrape_configs 中配置相关 job_name

注意修改 IP 地址,默认端口为 9091

- job_name: 'pushgateway'
    static_configs:
    - targets: ['192.168.84.10:9091']
      labels:
        instance: pushgateway
  1. 第一部分:通过 node_export 组件获取数据,需要在 prometheus.yml 文件中配置相关 job_name

从 node1、node2、node3 三台节点拿取数据

注意 node1、node2、node3 IP 地址,默认端口为9100

- job_name: 'node exporter'
    static_configs:
    - targets: ['192.168.84.10:9100', '192.168.84.11:9100', '192.168.84.12:9100']
  1. 第二部分:将 node_exporter 分发到 node2、node3
#分发给node2
scp -r /home/fishpie/apps/node_exporter-1.8.2 root@192.168.84.11:/home/fishpie/apps
#分发给node3
scp -r /home/fishpie/apps/node_exporter-1.8.2 root@192.168.84.11:/home/fishpie/apps

或是在node2、node3下载安装 node_exporter-1.8.2

  1. 在 node1、node2、node3 启动 node_exporter-1.8.2 ,在 node1 启动 prometheus

为了使 node_exporterprometheus 服务做到开机自启动与监控中断后自动重启,我们可以将其作为一个系统服务并设置为开机自启动(类似于会自动重启的 nohup)

  • 第一步:node1、node2、node3 禁用 SELinux:
sudo vim /etc/selinux/config

将文件内 SELINUX 参数改为 disabled ,如下图
在这里插入图片描述

node1、node2、node3 重启系统使修改生效

sudo reboot
  • 第二步:node1 创建 prometheus 服务文件
sudo vim /etc/systemd/system/prometheus.service

添加以下内容,注意改为自己的 prometheus 命令位置、prometheus.yml 位置, User 为自己系统的用户

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=fishpie
ExecStart=/home/fishpie/apps/prometheus-3.0.0/prometheus --config.file=/home/fishpie/apps/prometheus-3.0.0/prometheus.yml
Restart=always

[Install]
WantedBy=multi-user.target
  • 第三步:node1、node2、node3 创建 node_exporter 服务文件
sudo vim /etc/systemd/system/node_exporter.service

添加一下内容,注意修改自己 node_exporter 命令

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=fishpie
ExecStart=/home/fishpie/apps/node_exporter-1.8.2/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target
  • 第四步:重新加载 systemd 管理器配置,在 node1、node2、node3 节点执行
sudo systemctl daemon-reload
  • 第五步:启动服务

node1上:

sudo systemctl start prometheus
sudo systemctl start node_exporter

node2、node3上:

sudo systemctl start node_exporter
  • 第六步:检查服务状态

node1上:

sudo systemctl status prometheus
sudo systemctl status node_exporter

node2、node3上:

sudo systemctl status node_exporter

如果 prometheusnode_exporter 服务正常则会显示:
在这里插入图片描述

  • 第七步:确认无误后设为服务开机自启动

node1:

sudo systemctl enable prometheus
sudo systemctl enable node_exporter

node2、node3:

sudo systemctl enable node_exporter
  • 访问网页 192.168.84.10:9090 查看 Target 运行状态

找到 Target 如果正常则会有一下页面
在这里插入图片描述

如果出现:

Error scraping target: Get “http://192.168.84.11:9100/metrics”: dial tcp 192.168.84.11:9100: connect: no route to host

则需要检查自己的防火墙是否关闭或者 9100 端口是否放行

  • 如果有需要启动 pushgateway 的情况

node1 在 pushgateway 目录下执行 :

nohup ./pushgateway --web.listen-address :9091 > ./pushgateway.log 2>&1 &

后台运行 pushgateway
在这里插入图片描述

此时我们的 pushgateway 就是 up 状态了
在这里插入图片描述

  • 如果有需要启动 alertmanager 的情况

node1 在 alertmanager 目录下执行:

nohup ./alertmanager --config.file=alertmanager.yml > ./alertmanager.log 2>&1 &

Prometheus 配置

prometheus

  • 目录内容
    在这里插入图片描述

prometheus.yaml 是 Prometheus 服务器的主要配置文件,定义了 Prometheus 如何收集指标、管理数据、配置告警等所有核心行为

prometheus.yaml 使用 YAML 格式,支持动态重载

  • prometheus 配置文件prometheus.yaml默认内容:
# 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: ["192.168.84.10:9090"]

  - job_name: 'pushgateway'
    static_configs:
    - targets: ['192.168.84.10:9091']
      labels:
        instance: pushgateway


  - job_name: 'node exporter'
    static_configs:
    - targets: ['192.168.84.10:9100', '192.168.84.11:9100', '192.168.84.12:9100']

以上配置文件分为四个大模块:

  1. 全局配置(global):
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  • scrape_interval :设置全局默认的数据抓去间隔
  • evaluation_interval :设置规则评估时间(告警检查的时间)
  1. Alertmanager 配置(alerting):
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
  • 用于配置 Alertmanager ,配置信息中 alertmanager 填为安装启动了 alertmanager 的主机名或IP
  1. 规则文件(rule_files):
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  • 用于指定告警规则和记录规则文件
  1. 抓取配置 (scrape_configs) 注意缩进问题
- job_name: "prometheus"
  static_configs:
    - targets: ["192.168.84.10:9090"]
  • 定义了 Prometheus 从哪些目标收集指标,此处配置为 Prometheus 抓去自己的指标,监控地址为 192.168.84.10:9090
- job_name: 'pushgateway'
  static_configs:
  - targets: ['192.168.84.10:9091']
    labels:
      instance: pushgateway
  • 配置抓取 Pushgateway 的指标,地址为 192.168.84.10:9091
  • 添加了一个自定义标签 instance: pushgateway

自定义标签 instance: pushgateway 的作用:

  • 标识:这个标签帮助唯一标识这个特定的 Pushgateway 实例
  • 查询和过滤:在 Prometheus 的查询语言 PromQL 中,你可以使用这个标签来过滤或选择特定的指标,例如使用查询 {instance="pushgateway"} 来选择所有来自这个 Pushgateway 的指标
  • 区分数据源:在多个数据源的情况下,这个标签可以区分哪些指标是 Pushgateway 的
  • 可视化部分:这个标签可以帮助在 Grafana 等可视化工具组织和过滤仪表板
- job_name: 'node exporter'
  static_configs:
  - targets: ['192.168.84.10:9100', '192.168.84.11:9100', '192.168.84.12:9100']
  • 配置抓取三个 Node Exporter 实例的指标,分别位于三个不同的 IP 地址上

alertmanager

  • 目录内容
    在这里插入图片描述

alertmanager 配置文件为 alertmanager.yml

采用 YAML语法

  • alertmanager 配置文件 alertmanager.yml 默认内容:
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

alertmanager.yml 配置文件由三个大模块构成:

  1. route(路由):
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'web.hook'
  • group_by: 按 ‘alertname’ 对告警进行分组

  • group_wait: 在发送分组的第一个告警前等待 30 秒,允许收集更多相关告警

  • group_interval: 发送同一组的后续告警的间隔为 5 分钟

  • repeat_interval: 如果告警持续存在,每 1 小时重复发送一次

  • receiver: 指定默认接收者为 ‘web.hook’(由以下 receiver 定义)

  1. reveivers(接受者):
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://127.0.0.1:5001/'
  • 定义了一个名为 ‘web.hook’ 的接收者,并将告警发送到 http://127.0.0.1:5001/
  • 接受者可以定义多个
  1. inhibit_rules(抑制规则)
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
  • 当存在严重级别为 ‘critical’ 的告警时,抑制严重级别为 ‘warning’ 的相关告警
  • ‘alertname’、‘dev’ 和 ‘instance’ 标签必须相同才会触发抑制

Grafana 可视化

Prometheus 官方推荐的可视化操作界面,使用 Grafana 需要有以下两个必需组件:

  • prometheus
  • node_exporter

Grafana 安装

两种方法可以为 Grafana 配置 Prometheus。可以使用 Grafana Cloud 上托管的 Grafana 实例或在本地运行 Grafana ,此处选择本地运行 Grafana

也可以选择安装 Windows 客户端 ,此处选择在 Linux 安装

Grafana 安装包地址:https://grafana.com/grafana/download

此处选取两种安装方式:

  1. 独立 Linux 二进制文件,在需要的安装目录
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.2.0.linux-amd64.tar.gz

tar -zxvf grafana-enterprise-11.2.0.linux-amd64.tar.gz
  1. yum 安装,能自动作为系统服务,不需要再手动配置(推荐)
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.2.0-1.x86_64.rpm

此处我们采用 yum 安装
在这里插入图片描述

如果 grafana 使用 YUM 正常安装,则在输入

whereis grafana

后会以下显示
在这里插入图片描述


Grafana 配置选项

Grafana 完整配置文档:https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/

Grafana 后端在其配置文件中定义了许多配置选项(在 Linux 系统上通常位于/etc/grafana/grafana.ini)

在这里插入图片描述

如图

现在我们编辑这个 grafana.ini 文件

大多数情况下,默认配置就足够了。只有在需要特定设置时才需要修改

修改配置后一定要重启Grafana服务以使更改生效

一定备份原始的 grafana.ini 文件!

sudo vim /etc/grafana/grafana.ini
  • 更改 HTTP 端口(默认为 3000)
[server]
http_port = 3000

在这里插入图片描述

  • 设置根 URL(如果Grafana在反向代理后面)
[server]
root_url = http://这里的汉字改为你的域名/grafana
# 根据自己的代理路径进行更改
  • 配置数据库(默认使用 SQLite)
[database]
type = mysql
host = <数据库的地址>:3306
name = <你的数据库名称>
user = <你的数据用户>
password = <你的数据库密码>
  • 配置 Grafana 的用户名和密码
[security]
admin_user = <自己设置用户名>
admin_password = <自己设置密码>
  • 配置日志
[log]
mode = console file
level = info

修改完配置后,保存退出文件并启动 Grafana 服务

#启动 grafana服务
sudo systemctl start grafana-server
#平滑重启 grafana 服务
sudo systemctl restart grafana-server

Grafana UI

作者是在 node1 节点(192.168.84.10)安装配置的 Grafana

如果上述步骤正确完成,则在访问 http://192.168.84.10:3000/ 会有
在这里插入图片描述

此处输入自己设置的 用户名 和 密码 即可进入 Grafana 监控页面
在这里插入图片描述

添加 Prometheus 数据源
在这里插入图片描述

选择 Prometheus 数据源
在这里插入图片描述

设置 Prometheus 所在 URL
在这里插入图片描述

下拉保存

创建仪表盘
在这里插入图片描述

创建新的仪表盘
在这里插入图片描述
在这里插入图片描述

查看 CPU 使用情况
在这里插入图片描述

一些常见的监控项目指标:

系统资源:

  • CPU使用率:node_cpu_seconds_total
  • 内存使用:node_memory_MemTotal_bytes - node_memory_MemFree_bytes
  • 磁盘使用:node_filesystem_free_bytes
  • 网络流量:node_network_receive_bytes_total, node_network_transmit_bytes_total

应用性能:

  • HTTP请求率:http_requests_total
  • 请求延迟:http_request_duration_seconds
  • 错误率:http_requests_total{status=~"5.."} / http_requests_total

数据库指标:

  • 连接数:mysql_global_status_threads_connected
  • 查询性能:mysql_global_status_queries

容器和编排指标(如果使用Kubernetes):

  • 容器CPU使用:container_cpu_usage_seconds_total
  • 容器内存使用:container_memory_usage_bytes

更用法请详见官方文档:https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/time-series/

现成的仪表盘:https://grafana.com/grafana/dashboards/


PromQL

PromQL(Prometheus Query Language)是专为 Prometheus 设计的查询语言,用于从 Prometheus 数据库中提取、过滤和聚合监控数据

使用位置

  • Prometheus 自带 UI 中
    在这里插入图片描述

  • 在 Grafana 中

仪表盘中选择
在这里插入图片描述


样例

以下是一些常用的 PromQL 的使用样例:

  • 返回所有 CPU 相关的时间序列
node_cpu_seconds_total
  • 返回空闲 CPU 时间的时间序列
node_cpu_seconds_total{mode="idle"}
  • 返回过去 5 分钟的空闲 CPU 时间数据
node_cpu_seconds_total{mode="idle"}[5m]

  • 使用 rate() 函数返回过去 5 分钟内每秒的平均 CPU 空闲率
rate(node_cpu_seconds_total{mode="idle"}[5m])
  • 使用 sum() 函数计算每个实例的总 CPU 使用率
sum(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)
  • 组合函数计算每个实例的 CPU 使用百分比
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

  • 预测 4 小时后哪些实例的根分区可能耗尽空间
predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4 * 3600) < 0

格式

可以看出 PromQL 有一些规律:

# 基本格式
<metric name>{<label matcher>}[<time range>]
  • <metric name>: 指标名称

  • {<label matcher>}: 可选的标签匹配器

  • [<time range>]: 可选的时间范围选择器

标签匹配器格式:

{label1="value1", label2=~"regex2", label3!="value3"}
  • =: 精确匹配

  • !=: 不等于

  • =~: 正则匹配

  • !~: 正则不匹配

更多细节详见:https://prometheus.io/docs/prometheus/latest/querying/basics/


Prometheus 官网:https://prometheus.io/

Grafana 文档:https://grafana.com/docs/grafana/latest/getting-started/get-started-grafana-prometheus/

Grafana 仪表盘:https://grafana.com/grafana/dashboards/

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

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

相关文章

假期学习--iOS 编译链接

iOS 编译链接 编译流程 四步&#xff1a; 1.预处理 2.编译 3.汇编 4.链接 大概的步骤如下&#xff1a; 预处理 作为编译的第一步&#xff0c;将.m文件转换为.i文件 &#xff1b; 预处理是要处理源代码中所有以#开头的所有预编译指令 &#xff1b; 规则如下&#xff1…

更换UFS绑定固件与“工程固件”的区别 小米10s机型更换cpu绑定包对比 写入以及修复基带

目前机型的安全机制越来越高。机型cpu与字库存在绑定关系。主板cpu如损坏需要更换。换新cpu后就需要刷写底层绑定包来修复 。今天的博文将为大家带来UFS绑定包与工程固件的区别以及写入 修复基带的步骤解析 通过博文了解 1💝💝💝-----更换UFS绑定包与工程固件的区别 2…

利士策分享,赚钱与体重:一场关于生活平衡的微妙探索

利士策分享&#xff0c;赚钱与体重&#xff1a;一场关于生活平衡的微妙探索 在当今社会&#xff0c;赚钱与体重&#xff0c;这两个看似风马牛不相及的概念&#xff0c; 却在无形中交织着人们的生活轨迹。 它们不仅仅是数字上的增减&#xff0c;更是个人选择、生活方式乃至心理…

Mycat搭建分库分表

分库分表解决的问题 单表数据量过大带来的性能和存储容量的限制的问题&#xff1a; 索引效率下降读写瓶颈存储容量限制事务性能问题分库分表架构 再搭建一对主从复制节点&#xff0c;3307主节点&#xff0c;3309从节点配置数据源 dw1 , dr1,创建集群c1创建逻辑库 CREATE DATAB…

【AI小项目6】QLoRA针对资源受限设备上的大模型微调和文本分类任务的推理

目录 一、项目简介概述时间主要工作和收获技术栈数据集结果参考 二、训练阶段的完整代码什么是 QLoRA 微调&#xff1f;注意 安装库导入包配置定义一个Config类配置训练参数配置Lora 初始化分词器和模型数据预处理计算模型评估指标交叉验证划分数据集举例&#xff1a; 创建Trai…

Redis-分片集群

分片集群 主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决&#xff1a; 海量数据存储问题 高并发写的问题 使用分片集群可以解决上述问题&#xff0c;如图: 分片集群特征&#xff1a; 集群中有多个master&#xff0c;每个master保存不同数据 每个ma…

Java-测试-Mockito 入门篇

之前很长一段时间我都认为测试就是使用SpringBootTest类似下面的写法&#xff1a; SpringBootTest class SysAuthServiceTest {AutowiredSysRoleAuthMapper sysRoleAuthMapper;Testpublic void test() {QueryWrapper<SysRoleAuth> queryWrapper new QueryWrapper<&g…

Linux命令:对文本文件的内容进行排序的工具sort详解

目录 一、概述 二、用法 1、 基本语法 2、 常用选项 3、获取帮助 三、示例 1. 基本用法 2. 按数字排序 3. 按第二列排序 4. 逆序排序 5. 删除重复行 6. 忽略大小写排序 7. 按人类可读的数值排序 8. 按版本号排序 四、高级用法 1. 与 uniq 结合使用去重 2. 与 gr…

1.使用 VSCode 过程中的英语积累 - File 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 VSCode 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&a…

不断挑战才有不断机遇!Eagle Trader等你来加入!

2024“Eagle Trader杯”全国职业交易联赛S1赛季已火热进行一个多月&#xff0c;吸引了超过355名交易员的积极参与&#xff01;目前&#xff0c;每天都有新的交易员踊跃报名参加&#xff01; 经过严格地交易考核&#xff0c;13名选手成功通过初试&#xff0c;正进入下一阶段的挑…

XILINX ZYNQ 7000 使用 FreeRTOS

XILINX 官方的SDK可以生成FreeRTOS 本文分为三个部分&#xff1a; 1.ZYNQ 7010 创建一个最小ZYNQ Processer系统&#xff0c;能够使用串口打印 2.使用SDK 创建一个FreeRTOS最小软件系统 3.浅析FreeRTOS最小软件系统 一&#xff1a;ZYNQ 7010 创建一个最小ZYNQ Processer系统&…

基于Linux系统离线安装oracle数据库

注意事项&#xff1a; 在安装的时候多次涉及root用户和oracle用户的切换&#xff0c;请注意区分&#xff0c;本文已明显 一、环境准备 1、关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld2、 禁用NetworkManager服务&#xff08;非必须&#xff09; [rootlocalhost …

信号与线性系统实验四 离散系统的时域及变换域分析

文章目录 一、实验目的二、实验内容与原理三、实验器材四、实验步骤五、实验数据及结果分析第一部分&#xff1a;离散时间信号的时域基本运算第二部分&#xff1a; 离散LTI系统的时域分析第三部分&#xff1a;离散LTI系统Z域分析 六、实验结论七、其他(主要是心得体会) 一、实验…

通信工程学习:什么是PON无源光网络

PON&#xff1a;无源光网络 PON&#xff08;Passive Optical Network&#xff0c;无源光纤网络&#xff09;是一种采用光分路器等无源光器件进行信号传输和分配的光纤接入技术。它利用光纤作为传输媒介&#xff0c;通过无源设备将光信号从中心局&#xff08;如光线路终端OLT&am…

Linux基础4-进程1(操作系统,进程介绍,Linux进程相关命令,getpid,fork)

上篇文章&#xff1a;Linux基础3-基础工具4&#xff08;git&#xff09;&#xff0c;冯诺依曼计算机体系结构-CSDN博客 本章重点&#xff1a; 1. 操作系统简介 2. 什么是进程&#xff1f; 3. 在Linux使用命令查看进程&#xff08;ps&#xff09; 4. getpid&#xff0c;getppid,…

卷积和相关

卷积和相关是两种运算关系(或过程),都是含参变量的无穷积分。都是两个函数通过某种运算得到另外一个函数。 卷积运算: 可用来表示一个观测系统或一个观 测仪器对输入信号的作用过程等。 相关运算:常用来比较两个函数的关联性,相似程度,用于信号检测,图像识别。如:在混…

SCSAI平台面向对象建模技术的设计和实现(1)

SCSAI平台面向对象建模技术的设计和实现&#xff08;1&#xff09; 原创 团长团 AI智造AI编程 2024年09月19日 20:09 北京 用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCSAI,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现…

【jupyter notebook】环境部署及pycharm连接虚拟机和本地两种方式

Python数据处理分析简介 Python作为当下最为流行的编程语言之一 可以独立完成数据分析的各种任务数据分析领域里有海量开源库机器学习/深度学习领域最热门的编程语言在爬虫&#xff0c;Web开发等领域均有应用 与Excel&#xff0c;PowerBI&#xff0c;Tableau等软件比较 Excel有…

双立方(三次)卷积插值

前言 图像处理中有三种常用的插值算法&#xff1a; 最邻近插值 双线性插值 双立方&#xff08;三次卷积&#xff09;插值 其中效果最好的是双立方&#xff08;三次卷积&#xff09;插值&#xff0c;本文介绍它的原理以及使用 如果想先看效果和源码&#xff0c;可以拉到最底…

【论文阅读笔记】YOLOv10: Real-Time End-to-End Object Detection

论文地址&#xff1a;https://arxiv.org/abs/2405.14458 文章目录 论文小结论文简介论文方法为NMS-free训练的一致性双标签分配双标签分配一致性匹配度量 效率-精度整体驱动的模型设计效率驱动模型设计轻量级分类检测头Spatial-channel 解耦下采样Rank-guided block design 精度…