[Prometheus学习笔记]从架构到案例,一站式教程

news2024/11/26 15:00:38

文章目录

  • Prometheus 优势
  • Prometheus 的组件、架构
    • Prometheus Server 直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警。可以通过 Grafana 或者其他工具来实现监控数据的可视化
  • 概念
    • 数据模型
      • 时间序列
      • 指标名称
      • 标签
      • 样本
      • 时间序列的表示方式
    • 指标类型
      • Counter(计数器)
      • Gauge(仪表盘)
      • Histogram(直方图)
      • Summary(摘要)
      • Jobs 和 Instance
  • Prometheus 的部署(二进制)
    • 创建 prometheus 根目录
    • 官网下载 prometheus
    • 上传 prometheus 到服务器并解压
    • 为文件夹递归赋予可执行权限
    • 创建软链接(或者直接改名文件夹)
    • 前台启动 prometheus
      • 另启一个终端,判断端口状态
    • 关闭前台进程,准备更方便的后台进程
      • 使用 promtool 检查语法正确性
      • 创建自启动脚本(将 prometheus 自定义为服务)
      • 重载系统配置及启动 prometheus
      • 访问不了,我们看看端口状态
      • 再看看服务状态
        • 查看安装的文档结构
        • 重新加载配置
        • 查看 Prometheus 后台
  • Exporter 组件
    • 作用
    • Exporter 类型
      • 直接采集型
      • 间接采集型
    • 文本数据格式
    • 配置 Linux 主机监控(Node Exporter)
      • 安装 Exporter
      • Prometheus server 关联 node_exporter(静态配置功能)
        • 主配置文件介绍
        • 添加 node_exporter 任务(注意对齐)
        • 检查代码语法
      • 查看当前 targets
        • 重启 Prometheus server,看看对 node1 的监控
      • metrics 数据采集
        • 查看 node1 文件系统的总大小
        • 查看 cpu 指标(图形呈现)
      • 配置 Mysql 主机监控
        • 部署 mariadb
          • 添加用户 exporter
        • node1 上安装配置 Exporter
          • 官网下载 mysqld_exporter 二进制包解压缩
          • 为 mysqld_exporter 赋予执行权限,并创建软链接
          • 配置 mysqld_exporter 配置文件,存放用户名和密码
          • 后台运行 mysqld_exporter
          • 查看暴露的端口
        • 关联 Prometheus server
          • 添加 mysqld_exporter 任务
          • 检查语法,重启 prometheus 监控
          • 查看 Prometheus 后台
        • 数据采集
          • 查询 MySQL 最大连接数
          • 查询吞吐量
          • 查询当前连接数
  • 服务发现
    • 基于文件的服务发现
      • 注释 proemtheus.yml 中的 exporters 配置
      • 重启 prometheus 服务
      • 准备 target 配置文件
      • 修改 Prometheus 配置文件
      • 重启服务
    • 其他方法进行服务发现
  • PromQL
    • 时序数据库 TSDB
      • 特点
      • 时序数据库的基本要求
      • 常见的时序数据库
    • PromQL 操作符
      • 数学运算
      • 布尔运算
      • 集合运算符
      • 操作符优先级
    • PromQL 聚合操作
      • 例子
        • sum()
        • count_values()
        • topk()
        • quantile()
    • 内置函数
      • 计算 Counter (计数器)指标增长率
        • increase() 函数
        • rate() 函数
        • irate() 函数
      • 预测Gauge(仪表盘)指标变化趋势
        • predict_linear函数()
      • 统计Histogram(直方图)指标的分位数
  • Grafana数据展示
    • 部署Grafana
      • 下载软件包并安装
        • 安装grafana
        • 启动服务,加入开机自启
        • 看3000端口是否监听
    • 访问Grafana
      • 添加数据源
      • 新建一个叫Prometheus的文件夹
      • 创建仪表盘
      • 添加node1磁盘可用空间的监测
      • 添加更多监控项
      • 仪表盘
      • 保存仪表盘
      • 使用第三方模板
        • 根据需求选择合适的模板
        • 回到仪表盘进行导入
        • 展现当前Linux主机的全部状态
  • Altermanager告警
    • 概述
    • 告警逻辑
    • Altermanger机制
      • 分组机制
      • 抑制机制
      • 静默机制
    • Altermanager的部署
      • 下载解压安装包
      • 编辑Alertmanger配置文件
        • 查看配置文件
      • Alertmanager使用邮箱报警
        • QQ邮箱准备
        • 修改配置文件
        • 后台启动Alertmanager
        • 关联Prometheus
        • 添加告警规则
        • 在Prometheus配置文件中导入
        • 用promtool检查语法
        • 重启prometheus
        • 在web中查看Rules
        • 关闭node1测试
        • 等一分钟看邮箱是否有告警

Prometheus 优势

  • 强大的查询语言 PromQL
  • 不依赖分布式存储
  • 不依赖分布式存储;单个服务节点拥有自治能力
  • 通过静态配置文件或服务发现来获取监控目标(zabbix 要进行手动配置)
  • 支持多种类型的图表和仪表盘

Prometheus 的组件、架构

在这里插入图片描述

Prometheus Server 直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警。可以通过 Grafana 或者其他工具来实现监控数据的可视化

组件功能
Prometheus server收集每个目标数据,并存储为时间序列数据,对外可提供数据查询支持和告警规则配置管理
Exporter用于输出被监控组件信息的 HTTP 接口
Pushgateway用于支持短期临时或批量计划任务工作的汇聚节点
Alertmanager用于处理 Prometheus 服务器端发送的 alerts 信息,对其去除重数据、分组并路由到正确的接收方式,发出告警;支持丰富的告警方式
Service Discovery动态发现待监控的 target,从而完成监控配置的重要组件

概念

数据模型

时间序列

  • Prometheus 数据的基本单位
  • Prometheus 采集的所有的监控数据均以 指标(metrics) 的形式保存在内置的时间序列数据库 TSDB 中
  • 时间序列中的每一个点称为样本,每个样本由 度量名称(Metric Name)、标签(labels)、样本值(sample value)组成
  • 指标名称及标签(键值对)是 时间序列的 唯一标识

指标名称

  • 反映被监控样本的含义
  • httprequest_total 可以看出来表示当前系统接收到的 http 请求总量
  • 指标名称只能由 ASCII 字符、数字、下划线以及冒号组成,同时必须匹配正则表达式 [a-zA-Z*:][a-zA-Z0-9_:]

标签

  • 使用标签,Prometheus 开启了强大的多维数据模型
  • 对于相同的指标名称,通过不同标签列表的集合,会形成特定的度量维度实例
  • 例如,所有包含度量名称为 /api/tracks 的 http 请求,打上 method=POST 的标签,就会形成具体的 http 请求
  • 查询语言在这些指标和标签列表的基础上进行过滤和聚合,改变任何度量指标上的任何标签值(包括添加或删除指标),都会创建新的时间序列
  • 标签的名称只能由 ASCII 字符、数字、以及下划线组成并满足正则表达式 [a-zA-Z_][a-zA-Z0-9_]*
  • 标签的值则可以包含任何 Unicode 编码的字符

样本

在时间序列中的每一个点称为样本,样本由以下三部分组成

  • 指标(metric):指标名称和描述当前样本特征的 labelset
  • 时间戳:一个精确到时间毫秒的时间戳
  • 样本值:一个浮点型数据表示当前样本的值

时间序列的表示方式

<metric name>{<label name>=<label value>, ...}

例:指标名称为 api_http_requests_total,标签为 method="POST"handler="/messages" 的时间序列可以表示为如下

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

指标类型

四种核心指标类型(数据)

Counter(计数器)

  • 计数器类型的度量 只能增加 或重置为零

  • 常用于记录事件的累计次数,如请求数、错误数等。

  • 例:利用 PromQL 内置操作函数对 http 请求量进行分析

    # 通过rate()函数获取5min内http请求的增长率
    rate(http_requests_total[5m])
    
    # 通过topk()函数得出访问量前十的HTTP地址
    topk(10,http_requests_total)
    

Gauge(仪表盘)

  • 仪表盘类型的度量 可以任意增减

  • 常用于表示瞬时值,如温度、内存使用量、当前并发请求数等

  • 示例:利用 PromQL 内置操作函数获取样本在一段时间内的变化

    # 利用delta()函数计算node1主机cpu温度在两小时内的变化
    delta(cpu_temp_celsius{host="node1"}[2h])
    # 利用predict_linear()函数基于两小时的样本数据,预测node2四个小时之后的磁盘空间剩余是否小于0
    predict_linear(node_filesystem_free{job="node2"}[2h],4*3600)<0
    

Histogram(直方图)

  • 直方图类型的度量用于记录 量化指标的分布情况(如 cpu 平均使用率、页面平均响应时间)

  • 为了解决取全部平均值长尾问题:如大多数 api 请求响应时间在 100ms 以内、个别请求响应时间需要五秒,导致平均响应时间拉长

  • Histogram 在一段时间范围内(通常是请求持续时间或响应大小)对数据进行采样,并将其计入可配置的存储桶(bucket)中,之后可以通过指定区间筛选样本,也可以统计样本总数,最后的结果为直方图展示

    1. 统计样本的值分布在 bucket 中的数量: <basename>_bucket{le="<上边界>"}(即最大值小于等于上边界的数量)

      # 在总共2次请求当中。http 请求响应时间 <=0.005 秒 的请求次数为0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.005",} 0.0
      # 在总共2次请求当中。http 请求响应时间 <=0.01 秒 的请求次数为0 io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.01",} 0.0
      # 在总共2次请求当中。http 请求响应时间 <=0.025 秒 的请求次数为0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.025",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.05",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.075",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.1",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.25",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.5",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.75",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="1.0",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="2.5",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="5.0",} 0.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="7.5",} 2.0
      # 在总共2次请求当中。http 请求响应时间 <=10 秒 的请求次数为 2
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="10.0",} 2.0
      io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="+Inf",} 2.0
      
    2. 所有样本值的大小总和,命名为 <basename>_sum

      # 发生的2次 http 请求总的响应时间为 13.107670803000001 秒
      io_namespace_http_requests_latency_seconds_histogram_sum{path="/",method="GET",code="200",} 13.107670803000001
      
    3. 样本总数,命名为 <basename>_count。值和 <basename>_bucket{le="+Inf"} 相同。

      # 当前一共发生了 2 次 http 请求
        io_namespace_http_requests_latency_seconds_histogram_count{path="/",method="GET",code="200",} 2.0
      

Summary(摘要)

  • summary 与 histogram 功能相似,提供在某个区间抽样检查
  • 但需要提前指定好动态百分位数(Quantiles)

Jobs 和 Instance

在 Prometheus 中,任何被采集的目标(每一个暴露监控样本数据的 HTTP 服务)都称为 一个 实例 Instance,通常对应单个进程

具有相同采集目的的实例集合叫做 作业 Job

Prometheus 的部署(二进制)

创建 prometheus 根目录

mkdir /prometheus

官网下载 prometheus

https://prometheus.io/download/

上传 prometheus 到服务器并解压

tar -zxvf prometheus-2.47.0.linux-amd64.tar.gz  -C /prometheus/

在这里插入图片描述

为文件夹递归赋予可执行权限

chown -R root:root prometheus-2.47.0.linux-amd64/

创建软链接(或者直接改名文件夹)

ln -sv prometheus-2.47.0.linux-amd64/ prometheus

# 或者 mv prometheus-2.47.0.linux-amd64/ prometheus

在这里插入图片描述

在这里插入图片描述

前台启动 prometheus

./prometheus
# [ctrl]+c 终止

在这里插入图片描述

另启一个终端,判断端口状态

ss -ntl

在这里插入图片描述

这时理论上来说应该可以进行了,但是检查一番后发现没关防火墙,导致浏览器访问不到 Prometheus 后台

systemctl stop firewalld
setenforce 0

在这里插入图片描述

关闭前台进程,准备更方便的后台进程

使用 promtool 检查语法正确性

./promtool check config prometheus.yml

在这里插入图片描述

创建自启动脚本(将 prometheus 自定义为服务)

vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Type=simple
Restart=on-failure
ExecStart=/data/prometheus/prometheus \
    --config.file=/data/prometheus/prometheus.yml \
    --storage.tsdb.path=/data/prometheus/data \
    --web.listen-address=:9090 \
    --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

重载系统配置及启动 prometheus

systemctl daemon-reload
systemctl enable prometheus.service
systemctl start prometheus.service

在这里插入图片描述

访问不了,我们看看端口状态

ss -ntl

在这里插入图片描述

发现没有暴露 prometheus 对应的 9090 端口

再看看服务状态

systemctl status prometheus

在这里插入图片描述

哦,发现一个很严重的问题

 ExecStart=/data/prometheus/prometheus --config.file=/data/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus/data --web.listen-address=:9090 --web.enable-lifecycle (code=exited, status=203/EXEC)

服务配置文件里指定的文件路径错了

我们对应改成正确的

查看安装的文档结构
tree

在这里插入图片描述

# vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Type=simple
Restart=on-failure
ExecStart=/prometheus/prometheus/prometheus \
    --config.file=/prometheus/prometheus/prometheus.yml \
    --storage.tsdb.path=/prometheus/prometheus/data \
    --web.listen-address=:9090 \
    --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
重新加载配置
systemctl daemon-reload
systemctl enable prometheus.service
systemctl start prometheus.service

在这里插入图片描述

查看 Prometheus 后台

在这里插入图片描述

Exporter 组件

作用

连接被监控系统和服务与 Prometheus 服务器之间的桥梁

主要作用包括:数据收集、数据转换、暴露监控接口等

Exporter 类型

直接采集型

  • Exporters 内置响应程序,可以直接向 Prometheus 提供 target 数据支持
  • 可以更好的监控各自系统内部的运行状态
  • 适合自定义监控指标的项目实施
  • 如 k8s 直接提供了给 Prometheus 的接口

间接采集型

  • 原始监控项并不支持 Prometheus,需要使用 Prometheus 客户端编写监控目标的监控采集数据
  • 如 Linux 操作系统本身不能直接支持 Prometheus,需要使用单独的 Node Exporter

文本数据格式

特点:良好的跨平台性和可读性

全部文本数据可以通过 curl [服务器ip]/metrics 获取到,Prometheus 后台搜索项是对这些 metrics 的过滤呈现

curl 192.168.28.88:9090/metrics

在这里插入图片描述

配置 Linux 主机监控(Node Exporter)

安装 Exporter

  1. 官网下载 node exporter 的二进制包并解压

    mkdir /exporter
    tar -zxvf node_exporter-1.8.2.linux-amd64.tar.gz -C /exporter
    

    在这里插入图片描述

  2. 为解压文件赋予执行权限

     chown -R root:root /exporter/node_exporter-1.8.2.linux-amd64/
    
  3. 创建软链接

    ln -sv /exporter/node_exporter-1.8.2.linux-amd64 /exporter/node_exporter
    

    在这里插入图片描述

  4. 运行启动脚本后台启动 Node_exporter

    cd /exporter/node_exporter
    ./node_exporter& # 加上`&`表示后台启动
    

    在这里插入图片描述

  5. jobs 命令查看后台进程

    jobs
    # fg %1 恢复前台运行
    

    在这里插入图片描述

  6. 查看暴露的端口号

    ss -ntl
    

    在这里插入图片描述

Prometheus server 关联 node_exporter(静态配置功能)

通过修改 Prometheus server 的主配置文件 prometheus.yml 中的 static_config 参数来采集 node_exporter 提供的数据

主配置文件介绍
cat prometheus.yml
# 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:
  scrape_interval:每次数据采集的时间间隔,默认为1分钟
  scrape_timeout:采集请求超时时间,默认为10秒
  evaluation_interval:执行rules的频率,默认为1分钟
scrape_configs:主要用于配置被采集数据节点操作,每一个采集配置主要由以下几个参数
  job_name:全局唯一名称
    scrape_interval:默认等于global内设置的参数,设置后可以覆盖global中的值
    scrape_timeout:默认等于global内设置的参数
    metrics_path:从targets获取meitric的HTTP资源路径,默认是/metrics
    honor_labels:Prometheus如何处理标签之间的冲突。若设置为True,则通过保留变迁来解决冲突;若设置为false,则通过重命名;
    scheme:用于请求的协议方式,默认是http
    params:数据采集访问时HTTP URL设定的参数
    relabel_configs:采集数据重置标签配置
    metric_relabel_configs:重置标签配置
    sample_limit:对每个被已知样本数量的每次采集进行限制,如果超过限制,该数据将被视为失败。默认值为0,表示无限制
添加 node_exporter 任务(注意对齐)
- job_name: "node_exporter"
  static_configs:
      - targets: ["192.168.28.66:9100"]
检查代码语法
./promtool check config prometheus.yml

在这里插入图片描述

查看当前 targets

在这里插入图片描述

重启 Prometheus server,看看对 node1 的监控
systemctl restart prometheus

可以看到监测的 node1

在这里插入图片描述

metrics 数据采集

查看 node1 文件系统的总大小

在这里插入图片描述

对查询结果进行数学运算(node1 总空间约为 100G)

在这里插入图片描述

查看 cpu 指标(图形呈现)

node1 只分配了 2 核,且没有运行额外的进程,所以 cpu 曲线很平稳

在这里插入图片描述

配置 Mysql 主机监控

部署 mariadb
yum -y install mariadb-server # 安装mariadb服务端
systemctl enable --now mariadb 
mysqladmin -uroot password '123456' # 初始化数据库并设置密码
mysql -uroot -p123456 -e "show databases;" # 测试数据库连接是否正常

添加用户 exporter
MariaDB [(none)]> grant all privileges on *.* to mysqld_exporter@'localhost' identified by  '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit

在这里插入图片描述

node1 上安装配置 Exporter
官网下载 mysqld_exporter 二进制包解压缩
tar -zxvf  mysqld_exporter-0.15.1.linux-amd64.tar.gz -C /exporter/
# exporter文件夹用的是是上个实验创建好的

在这里插入图片描述

为 mysqld_exporter 赋予执行权限,并创建软链接
chown -R root:root mysqld_exporter-0.15.1.linux-amd64/
ln -sv  mysqld_exporter-0.15.1.linux-amd64  mysqld_exporter

在这里插入图片描述

配置 mysqld_exporter 配置文件,存放用户名和密码
 # cd mysqld_exporter
 # vim mysqld_exporter.cnf
[client]
user=mysqld_exporter
password=123456
后台运行 mysqld_exporter
./mysqld_exporter --config.my-cnf='mysqld_exporter.cnf' &
查看暴露的端口

在这里插入图片描述

关联 Prometheus server
添加 mysqld_exporter 任务
# vim prometheus.yml
 - job_name: 'mysqld_exporter'
   # scrape_interval: 10s # 设置抓取间隔为 10 秒
    static_configs:
      - targets: ["192.168.28.66:9104"]

在这里插入图片描述

检查语法,重启 prometheus 监控
 ./promtool check config prometheus.yml
  systemctl restart prometheus
查看 Prometheus 后台

在这里插入图片描述

数据采集
查询 MySQL 最大连接数

在这里插入图片描述

查询吞吐量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查询当前连接数

在这里插入图片描述

我们再到客户端连接一下

mysql —uroot -p123456

在这里插入图片描述

服务发现

Prometheus 服务发现可以自动发现并监控目标或变更目标,动态进行数据采集和处理

基于文件的服务发现

注释 proemtheus.yml 中的 exporters 配置

在这里插入图片描述

重启 prometheus 服务

systemctl restart prometheus

在这里插入图片描述

准备 target 配置文件

cd /prometheus
mkdir targets
# vim dev_node.yaml
- targets:
  - "192.168.28.66:9100"
  - "192.168.88.66:9104"

修改 Prometheus 配置文件

# vim prometheus.yml
# 加上以下内容
  - job_name: "node_service_discovery"
    file_sd_configs:
      - files:
        - targets/*.yml
        - refresh_interval: 60s

重启服务

systemctl restart prometheus

在这里插入图片描述

用于监控 Linux 的 metrics 正确 UP 了,检测 MySQL 的 metrics 却一直是 DOWN 状态

排查一下,如果说是 prometheus.yml 写错了,那压根就不会显示后台;说明是 dev_node.yml 写错了什么

cat prometheus/targets/dev_node.yml

在这里插入图片描述

确实是 targets 写错了

我们把他改对了,再看看

在这里插入图片描述
20241102202135740.png&pos_id=img-Shte1ISH-1730621534027)

由此说明,服务发现可以先把没有配置服务的 IP(端口)加上,只不过暂时会显示 DOWN 的状态

其他方法进行服务发现

除了基于文件的服务发现,Prometheus 还可以通过基于 k8s 的服务发现、基于 DNS 的服务发现

PromQL

  • PromQL(Prometheus Query Language)
  • Prometheus 自己开发,类似于 SQL 中的 DQL
  • 使用这个查询语言能够进行各种聚合、分析和计算,使管理员能够根据指标更好地了解系统性能

时序数据库 TSDB

特点

  • 数据写入——写多读少
  • 数据查询——对最近生成的数据读取概率高;按一定的时间范围读取一段时间的数据
  • 数据存储特点——数据存储量大;数据具有时效性(数据有一个保存周期)

时序数据库的基本要求

  • 支持高并发、高吞吐的写入
  • 快速查询的性能:提供索引支持或聚合查询
  • 高可用性:在节点故障时能够自动恢复,保证系统的持续可用性;支持数据备份和恢复操作,防止数据丢失
  • 可扩展性:支持通过添加新的节点来扩展存储和计算能力;

常见的时序数据库

  • TimescaleDB: 基于 PostgreSQL 的时序数据库,支持 SQL 查询和事务处理
  • OpenTSDB: 基于 HBase 的时序数据库,适用于大规模数据存储和查询
  • InfluxDB: 开源时序数据库,支持高写入性能和灵活的查询语言
  • VictoriaMetrics: 高性能、低成本的时序数据库,支持多租户和分布式部署

PromQL 操作符

数学运算

  • + (加法)
  • - (减法)
  • * (乘法)
  • / (除法)
  • % (求余)
  • ^ (幂运算)

布尔运算

  • == (相等)
  • != (不相等)
  • > (大于)
  • < (小于)
  • >= (大于等于)
  • <= (小于等于)

集合运算符

  • and (并且,交集)
  • or (或者,并集)
  • unless (差集)

操作符优先级

在 PromQL 操作符中优先级由高到低依次为:

  1. ^
  2. *, /, %
  3. +, -
  4. ==, !=, <=, <, >=, >
  5. and, unless
  6. or

PromQL 聚合操作

使用聚合操作的语法如下:

<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]
  • sum (求和)
  • min (最小值)
  • max (最大值)
  • avg (平均值)
  • stddev (标准差)
  • stdvar (标准差异)
  • count (计数)
  • count_values (对 value 进行计数)
  • bottomk (后 n 条时序)
  • topk (前 n 条时序)
  • quantile (分布统计)

其中只有 count_values, quantile, topk, bottomk 支持参数(parameter)

without 用于从计算结果中 移除列举的标签,而保留其它标签

by 则正好相反,结果向量中 只保留列出的标签,其余标签则移除

例子

sum()

计算所有实例的活跃内存(node_memory_Active_bytes)总量,而不考虑具体的实例(instance

sum(node_memory_Active_bytes) without (instance)

显示每个 HTTP 状态码(code)、请求处理程序(handler)、被监控的服务或目标(job)和 HTTP 请求方法(method)的请求次数

sum(http_requests_total) by (code,handler,job,method)

计算整个应用的 HTTP 请求总量

sum(http_requests_total)
count_values()

count_values 会为每一个唯一的样本值输出一个时间序列,并且每一个时间序列包含一个额外的标签

count_values("count", http_requests_total)
topk()

topk()用于对样本值进行排序,返回当前样本值前 n 位,或者后 n 位的时间序列

获取 HTTP 请求数前 5 位的时序样本数据

topk(5, http_requests_total)
quantile()

quantile 用于计算当前样本数据值的分布情况

quantile(φ, express) # 其中0 ≤ φ ≤ 1

当 φ 为 0.5 时,即表示找到当前样本数据中的中位数:

quantile(0.5, http_requests_total)

内置函数

计算 Counter (计数器)指标增长率

increase() 函数
increase(v range-vector)
# 参数v是一个区间向量,increase函数获取区间向量中的第一个后最后一个样本并返回其增长量

例:统计主机节点最近两分钟内的平均 CPU 使用率

increase(node_cpu_seconds_total[2m] )/120

node_cpu [2m] 获取时间序列最近两分钟的所有样本,increase 计算出最近两分钟的增长量,最后除以时间 120 秒得到 node_cpu 样本在最近两分钟的平均增长率

12:33 左右,CPU 使用突然上升到接近满载的状态,然后保持稳定。这表明在这个时间段内,系统开机经历了一次显著的负载增加

rate() 函数
rate(v range-vector)
# 直接计算区间向量v在时间窗口内平均增长速率

例:统计主机节点最近两分钟内的平均 CPU 使用率

rate(node_cpu_seconds_total[2m])

在这里插入图片描述

跟之前的incraese()函数处理的结果一模一样

irate() 函数

统计瞬时增长率,避免长尾问题

irate(v range-vector)
# 通过区间向量中最后两个样本数据来计算区间向量的增长速率

例:统计主机节点最近两分钟内的平均 CPU 使用率

irate(node_cpu_seconds_total[2m])

在这里插入图片描述

irate函数相比于rate函数提供了更高的灵敏度,不过当需要分析长期趋势或者在告警规则中,irate的这种灵敏度反而容易造成干扰。因此在长期趋势分析或者告警中更推荐使用rate函数

预测Gauge(仪表盘)指标变化趋势

predict_linear函数()
predict_linear(v range-vector, t scalar)

预测时间序列v在t秒后的值。它基于简单线性回归的方式,对时间窗口内的样本数据进行统计,从而可以对时间序列的变化趋势做出预测

例子:基于2小时的样本数据,来预测主机可用磁盘空间的是否在4个小时候被占满

predict_linear(node_filesystem_free_bytes{job="node_service_discovery"}[2h], 4 * 3600) < 0

统计Histogram(直方图)指标的分位数

Histogram的分位数计算需要通过histogram_quantile(φ float, b instant-vector)函数进行计算,φ(0<φ<1)表示需要计算的分位数

以指标http_request_duration_seconds_bucket为例

http_request_duration_seconds_bucket{le="0.5"} 0
http_request_duration_seconds_bucket{le="1"} 1
http_request_duration_seconds_bucket{le="2"} 2
http_request_duration_seconds_bucket{le="3"} 3
http_request_duration_seconds_bucket{le="5"} 3
http_request_duration_seconds_bucket{le="+Inf"} 3
http_request_duration_seconds_sum 6
http_request_duration_seconds_count 3

计算9分位数时,使用如下表达式

histogram_quantile(0.5, http_request_duration_seconds_bucket)

Grafana数据展示

Grafana支持图表模板导入,支持除Prometheus之外多种数据源(包括MySQL、zabbix、elasticsearch等)

部署Grafana

下载软件包并安装

官网地址:https://grafana.com/grafana/download

安装grafana
 rpm -ivh grafana-7.5.3-1.x86_64.rpm
 # 或者用yum装
 yum install -y grafana-7.5.3-1.x86_64.rpm

在这里插入图片描述

启动服务,加入开机自启
systemctl enable grafana-server
systemctl start grafana-server
看3000端口是否监听

在这里插入图片描述

访问Grafana

初始账号密码均为admin,登录以后提示修改密码

在这里插入图片描述

添加数据源

在这里插入图片描述

然后选择Prometheus数据源

在这里插入图片描述

!记得保存设置,不然默认监测localhost:9090端口

新建一个叫Prometheus的文件夹

在这里插入图片描述

创建仪表盘

可以选择各种监控项

在这里插入图片描述

添加node1磁盘可用空间的监测

在这里插入图片描述

添加更多监控项

在这里插入图片描述

仪表盘

在这里插入图片描述

保存仪表盘

点击右上角的save dashboard

使用第三方模板

官方模板网站:https://grafana.com/grafana/dashboards/

根据需求选择合适的模板

复制模板ID

在这里插入图片描述

回到仪表盘进行导入

在这里插入图片描述

在这里插入图片描述

展现当前Linux主机的全部状态

在这里插入图片描述

Altermanager告警

概述

  • Prometheus对指标的收集、存储同告警能力分属于Prometheus Server和AlertManager两个独立的组件组成
  • 前者仅仅负责基于告警规则生成告警通知,具体的告警操作则由后者完成
  • AlertManager负责处理由客户端发来的告警通知
    • 客户端通常是Prometheus Server,但也支持来自其他工具的告警
    • AlertManageer对告警通知进行分组、去重后根据路由规则将其路由到不同的receiver,如email、企业微信、钉钉等

告警逻辑

在这里插入图片描述

  • 在AlertManager上定义receiver,他们能够基于某个媒介接收告警信息的特定用户;
  • 在Alertmanager上定义路由规则(route),以便将收到的告警通知按需分别进行处理
  • 在Prometheus上定义告警规则生成告警通知,发送给Alertmanager

Altermanger机制

除了基本的告警,Atermanager还支持对告警进行去重分组、抑制、静默和路由等功能

分组机制

  • 将相似告警合并为单个告警通知的机制
  • 在系统因大面积故障而触发告警时,分组机制能避免用户被大量的告警噪声淹没,进而导致关键信息的隐没

抑制机制

  • 系统中某个组件或服务故障而触发告警通知后,那些依赖于该组件或服务的其他组件或服务也会因此而触发告警
  • 作用是避免类似的级联告警的一种特性,从而让用户的精力集中于真正的故障所在

静默机制

  • 在一个特定的时间窗口内,便接收到告警通知,Alertmanager也不会真正向用户发送告警行为
  • 通常,在系统例行维护期间,需要激活告警系统的静默特性

Altermanager的部署

下载解压安装包

mkdir /altermanager
tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz -C /altermanager/
cd /altermanager

和之前的组件类似,我们可以为这个文件夹赋予可执行权限并创建软链接

chown -R root:root alertmanager-0.21.0.linux-amd64/
ln -sv alertmanager-0.21.0.linux-amd64/ alertmanager

在这里插入图片描述

编辑Alertmanger配置文件

查看配置文件
# cat alertmanager.yml 
global:                                # 全局配置模块
  resolve_timeout: 5m                # 用于设置处理超时时间,默认是5分钟
route:                                # 路由配置模块
  group_by: ['alertname']            # 告警分组
  group_wait: 10s                    # 10s内收到的同组告警在同一条告警通知中发送出去
  group_interval: 10s                # 同组之间发送告警通知的时间间隔
  repeat_interval: 1h                # 相同告警信息发送重复告警的周期
  receiver: 'web.hook'                # 使用的接收器名称
receivers:                            # 接收器
- name: 'web.hook'                    # 接收器名称
  webhook_configs:                    # 设置webhook地址
  - url: 'http://127.0.0.1:5001/'
inhibit_rules:                        # 告警抑制功能模块
  - source_match:
      severity: 'critical'            # 当存在源标签告警触发时抑制含有目标标签的告警
    target_match:
      severity: 'warning'            
    equal: ['alertname', 'dev', 'instance']     # 保证该配置下标签内容相同才会被抑制

Alertmanager使用邮箱报警

QQ邮箱准备

生成授权码

在这里插入图片描述

修改配置文件
global:
  resolve_timeout: 5m
  smtp_from: '1640512870@qq.com'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '1640512870@qq.com'
  smtp_auth_password: 'cdumhntvjsngejhf'
  smtp_require_tls: false
  smtp_hello: 'qq.com'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '1640512870@qq.com'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
后台启动Alertmanager
 ./alertmanager &
关联Prometheus
# vim /prometheus.yml
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 192.168.28.88:9093
.....
  - job_name: "Alertmanager"
    static_configs:
      - targets: ["192.168.28.88:9093"]
添加告警规则
mkdir -p /prometheus/prometheus/rules/
cd /prometheus/prometheus/rules
vim rule.yml
groups:
- name: up
  rules:
  - alert: node
    expr: up{job="node_service_discovery"} == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      description: "Node has been dwon for more than 1 minutes"
      summary: "Node down"
在Prometheus配置文件中导入
cd /prometheus/prometheus
vim prometheus.yml
rule_files:
  - "/prometheus/prometheus/rules/*.yml"

在这里插入图片描述

用promtool检查语法
./promtool check rules rules/rule.yml

在这里插入图片描述

重启prometheus
systemctl restart prometheus
在web中查看Rules

在这里插入图片描述

关闭node1测试

在这里插入图片描述

三种状态

  • Interval没有满足触发条件,告警未激活状态
  • pending,已满足触发条件,但未满足告警持续时间的状态,即未满足告警中for子句指定的持续时间
  • firing,已满足触发条件且已经超过for子句中指定的持续时间时的状态
等一分钟看邮箱是否有告警

在这里插入图片描述

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

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

相关文章

Javaweb梳理3——SQL概述+DDL语句1

Javaweb梳理3——SQL概述DDL语句1 Javaweb梳理3——SQL概述DDL语句13.1 SQL简介3.2 通用语法3.3 SQL分类3.4 DDL:操作数据库3.4.1 查询数据库3.4.2 创建数据库3.4.3 删除数据库3.4.4 使用数据库 Javaweb梳理3——SQL概述DDL语句1 3.1 SQL简介 英文&#xff1a;Structured Que…

HarmonyOS Next星河版笔记--界面开发(2)

ArkUI-界面开发 位置&#xff1a;在build(){}中去编写代码 //以前学基础 ->写代码的位置&#xff08;页面顶部&#xff09; Entry Component struct Index {State message: string Hello World; //构建 -> 页面build() {//行//列RelativeContainer() {//文本 函数名&a…

使用PostgreSQL进行高效数据管理

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用PostgreSQL进行高效数据管理 PostgreSQL简介 安装PostgreSQL 在Ubuntu上安装PostgreSQL 在CentOS上安装PostgreSQL 在macOS上…

vue3学习记录-单文件组件 CSS 功能

vue3学习记录-单文件组件 CSS 功能 1.组件作用域 CSS1.1为什么要用到样式穿透&#xff08;&#xff1a;deep&#xff08;&#xff09;&#xff09;1.2 插槽选择器:slotted(div)1.3 全局选择器:global 2.CSS Modules2.1 基本用法2.2 自定义注入名称2.3 与组合式 API 一同使用 3.…

3.1 快速启动Flink集群

文章目录 1. 环境配置2. 本地启动3. 集群启动4. 向集群提交作业4.1 提交作业概述4.2 添加打包插件4.3 将项目打包4.4 在Web UI上提交作业4.5 命令行提交作业 在本实战中&#xff0c;我们将快速启动Apache Flink 1.13.0集群&#xff0c;并在Hadoop集群环境中提交作业。首先&…

贪心算法---java---黑马

贪心算法 1)Greedy algorithm 称之为贪心算法或者贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则&#xff0c;选取当前最优解因为未考虑所有可能&#xff0c;局部最优的堆叠不一定得到最终解最优 贪心算法例子 Dijkstra while …

产品宣传册如何分享到微信朋友圈

在这个互联网高速发展的时代&#xff0c;微信已经成为我们日常生活中不可或缺的社交工具。作为商家或个人&#xff0c;如何将产品宣传册分享到微信朋友圈&#xff0c;提高产品知名度和影响力&#xff0c;成为了一项至关重要的技能。 那要怎么操作呢&#xff1f; 1. 实用工具&a…

轻松入门WordPress:在Ubuntu上搭建本地网站并配置公网访问地址

文章目录 前言1. 安装WordPress2. 创建WordPress数据库3. 安装相对URL插件4. 安装内网穿透发布网站4.1 命令行方式&#xff1a;4.2. 配置wordpress公网地址 5. 配置WordPress固定公网地址 前言 本文主要介绍如何在Linux Ubuntu系统上使用WordPress搭建一个本地网站&#xff0c…

ubuntu编译内核安装启动

下载源码 apt update apt install linux-source # /usr/src/linux-source-5.4.0/linux-source-5.4.0.tar.bz2 下载源码 tar -jxvf linux-source-5.4.0.tar.bz2 # /usr/src/linux-source-5.4.0 解压源码 安装依赖 sudo apt -y install build-essential sudo apt -y i…

多个锚点定位时的锚点优选方法(附公式和MATLAB代码讲解)

在多锚点定位系统中,锚点的选择对定位精度有重要影响。以下是几种常见的锚点选优方法,配合相应的公式和MATLAB代码示例进行详细分析。 文章目录 基于几何分布的选择基于距离最小化的选择加权优化选择总结基于几何分布的选择 方法描述: 锚点的几何分布影响定位的可辨识性。选…

DICOM标准:US超声模块属性详解——超声医学的DICOM标准解析

引言 数字成像和通信在医学领域中的应用极为广泛&#xff0c;其中DICOM&#xff08;数字成像和通信医学&#xff09;标准对于确保不同设备和系统之间的兼容性和互操作性至关重要。本文将详细介绍DICOM标准中关于超声医学&#xff08;Ultrasound, US&#xff09;的部分&#xff…

华为鲲鹏一体机 安装笔记

安装驱动 在这个链接 社区版-固件与驱动-昇腾社区 1 下载NPU固件 需要注册登录&#xff0c;否则报错&#xff1a; ERR_NO:0x0091;ERR_DES:HwHiAiUser not exists! Please add HwHi AiUser 准备软件包-软件安装-CANN…

STM32H750 USBCDC配置与使用

STM32H750 USBCDC配置与使用 &#x1f4cd;相关参考文章&#xff1a;《STM32 USB CDC VPC》 STM32H750VB有2个USB OTG接口&#xff08;1FS&#xff0c;1HS/FS&#xff09;无晶振型解决方案&#xff0c;带有LPM和BCD。 &#x1f516;本次使用USB-PTG-FS作为测试 &#x1f33f;…

引领数字时代:万码优才如何变革IT人才招聘新体验(这里有更精准的推荐)

目录 引领数字时代&#xff1a;万码优才如何变革IT人才招聘新体验引领未来科技&#xff0c;精准链接IT精英精准匹配&#xff0c;高效对接海量资源&#xff0c;覆盖广泛优化体验&#xff0c;简化流程 全面升级&#xff1a;AI赋能数字人才职业成长AI模拟面试职场千问智能简历评估…

网络安全法详细介绍——爬虫教程

目录 [TOC](目录)一、网络安全法详细介绍1. 网络安全法的主要条款与作用2. 网络安全法与爬虫的关系3. 合法使用爬虫的指南 二、爬虫的详细教程1. 准备环境与安装工具2. 使用requests库发送请求3. 解析HTML内容4. 使用robots.txt规范爬虫行为5. 设置请求间隔6. 数据清洗与存储 三…

vscode插件-08 Golang

文章目录 Go安装其他必须软件 Go Go语言环境&#xff0c;只需安装这一个插件。然后通过vscode命令下载安装其他go环境需要的内容。 程序调试&#xff0c;需要创建.vscode文件夹并编写launch.json文件。 安装其他必须软件 ctrlshiftp&#xff0c;调出命令面板&#xff0c;输入…

ConnectX-7 25/50/100/200/400G NIC

ConnectX-7 25/50/100/200/400G NIC ConnectX-7提供了广泛的软件定义、硬件加速的网络、存储和安全功能&#xff0c;使组织能够现代化和保护他们的IT基础设施。此外&#xff0c;ConnectX-7还支持从边缘到核心数据中心到云的敏捷和高性能解决方案&#xff0c;同时增强网络安全性…

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤&#xff1a; 一、环境准备 机器配置 确保两台机器&#xff08;假设为服务器 A 和服务器 B&#xff09;能够互相通信&#xff0c;例如它们在同一个局域网内&#xff0c;并且开放了 MySQL 通信所需的端口&#xff08;默认是 …

uniapp实现中间平滑凸起tabbar

uniapp实现中间平滑凸起tabbar 背景实现思路代码实现尾巴 背景 在移动端开发中&#xff0c;tabar是一个使用频率很高的组件&#xff0c;几乎是每个APP都会用到。今天给大家分享一个中间平滑凸起的tabbar组件&#xff0c;有需要的可以做下参考。先上图镇楼&#xff1a; 实现思…

java版询价采购系统 招投标询价竞标投标系统 招投标公告系统源码

在数字化时代&#xff0c;企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台&#xff0c;涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…