首页 > 其他分享 ><<运维监控系统实战笔记>> 小记随笔 —— Prometheus 初识

<<运维监控系统实战笔记>> 小记随笔 —— Prometheus 初识

时间:2023-02-24 17:58:31浏览次数:43  
标签:code http errors rate5m Prometheus 初识 method clickhouse 小记

Prometheus 简介

image

  • Prometheus server
    包含时序库、告警引擎、数据展示三大块,体系中最核心的组件

  • Exporters
    采集数据的客户端,负载采集数据存在内存中,提供 http 接口,让 server 定期 pull 监控数据到时序库中。

  • Pushgateway
    用于接收短生命周期任务的指标上报,是 PUSH 的接收方式。因为 Prometheus 主要是 PULL 的方式拉取监控数据,这就要求在拉取的时刻,监控对象得活着,但是很多短周期任务,比如 cronjob,可能半秒就运行结束了,就没法拉取了。为了应对这种情况,才单独做了 Pushgateway 组件作为整个生态的补充。

  • Alertmanger
    server 在满足条件后会触发 Push alert 给 manger,manger 再通过各种方式吐出告警

  • Grafana
    Grafana 是一个数据可视化工具,有丰富的图表类型,视觉效果很棒,插件式架构,支持各种数据源,是开源监控数据可视化的标杆之作。

PromQL 简述

查询选择器

即时查询

即时查询(Instant Query)返回的内容叫做即时向量( Instant Vector)。即时查询返回的是当前的最新值。语法如下

# 通过 = 来做 instance 的匹配过滤
eventbus_events_received_total{instance = "10.0.153.207:9090"}
# 通过 =~ 来做 instance 的正则过滤
eventbus_events_received_total{host=~"10.0.153..*"}
# 除此之外还有 !=  !=~

# metric 名字也可以进行查询选择
{__name__=~"node_load.*", zone="sh"}

如果当前时刻没有数据的话,会根据 Prometheus 的启动参数 --query.lookback-delta 来确定可以查询到多久之前的数据作为此次即时查询的返回内容。建议这个时间不要过长,容易导致数据不准确。

范围查询

范围查询(Range Query),返回的内容叫做 Range Vector,比如下面的 PromQL。

{__name__=~"node_load.*", zone="sh"}[1m]

算术运算符

# 计算内存可用率,就是内存可用量除以内存总量,又希望按照百分比呈现,所以最后乘以100
mem_available{app="clickhouse"} / mem_total{app="clickhouse"} * 100
# 计算北京区网口出向的速率,原始数据的单位是byte,网络流量单位一般用bit,所以乘以8
irate(net_sent_bytes_total{zone="beijing"}[1m]) * 8

比较运算符

mem_available{app="clickhouse"} / mem_total{app="clickhouse"} * 100 < 20
irate(net_sent_bytes_total{zone="beijing"}[1m]) * 8 / 1024 / 1024 > 700

逻辑运算符

disk_used_percent{app="clickhouse"} > 70 and disk_total{app="clickhouse"}/1024/1024/1024 < 200

向量匹配

one to one 匹配

### On 表示依赖于某些标签,On(instance) 表示通过标签确立关联关系
### 语义是:满足 mysql_slave_status_master_server_id > 0 的数据,取出 instance label,再查 mysql_slave_status_slave_sql_running ==0 的数据
mysql_slave_status_slave_sql_running == 0 and ON (instance)mysql_slave_status_master_server_id > 0
method_code:http_errors:rate5m{code="500"}/ ignoring(code)method:http_requests:rate5m

## example series
method_code:http_errors:rate5m{method="get", code="500"}  24
method_code:http_errors:rate5m{method="get", code="404"}  30
method_code:http_errors:rate5m{method="put", code="501"}  3
method_code:http_errors:rate5m{method="post", code="500"} 6
method_code:http_errors:rate5m{method="post", code="404"} 21
method:http_requests:rate5m{method="get"}  600
method:http_requests:rate5m{method="del"}  34
method:http_requests:rate5m{method="post"} 120

### Igonring 表示忽略某些标签,ignoring(code) 表示通过忽略 code 之外的标签确立关联关系
### 语义是:通过除 code 外的数据来做关联,然后计算占用的百分比
method_code:http_errors:rate5m{code="500"}
/ ignoring(code)
method:http_requests:rate5m

## result
{method="get"}  0.04            //  24 / 600
{method="post"} 0.05            //   6 / 120

one to many, many to one 匹配

做指标运算时就要借助关键字 group_left 和 group_right 了。left、right 指向高基数那一侧的向量。
## example series
method_code:http_errors:rate5m{method="get", code="500"}  24
method_code:http_errors:rate5m{method="get", code="404"}  30
method_code:http_errors:rate5m{method="put", code="501"}  3
method_code:http_errors:rate5m{method="post", code="500"} 6
method_code:http_errors:rate5m{method="post", code="404"} 21
method:http_requests:rate5m{method="get"}  600
method:http_requests:rate5m{method="del"}  34
method:http_requests:rate5m{method="post"} 120

## promql
method_code:http_errors:rate5m
/ ignoring(code) group_left
method:http_requests:rate5m

## result
{method="get", code="500"}  0.04            //  24 / 600
{method="get", code="404"}  0.05            //  30 / 600
{method="post", code="500"} 0.05            //   6 / 120
{method="post", code="404"} 0.175           //  21 / 120

聚合运算

横向聚合

# 求取 clickhouse 的机器的平均内存可用率
avg(mem_available_percent{app="clickhouse"})

# 把 clickhouse 的机器的内存可用率排个序,取最小的两条记录
bottomk(2, mem_available_percent{app="clickhouse"})

# 分组
avg(mem_available_percent{app=~"clickhouse|canal"}) by (app)

纵向聚合

max_over_time(target_up[2m])

target_up 指标后面加了 [2m],指的就是获取这个指标最近 2 分钟的所有数据点,如果 15 秒采集一个点,2 分钟就是 8 个点,max_over_time 就是对这 8 个点求最大值,相当于对各个时间序列做横向拟合。

标签:code,http,errors,rate5m,Prometheus,初识,method,clickhouse,小记
From: https://www.cnblogs.com/BlueMountain-HaggenDazs/p/17151649.html

相关文章

  • Prometheus监控各类程序
    一、Prometheus安装github:https://github.com/prometheus/prometheus官网: https://prometheus.io#1下载prometheus-v2.40.7镜像https://hub.docker.com/r/prom/pro......
  • 2.23小记
    我不到我今天干啥了。上午昏厥,下午搬砖,晚上对着前年省选乱胡。P8217[THUPC2022初赛]数正方体Zpair:那比赛这种题就交给你啦害怕.jpg我会让团队吃一车罚时.jpg做......
  • Prometheus&Alertmanager告警推送
    前言尽管可以通过可视化数据监控系统运行状态,但我们无法时刻关注系统运行,因此需要一些实时运行的工具能够辅助监控系统运行,当系统出现运行问题时,能够通知我们,以此确保系统......
  • JAVAWEB-NOTE01-初识mysql
    目录JAVAWEB介绍数据库相关概念数据库数据库管理系统SQL常见的关系型数据库管理系统MySQL数据库安装配置登录、退出卸载数据模型JAVAWEB介绍数据库相关概念数据库数......
  • Prometheus学习笔记之设置存储时间为30天不生效
    0x00概述Prometheus升级到2.23进行测试发现,设置存储时间为30天未生效,根据官方说明手册,实际运行后发现数据只能存储几个小时。。。。--storage.tsdb.retention.time=30d......
  • asp.net core webapi初识
    1.建立webapi项目  2.把启用SSL取消勾选(取消https)  3.选择项目-右键-发布,进行发布信息设置,选择文件夹发布   4.打开IIS管理器,新建网站,物理路径选择刚刚......
  • 小记:php无法登录mysql服务器
    PHP脚本连接到MySQL服务器,可能是以下几个原因:MySQL服务器没有运行或停止了。你可以尝试重启MySQL服务器。PHP扩展没有安装或启用。你需要确保安装了PHP的M......
  • 初识单片机
     单片机:英文全称Single-ChipMicrocomputer,表示是一个微型计算器,有时也称为MCU(MicrocontrollerUnit)。是一种把中央处理器CPU、存储器(RAM\ROM\FLASH等)、输入输......
  • MXNet学习——初识AlexNet
     相关理论&故事背景书上都有,不打算复述一遍,这里仅作代码记录&分享此处非直接可用代码,由于学习过程中多次使用相同函数,故而将一些常用函数整理成了工具包,​​MxNet学习——......
  • Diffusers库的初识及使用
    diffusers库的目标是:将扩散模型(diffusionmodels)集中到一个单一且长期维护的项目中以公众可访问的方式复现高影响力的机器学习系统,如DALLE、Imagen等让开发人员可以很......