Prometheus
一、基础简介
1.1.prometheus简介
1.2.数据模型
1.3.指标类型
1.4.Jobs和Instances
二、安装部署
2.1.rpm部署监控组件
2.2.docker部署监控组件
三、PromSQL
3.1.PromQL基本使用
3.2.Prometheus基础查询
3.3.查询操作符
3.4.内置函数
3.5.在HTTPAPI中使用PromQL
3.6.最佳实践
四、告警处理
4.1.告警简介
4.2.自定义Prometheus告警规则
4.3.常见告警规则
4.4.部署Alertmanager
4.5.Alertmanager配置概述
4.6.基于标签的告警处理路由
4.7.使用Receiver接收告警信息
4.8.自定义告警模板
4.9.屏蔽告警通知
4.10.使用RecodingRules优化性能
五、Exporter
5.1.exporter
5.2.NodeExporter
5.3.ProcessExporter
5.4.cAdvisor
5.5.MysqlExporter
5.6.BlackboxExporter
5.7.ProcessExporter
5.8.Ipmiexport
5.9.Pushgateway
PostgresExporter
六、Grafana
6.1.grafana基本概念
6.2.创建dashboard与Panel
6.3.变化趋势:Graph面板
6.4.graph面板常用操作
6.5.分布统计:Heatmap面板
6.6.当前状态:SingleStat面板
6.7.变量
6.8.grafana报警
七、集群高可用
7.1.本地存储
7.2.远程存储
7.3.联邦集群
7.4.prometheus高可用
7.5.Alertmanager高可用
八、服务发现
8.1.Prometheus与服务发现
8.2.基于文件的服务发现
8.3.标签管理
九、Operator
9.1.什么是PrometheusOperator
9.2.PrometheusOperator自定义监控项
9.3.配置PrometheusRule
十、AlterManager
10.1.基础入门
10.2.配置详解
本文档使用 MrDoc 发布
-
+
home page
3.1.PromQL基本使用
# 简介 PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰富,内置函数很多,在日常数据可视化以及rule 告警中都会使用到它。<br />在页面 http://localhost:9090/graph 中,输入下面的查询语句,查看结果,例如: ``` http_requests_total{code="200"} ``` # 字符串和数字 ## 字符串 在查询语句中,字符串往往作为查询条件 labels 的值,和 Golang 字符串语法一致,可以使用 "", '', 或者 `` , 格式如: ``` "this is a string" 'these are unescaped: \n \\ \t' `these are not unescaped: \n ' " \t` ``` ## 正数,浮点数 表达式中可以使用正数或浮点数,例如: ``` 3 -2.4 ``` # 查询结果类型 PromQL 查询结果主要有 3 种类型: - 瞬时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:http_requests_total - 区间数据 (Range vector): 包含一组时序,每个时序有多个点,例如:http_requests_total[5m] - 纯量数据 (Scalar): 纯量只有一个数字,没有时序,例如:count(http_requests_total) # 查询条件 Prometheus 存储的是时序数据,而它的时序是由名字和一组标签构成的,其实名字也可以写出标签的形式,例如 http_requests_total 等价于 {**name**=”http_requests_total”}。<br />一个简单的查询相当于是对各种标签的筛选,例如: ``` http_requests_total{code="200"} // 表示查询名字为 http_requests_total,code 为 "200" 的数据 ``` 查询条件支持正则匹配,例如: ``` http_requests_total{code!="200"} // 表示查询 code 不为 "200" 的数据 http_requests_total{code=~"2.."} // 表示查询 code 为 "2xx" 的数据 http_requests_total{code!~"2.."} // 表示查询 code 不为 "2xx" 的数据 ``` # 操作符 Prometheus 查询语句中,支持常见的各种表达式操作符,例如 ## 算术运算符 支持的算术运算符有 +,-,*,/,%,^, 例如 http_requests_total * 2 表示将 http_requests_total 所有数据 double 一倍。 ## 比较运算符 支持的比较运算符有 ==,!=,>,<,>=,<=, 例如 http_requests_total > 100 表示 http_requests_total 结果中大于 100 的数据。 ## 逻辑运算符 支持的逻辑运算符有 and,or,unless 示例:表示 http_requests_total 结果中等于 5 或者 2 的数据。 ``` http_requests_total == 5 or http_requests_total == 2 ``` ## 聚合运算符 支持的聚合运算符有 sum,min,max,avg,stddev,stdvar,count,count_values,bottomk,topk,quantile,, 例如 max(http_requests_total) 表示 http_requests_total 结果中最大的数据。<br />注意,和四则运算类型,Prometheus 的运算符也有优先级,它们遵从(^)> (*, /, %) > (+, -) > (==, !=, <=, <, >=, >) > (and, unless) > (or) 的原则。 # 内置函数 Prometheus 内置不少函数,方便查询以及数据格式化,例如将结果由浮点数转为整数的 floor 和 ceil, ``` floor(avg(http_requests_total{code="200"})) ceil(avg(http_requests_total{code="200"})) ``` 查看 http_requests_total 5分钟内,平均每秒数据 ``` rate(http_requests_total[5m]) ``` # 子查询 子查询允许您针对给定的范围和分辨率运行即时查询。子查询的结果是一个范围向量。 在 Prometheus 中,子查询(Subquery)允许你在查询中嵌套另一个查询,以获取一个范围向量,并对其进行进一步的计算。这对于处理时间序列数据的高级分析非常有用。 ### 子查询的语法 ```promql [<duration>:<resolution>] ``` 子查询的语法主要由以下部分组成: 1. `duration`:时间范围,用于指定子查询的范围。例如 `5m` 表示最近 5 分钟的范围。 2. `resolution`:数据的采样间隔(可选),用于指定查询在该时间范围内的采样频率。例如 `30s` 表示每 30 秒采样一次。如果不指定,Prometheus 会使用全局计算间隔(通常是 `Prometheus` 的 `scrape_interval`)。 3. `@`(时间修饰符):用于对查询结果的时间进行偏移,通常用于历史数据的分析。例如 `@ end()` 表示在给定范围的末尾时间点获取数据。 4. `offset`(偏移量):偏移量用于在查询时对时间进行偏移,通常用于对比历史数据。例如 `offset 1h` 表示将时间序列向前偏移 1 小时。 ### 示例解析 #### 基础子查询 ```promql rate(http_requests_total[5m]) ``` 这个查询计算最近 5 分钟内 HTTP 请求的速率。在这里,`[5m]` 是一个范围选择器,用于选择最近 5 分钟的样本,并计算其速率。 #### 子查询中的子查询 ```promql avg_over_time(rate(http_requests_total[5m])[1h:]) ``` 这个示例展示了一个子查询嵌套。在这个例子中: - `rate(http_requests_total[5m])` 计算每 5 分钟的 HTTP 请求速率。 - `[1h:]` 表示对过去 1 小时的数据进行进一步的计算。 - `avg_over_time` 函数对过去 1 小时的速率数据进行平均计算。 #### 带有分辨率的子查询 ```promql rate(http_requests_total[5m])[1h:30s] ``` 这里的 `[1h:30s]` 子查询表示从过去 1 小时内以 30 秒的分辨率进行计算。这意味着每 30 秒将采样一个数据点。 #### 时间修饰符 `@` 和 `offset` ```promql rate(http_requests_total[5m] @ start() offset 1h) ``` 这个查询计算了在起始时间点(`start()`)1 小时前(`offset 1h`)的最近 5 分钟内的 HTTP 请求速率。 ### 解析流程 1. 范围选择器 `[5m]`:用于选择一个时间范围内的数据。 2. 分辨率 `30s`:指定采样间隔。 3. 时间修饰符 `@`:控制查询结果的时间点。 4. 偏移量 `offset`:用于调整时间序列的时间轴。 ### 使用场景 - **历史数据对比**:通过 `offset` 对比不同时间点的数据。 - **复杂数据聚合**:通过子查询将不同时间段的数据结合在一起进行分析。 - **实时数据监控**:实时监控中的数据平滑处理(例如 `rate` 和 `avg_over_time` 的组合)。 子查询强大且灵活,是 Prometheus 查询语言中处理复杂时间序列数据的核心工具。理解和灵活运用子查询,可以帮助你更高效地从时间序列数据中提取出有价值的信息。
Nathan
Aug. 25, 2024, 1:48 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password