# Prometheus 概览
- 基本功能使用
- 查询语法
- 函数列表
- 告警
prometheus从根本上存储的所有数据都是时间序列: 具有时间戳的数据流只属于单个度量指标和该度量指标下的多个标签维度。除了存储时间序列数据外,Prometheus也可以利用查询表达式存储5分钟的返回结果中的时间序列数据。
## Prometheus查询
Prometheus提供一个函数式的表达式语言,可以使用户实时地查找和聚合时间序列数据。表达式计算结果可以在图表中展示,也可以在Prometheus表达式浏览器中以表格形式展示,或者作为数据源, 以HTTP API的方式提供给外部系统使用。
### 表达式语言数据类型
在Prometheus的表达式语言中,任何表达式或者子表达式都可以归为四种类型:
* 即时向量(instant vector) 包含每个时间序列的单个样本的一组时间序列,共享相同的时间戳。
* 范围向量(Range vector) 包含每个时间序列随时间变化的数据点的一组时间序列。
* 标量(Scalar) 一个简单的数字浮点值
* 字符串(String) 一个简单的字符串值(目前未被使用)
### examples:
查询K8S集群内所有apiserver健康状态
(sum(up{job="apiserver"} == 1) / count(up{job="apiserver"})) * 100
查询pod 聚合一分钟之内的cpu 负载
sum by (container_name)(rate(container_cpu_usage_seconds_total{image!="",container_name!="POD",pod_name="acw62egvxd95l7t3q5uxee"}[1m]))
### 时间序列选择器
- 即时向量选择器
即时向量选择器允许选择一组时间序列,或者某个给定的时间戳的样本数据。下面这个例子选择了具有container_cpu_usage_seconds_total的时间序列:
container_cpu_usage_seconds_total
你可以通过附加一组标签,并用{}括起来,来进一步筛选这些时间序列。下面这个例子只选择有container_cpu_usage_seconds_total名称的、有prometheus工作标签的、有pod_name组标签的时间序列:
container_cpu_usage_seconds_total{image!="",container_name!="POD",pod_name="acw62egvxd95l7t3q5uxee"}
另外,也可以也可以将标签值反向匹配,或者对正则表达式匹配标签值。下面列举匹配操作符:
=:选择正好相等的字符串标签
!=:选择不相等的字符串标签
=~:选择匹配正则表达式的标签(或子标签)
!=:选择不匹配正则表达式的标签(或子标签)
例如,选择staging、testing、development环境下的,GET之外的HTTP方法的http_requests_total的时间序列:
http_requests_total{environment=~"staging|testing|development",method!="GET"}
- 范围向量选择器
范围向量表达式正如即时向量表达式一样运行,前者返回从当前时刻的时间序列回来。语法是,在一个向量表达式之后添加`[]`来表示时间范围,持续时间用数字表示,后接下面单元之一:
时间长度有一个数值决定,后面可以跟下面的单位:
- `s` - seconds
- `m` - minutes
- `h` - hours
- `d` - days
- `w` - weeks
- `y` - years
在下面这个例子中,我们选择此刻开始1分钟内的所有记录,metric名称为container_cpu_usage_seconds_total、作业标签为pod_name的时间序列的所有值:
irate(container_cpu_usage_seconds_total{image!="",container_name!="POD",pod_name="acw62egvxd95l7t3q5uxee"}[1m])
- 偏移修饰符(offset modifier)
偏移修饰符允许更改查询中单个即时向量和范围向量的时间偏移量,例如,以下表达式返回相对于当前查询时间5分钟前的container_cpu_usage_seconds_total值:
container_cpu_usage_seconds_total offset 5m
如下是范围向量的相同样本。这返回container_cpu_usage_seconds_total在一天前5分钟内的速率:
(rate(container_cpu_usage_seconds_total{pod_name="acw62egvxd95l7t3q5uxee"} [5m] offset 1d))
- 操作符
Prometheus支持多种二元和聚合的操作符[请查看这里](https://github.com/1046102779/prometheus/blob/master/prometheus/querying/operators.md)
- 函数
Prometheus支持多种函数,来对数据进行操作[请查看这里](https://github.com/1046102779/prometheus/blob/master/prometheus/querying/functions.md)