prometheus中常用的查询

prometheus server 可以通过HTTPAPI的方式进行查询,官网链接https://prometheus.io/docs/prometheus/latest/querying/basics/

 我这边主要用到的是实时查询,当然prometheus还支持历史查询,我这里 先介绍实时查询,其他的可以直接参考官方文档。

实时查询接口:

"%s/api/v1/query?query=%s"

(1) 直接查询某一监控指标:

比如查询 process_start_time_seconds,

http://localhost:9090/api/v1/query?query=process_start_time_seconds

{
    "status":"success",
    "data":{
        "resultType":"vector",
        "result":[
            {
                "metric":{
                    "__name__":"process_start_time_seconds",
                    "instance":"localhost:9090",
                    "job":"prometheus"
                },
                "value":[
                    1533194622.184,
                    "1532609170.42"
                ]
            },
            {
                "metric":{
                    "__name__":"process_start_time_seconds",
                    "instance":"localhost:9295",
                    "job":"postgres"
                },
                "value":[
                    1533194622.184,
                    "1533034386.88"
                ]
            }
        ]
    }
}

(2)根据某一字段加上标签:

比如查询job为prometheus的process_start_time_seconds指标:

http://localhost:9090/api/v1/query?query=process_start_time_seconds{job="prometheus"}

(3)正则表达式匹配前缀:

比如一些监控 指标都以pro开头,可以通过正则表达式匹配前缀的方式一把搂回来:

htp://localhost:9090/api/v1/query?query={__name__=~"pro.*"}

当然prometheus是支持各个标签 label之间通过and ,or ,unless进行组合,比如:

htp://localhost:9090/api/v1/query?query={__name__=~"pro.*"}and{job="progres"}

查询出job名为progres,标签名以pro为前缀的监控数据。

 

### Prometheus 查询语言使用指南 Prometheus 使用一种强大的查询语言 PromQL (Prometheus Query Language),用于从时间序列数据库中提取和处理数据[^1]。 #### 基本概念 PromQL 支持多种操作符来执行算术运算、比较以及逻辑组合。表达式的计算结果可以是瞬时向量、范围向量或标量之一。瞬时向量表示给定时间点的一组时间序列;范围向量则代表一段时间内的样本集合;而标量是一个简单的数值[^2]。 #### 函数应用 Prometheus 提供了一系列内置函数,这些函数接受参数并对输入的时间序列进行特定的操作。例如 `rate()` 函数用来计算每秒平均增长率,适用于计数器类型的指标。另一个例子是 `increase()` 函数,它返回指定时间段内增长了多少次。 ```python # 计算过去5分钟HTTP请求速率 rate(http_requests_total[5m]) ``` #### 聚合操作 聚合允许对多个时间序列的数据汇总成单个值。常见的聚合操作有 sum()、avg()、min() 和 max() 等。通过 group by 子句还可以按标签分组来进行局部聚合。 ```python # 获取所有实例上CPU利用率的最大值 max(cpu_usage) without(instance) ``` #### 数据过滤与匹配 利用布尔表达式可以在查询语句里筛选符合条件的时间序列。这通常涉及到对比不同度量之间的关系或者基于标签的选择条件。比如可以通过正则表达式模式匹配来选取某些服务端口上的响应延迟情况。 ```python # 查找http状态码为5xx错误的服务调用次数 sum(rate(http_request_duration_seconds_count{status=~"5.."}[5m])) by (service) ``` #### 时间偏移功能 `offset` 关键字使得能够访问历史时刻的数据点,这对于分析趋势变化非常有用。结合其他语法结构一起使用时,可以帮助构建复杂的预测模型或是回顾过去的性能表现。 ```python # 对比当前时间和前一天同一时段的API请求数差异 irate(api_requests_total[5m]) - irate(api_requests_total offset 1d)[5m] ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值