Prometheus 简介
-
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