prometheus
  • Introduction
  • (一)快速开始
    • 安装Prometheus
    • 使用NodeExporter采集数据
    • AlertManager进行告警
    • Grafana数据可视化
  • (二)探索PromQL
    • 理解时间序列
    • Metrics类型
    • 初识PromQL
    • PromQL操作符
    • PromQL内置函数
    • PromQL聚合函数
  • (三)Prometheus告警处理
    • 自定义告警规则
    • 示例 - 对主机进行监控告警
    • 部署AlertManager
    • 告警的路由与分组
    • 使用Receiver接收告警信息
      • 集成邮件系统
    • 屏蔽告警通知
    • 扩展阅读
      • AlertManager的API
      • Prometheus发送告警机制
      • 实践:接收Prometheus的告警
      • 实践:AlertManager
  • Prometheus
    • PromQL
      • 内置函数
        • avg
        • rate与irate
      • 常见指标的PromQL
        • 主机CPU
    • 配置
      • 告警规则
Powered by GitBook
On this page
  • 对时间序列进行算术运算
  • 使用关系运算符过滤时间序列
  • 逻辑运算符

Was this helpful?

  1. (二)探索PromQL

PromQL操作符

对时间序列进行算术运算

我们可以通过下面的表达式来查询主机的可用内存(以Mb为单位)

node_memory_MemAvailable_bytes / 1024 / 1024

上面的表达式中,node_memory_MemAvailable_bytes称为一个向量,1024称为一个标量(在任何时间点值都不变)

而向量与向量之间的运算则复杂一些,比如查询主机内存使用率的表达式

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes

那这个表达式是如何工作的呢?

依次找到与左边向量元素匹配(标签完全一致)的右边向量元素进行运算,如果没找到匹配元素,则直接丢弃。同时新的时间序列将不会包含指标名称。

该表达式返回结果的示例如下所示:

{instance="peng01","job"="node_exporter"} 0.4
{instance="peng02","job"="node_exporter"} 0.98

算术运算符有+ - * / % ^

使用算术运算符对时间序列进行算术运算,得到的还是时间序列

使用关系运算符过滤时间序列

我们可以通过上面的表达式,查找主机的内存使用率,而如果我们只是想要查找内存使用率大于95%的主机呢?

那么我们可以使用下面的表达式:

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes > 0.95

该表达式我们称为布尔表达式,其返回的依然是时间序列,如下:

{instance="peng02","job"="node_exporter"} 0.98

这里的返回会和我们平时的理解有些差异。其返回结果依旧是:左边算术表达式的时间序列。

比如,下面的表达式返回的就是主机的内存使用字节数(只返回内存使用率超过95%的主机)

node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes > 0.95 * node_memory_MemTotal_bytes

关系运算符有:== != > < >= <=。

使用关系运算符对时间序列进行过滤,得到的还是时间序列

逻辑运算符

逻辑运算符有:与(and)、或(or)、非(unless)。

to be continued

Previous初识PromQLNextPromQL内置函数

Last updated 4 years ago

Was this helpful?