## 定義recording rules
### 配置規則
Prometheus支持可以配置,然后定期執行的兩種規則: recording rules(記錄規則)和alerting rules[警告規則](https://prometheus.io/docs/alerting/rules)。為了在Prometheus系統中包括規則,我們需要創建一個包含規則語句的文件,并通過在[Prometheus配置](https://prometheus.io/docs/operating/configuration)的`rule_fields`字段加載這個記錄規則文件。
這些規則文件可以通過像Prometheus服務發送`SIGNUP`信號量,實時重載記錄規則。如果所有的記錄規則有正確的格式和語法,則這些變化能夠生效。
### 語法檢查規則
在沒有啟動Prometheus服務之前,想快速知道一個規則文件是否正確,可以通過安裝和運行Prometheus的`promtool`命令行工具檢驗:
> go get github.com/prometheus/prometheus/cmd/promtool
> promtool check-rules /path/to/examples.rules
當記錄規則文件是有效的,則這個檢查會打印出解析到規則的文本表示,并以返回值0退出程序。
如果有任何語法錯誤的話,則這個命令行會打印出一個錯誤信息到標準輸出,并以返回值1退出程序。無效的輸入參數,則以返回值2退出程序。
### 記錄規則
記錄規則允許你預先計算經常需要的,或者計算復雜度高的表達式,并將結果保存為一組新的時間序列數據。查詢預計算結果通常比需要時進行計算表達式快得多。對于dashboard是非常有用的,因為dashboard需要實時刷新查詢表達式的結果。
為了增加一個新記錄規則,增加下面的記錄規則到你的規則文件中:
> \<new time series name\>[{\<label overrides\>}] = \<expression to record\>
一些例子:
> # 計算每個job的http請求總數,保存到新的度量指標中
> job:http_inprogree_requests:sum = sum(http_inprogress_requests) by (job)
>
> # 放棄老標簽,寫入新標簽的結果時間序列數據:
> new_time_series{label_to_change="new_value", label_to_drop=""} = old_time_series
記錄規則的執行周期有Prometheus的配置文件中的`evaluate_interval`指定。規則語句的右側表達式一旦被執行,則新的時間戳key為當前時間,value為右邊表達式的樣本值,新的度量指標名稱和標簽列表為左邊名稱。