prometheus学习系列七: Prometheus promQL查询语言
Prometheus promQL查询语言
Prometheus提供了一种名为PromQL (Prometheus查询语言)的函数式查询语言,允许用户实时选择和聚合时间序列数据。表达式的结果既可以显示为图形,也可以在Prometheus的表达式浏览器中作为表格数据查看,或者通过HTTP API由外部系统使用。
准备工作
在进行查询,这里提供下我的配置文件如下
[root@node00 prometheus]# cat prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every seconds. Default is every minute.
evaluation_interval: 15s # Evaluate rules every seconds. The default is every minute.
# scrape_timeout is set to the global default (10s). # Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager: # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus' # metrics_path defaults to '/metrics'
# scheme defaults to 'http'. static_configs:
- targets: ['localhost:9090']
- job_name: "node"
file_sd_configs:
- refresh_interval: 1m
files:
- "/usr/local/prometheus/prometheus/conf/node*.yml"
remote_write:
- url: "http://localhost:8086/api/v1/prom/write?db=prometheus" remote_read:
- url: "http://localhost:8086/api/v1/prom/read?db=prometheus" [root@node00 prometheus]# cat conf/node-dis.yml
- targets:
- "192.168.100.10:20001"
labels:
__datacenter__: dc0
__hostname__: node00
__businees_line__: "line_a"
__region_id__: "cn-beijing"
__availability_zone__: "a"
- targets:
- "192.168.100.11:20001"
labels:
__datacenter__: dc1
__hostname__: node01
__businees_line__: "line_a"
__region_id__: "cn-beijing"
__availability_zone__: "a"
- targets:
- "192.168.100.12:20001"
labels:
__datacenter__: dc0
__hostname__: node02
__businees_line__: "line_c"
__region_id__: "cn-beijing"
__availability_zone__: "b"
简单时序查询
直接查询特定metric_name
# 节点的forks的总次数
node_forks_total
#结果如下
| Element | Value |
|---|---|
| node_forks_total{instance="192.168.100.10:20001",job="node"} | 201518 |
| node_forks_total{instance="192.168.100.11:20001",job="node"} | 23951 |
| node_forks_total{instance="192.168.100.12:20001",job="node"} | 24127 |
带标签的查询
node_forks_total{instance="192.168.100.10:20001"}
# 结果如下
| Element | Value |
|---|---|
| node_forks_total{instance="192.168.100.10:20001",job="node"} | 201816 |
多标签查询
node_forks_total{instance="192.168.100.10:20001",job="node"}
# 结果如下
| Element | Value |
|---|---|
| node_forks_total{instance="192.168.100.10:20001",job="node"} | 201932 |
查询2分钟的时序数值
node_forks_total{instance="192.168.100.10:20001",job="node"}[2m]
| Element | Value |
|---|---|
| node_forks_total{instance="192.168.100.10:20001",job="node"} | 201932 @1569492864.036 201932 @1569492879.036 201932 @1569492894.035 201932 @1569492909.036 201985 @1569492924.036 201989 @1569492939.036 201993 @1569492954.036 |
正则匹配
node_forks_total{instance=~"192.168.*:20001",job="node"}
| Element | Value |
|---|---|
| node_forks_total{instance="192.168.100.10:20001",job="node"} | 202107 |
| node_forks_total{instance="192.168.100.11:20001",job="node"} | 24014 |
| node_forks_total{instance="192.168.100.12:20001",job="node"} | 24186 |
常用函数查询
官方提供的函数比较多, 具体可以参考地址如下: https://prometheus.io/docs/prometheus/latest/querying/functions/
这里主要就常用函数进行演示。
irate
irate用于计算速率。
# 通过标签查询,特定实例特定job,特定cpu 在idle状态下的cpu次数速率
irate(node_cpu_seconds_total{cpu="",instance="192.168.100.10:20001",job="node",mode="idle"}[1m])
| Element | Value |
|---|---|
| {cpu="0",instance="192.168.100.10:20001",job="node",mode="idle"} | 0.9833988932595507 |
count_over_time
计算特定的时序数据中的个数。
# 这个数值个数和采集频率有关, 我们的采集间隔是15s,在一分钟会有4个点位数据。
count_over_time(node_boot_time_seconds[1m])
| Element | Value |
|---|---|
| {instance="192.168.100.10:20001",job="node"} | 4 |
| {instance="192.168.100.11:20001",job="node"} | 4 |
| {instance="192.168.100.12:20001",job="node"} | 4 |
子查询
# 过去的10分钟内, 每分钟计算下过去5分钟的一个速率值。 一个采集10m/1m一共10个值。
rate(node_cpu_seconds_total{cpu="",instance="192.168.100.10:20001",job="node",mode="idle"}[5m])[10m:1m]
| Element | Value |
|---|---|
| {cpu="0",instance="192.168.100.10:20001",job="node",mode="idle"} | 0.9865228543057867 @1569494040 0.9862807017543735 @1569494100 0.9861087231885309 @1569494160 0.9864946894550303 @1569494220 0.9863192502430038 @1569494280 0.9859649122807017 @1569494340 0.9859298245613708 @1569494400 0.9869122807017177 @1569494460 0.9867368421052672 @1569494520 0.987438596491273 @1569494580 |
复杂查询
计算内存使用百分比
node_memory_MemFree_bytes / node_memory_MemTotal_bytes *
| Element | Value |
|---|---|
| {instance="192.168.100.10:20001",job="node"} | 9.927579722322251 |
| {instance="192.168.100.11:20001",job="node"} | 59.740727403673034 |
| {instance="192.168.100.12:20001",job="node"} | 63.2080982675149 |
获取所有实例的内存使用百分比前2个
topk(,node_memory_MemFree_bytes / node_memory_MemTotal_bytes * )
| Element | Value |
|---|---|
| {instance="192.168.100.12:20001",job="node"} | 63.20129636298163 |
| {instance="192.168.100.11:20001",job="node"} | 59.50586164125955 |
实用查询样例
获取cpu核心个数
# 计算所有的实例cpu核心数
count by (instance) ( count by (instance,cpu) (node_cpu_seconds_total{mode="system"}) )
# 计算单个实例的
count by (instance) ( count by (instance,cpu) (node_cpu_seconds_total{mode="system",instance="192.168.100.11:20001"})
计算内存使用率
( - (node_memory_MemAvailable_bytes{instance=~"192.168.100.10:20001"} / (node_memory_MemTotal_bytes{instance=~"192.168.100.10:20001"})))* 100
| Element | Value |
|---|---|
| {instance="192.168.100.10:20001",job="node"} | 87.09358620413717 |
计算根分区使用率
- ((node_filesystem_avail_bytes{instance="192.168.100.10:20001",mountpoint="/",fstype=~"ext4|xfs"} * ) / node_filesystem_size_bytes {instance=~"192.168.100.10:20001",mountpoint="/",fstype=~"ext4|xfs"})
| Element | Value |
|---|---|
| {device="/dev/mapper/centos-root",fstype="xfs",instance="192.168.100.10:20001",job="node",mountpoint="/"} | 4.175111443575972 |
预测磁盘空间
# 整体分为 2个部分, 中间用and分割, 前面部分计算根分区使用率大于85的, 后面计算根据近6小时的数据预测接下来24小时的磁盘可用空间是否小于0 。
(- node_filesystem_avail_bytes{fstype=~"ext4|xfs",mountpoint="/"}
/ node_filesystem_size_bytes{fstype=~"ext4|xfs",mountpoint="/"}) * >= and (predict_linear(node_filesystem_avail_bytes[6h], * ) < )
prometheus学习系列七: Prometheus promQL查询语言的更多相关文章
- Prometheus学习系列(六)之Prometheus 查询说明
前言 本文来自Prometheus官网手册和 Prometheus简介 Prothetheus查询 Prometheus提供一个函数式的表达式语言PromQL (Prometheus Query La ...
- Prometheus学习系列(九)之Prometheus 存储
前言 本文来自Prometheus官网手册 和 Prometheus简介 存储 Prometheus是一个本地磁盘时间序列数据库,但也可选择与远程存储系统集成,其本地时间序列数据库以自定义格式在磁盘上 ...
- Prometheus学习系列(五)之Prometheus 规则(rule)、模板配置说明
前言 本文来自Prometheus官网手册1.2.3.4和 Prometheus简介1.2.3.4 记录规则 一.配置规则 Prometheus支持两种类型的规则,这些规则可以定期配置,然后定期评估: ...
- Prometheus学习系列(一)之Prometheus简介
前言 本文来自Prometheus官网手册 和 Prometheus简介 什么是prometheus? Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包.自2012 ...
- prometheus学习系列一: Prometheus简介
Prometheus简介 prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundclou ...
- Prometheus学习系列(九)之Prometheus 联盟、迁移
前言 本文来自Prometheus官网手册 和 Prometheus简介 FEDERATION 允许Prometheus服务器从另一台Prometheus服务器抓取选定的时间序列. 一,用例 联盟有不 ...
- Prometheus学习系列(二)之Prometheus FIRST STEPS
前言 本文来自Prometheus官网手册 和 Prometheus简介 说明 Prometheus是一个监控平台,通过在监控目标上的HTTP端点来收集受监控目标的指标.本指南将向您展示如何使用Pro ...
- prometheus学习系列十一: Prometheus 安全
prometheus安全 我们这里说的安全主要是基本认证和https2种, 目前这2种安全在prometheus中都没有的, 需要借助第三方软件实现, 这里以nginx为例. 基本认证 配置基本认证 ...
- prometheus学习系列十一: Prometheus pushgateway的使用
由于网络问题或者安全问题,可能我们的数据无法直接暴露出一个entrypoint 给prometheus采集. 这个时候可能就需要一个pushgateway来作为中间者完成中转工作. promethe ...
随机推荐
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 测试云平台显示MQTT客户端发过来的消息
现在这里空空如也 咱自定义的也没有数据 现在就是传上来温度数据,让这里显示温度数据 你发布的主题 /sys/a1m7er1nJbQ/Mqtt/thing/event/property/post 发布 ...
- ORM常用的13个方法
介绍一个可以以py脚本方式运行ORM操作的方法: 可在项目内新建个py文件,复制项目内manage.py文件中的以下代码: if __name__ == "__main__": o ...
- libevent笔记3:evbuffer
evbuffer 之前提到bufferevent结构体提供两个缓存区用来为读写提供缓存,并自动进行IO操作.这两个缓存区是使用Libevent中的evbuffer实现的,同样,Libevent中也提供 ...
- docker 挂载主机目录 -v 和 --mount区别
使用-v 时,如果宿主机上没有这个文件,也会自动创建, 但是如果使用--mount时,宿主机中没有这个文件会报错找不到这个文件,并创建失败
- 招聘.net高级工程师
1. 本科及以上学历(必须): 2. 精通.net框架和常见web框架,精通常见设计模式并熟练应用. 3. 扎实的技术功底,有良好的数据结构和算法基础,深入理解面向对象编程思想, 熟悉面向对象的基本设 ...
- Alpha冲刺——测试篇
课程信息 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺 团队目标 切实可行的计算机协会维修预约平台 团队信息 队员学号 队员姓名 个人博客地址 备注 22 ...
- sitecore-多变量测试与A / B测试概念论述
sitecore-多变量检验和A / B检验的区别 A / B测试和多变量测试有什么区别?让我们来看看这些测试方法的方法,常见用途,优点和局限性. sitecore中A / B测试 A / B测试(您 ...
- java中什么是抽象类(abstract)
一.什么是抽象类 由abstract修饰的方法叫抽象方法:由abstract修饰的类叫抽象类.抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构 ...
- React 根据条件自动计算
1.输入框 <Item {...formItemProps} label="留房日期"> {getFieldDecorator('date', { rules: [{ ...
- 思维导图xmind的文档保存问题
如果文件名相同,可能最新的文档覆盖以前的.当前活动文档只能有一个,如果有多个,保存后,其他活动文档也被更新了. 新建一个空白doc文档,仅仅是文件名,作为附件导入到xmind中,在xmind中保存后, ...