# 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)