一件事情|

Blue Mountain

园龄:10年7个月粉丝:572关注:0

2023-02-24 17:45阅读: 306评论: 0推荐: 0

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

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 了。leftright 指向高基数那一侧的向量。
## 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 个点求最大值,相当于对各个时间序列做横向拟合。

本文作者:Blue Mountain

本文链接:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/17151649.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Blue Mountain  阅读(306)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.