記錄規則(recording rules)與告警規則(alerting rule)


記錄規則(recording rules)
配置規則
Prometheus支持兩種類型的規則,可以對其進行配置,然后定期進行評估:記錄規則和警報規則。要在Prometheus中包含規則,請創建一個包含必要規則語句的文件,並讓Prometheus通過Prometheus配置中的rule_files字段加載該文件。規則文件使用YAML。
可以通過發送SIGHUP到Prometheus進程在運行時重新加載規則文件。僅當所有規則文件格式正確時,才會應用更改。
 
語法檢查規則
要在不啟動Prometheus服務器的情況下快速檢查規則文件在語法上是否正確,請安裝並運行Prometheus的promtool命令行實用工具:
vim rules.yml:
groups:
  - name: test
    rules:
    - record: job:http_requests:rate5m
      expr: sum by (job)(rate(http_requests_total[5m]))
 
promtool check rules rules.yml
當該文件在語法上有效時,檢查器將已解析規則的文本表示形式打印到標准輸出,然后以0返回狀態退出。
如果存在任何語法錯誤或無效的輸入參數,則會將錯誤消息打印為標准錯誤,並以1返回狀態退出。
 
記錄規則
記錄規則使您可以預先計算經常需要或計算量大的表達式,並將其結果保存為一組新的時間序列。這樣,查詢預先計算的結果通常比每次需要原始表達式都要快得多。這對於儀表板特別有用,儀表板每次刷新時都需要重復查詢相同的表達式。
記錄和警報規則存在於規則組中。組中的規則以規則的時間間隔順序運行。
規則文件的語法為:
groups:
  [ - <rule_group> ]
一個簡單的示例規則文件將是:
groups:
  - name: example
    rules:
    - record: job:http_inprogress_requests:sum
      expr: sum(http_inprogress_requests) by (job)
 
# 收集的指標名稱record: <string>
 
告警規則(alerting rule)
帶有警報的示例規則文件為:
groups:
- name: example
  rules:
  - alert: HighRequestLatency
    expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
    for: 10m
    labels:
      severity: page
    annotations:
      summary: High request latency
可選for子句使Prometheus在第一次遇到新的表達式輸出矢量元素與將警報計為對此元素的觸發進行計數之間等待一段時間。在這種情況下,Prometheus將在每次發出警報之前檢查警報在10分鍾內是否繼續處於活動狀態。活動但尚未觸發的元素處於掛起狀態。
該labels子句允許指定一組附加標簽來附加到警報。任何現有的沖突標簽都將被覆蓋。標簽值可以模板化。
該annotations子句指定了一組信息標簽,可用於存儲更長的附加信息,例如警報說明或運行手冊鏈接。注釋值可以模板化。
 
模板
標簽和注釋值可以使用控制台模板進行模板化。該$labels 變量保存警報實例的標簽鍵/值對。可以通過$externalLabels變量訪問已組態的外部標簽。該 $value變量保存警報實例的評估值。
# To insert a firing element's label values:
{{ $labels.<labelname> }}
# To insert the numeric expression value of the firing element:
{{ $value }}
 
例子:
groups:
- name: example
  rules:
  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
 
  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)”
 
在運行時檢查警報
要手動檢查哪些警報處於活動狀態(掛起或觸發),請導航到Prometheus實例的“警報”選項卡。這將向您顯示每個定義的警報當前處於活動狀態的確切標簽集。
對於待處理和觸發警報,Prometheus還存儲表格的合成時間序列ALERTS{alertname="<alert name>", alertstate="pending|firing", <additional alert labels>}。1只要警報處於指示的活動(掛起或觸發)狀態,樣本值就設置為,如果不再如此,則將系列標記為陳舊。
 
發送警報通知
Prometheus的警報規則擅長於確定當前已發生的問題,但它們並不是完整的通知解決方案。在簡單的警報定義之上,還需要另一層來添加摘要,通知速率限制,靜默和警報依賴性。在Prometheus的生態系統中, Alertmanager擔當了這個角色。因此,Prometheus可以配置為定期將有關警報狀態的信息發送到Alertmanager實例,該實例隨后負責調度正確的通知。
可以將Prometheus 配置為通過其服務發現集成自動發現可用的Alertmanager實例。
 
簡單的警報字段模板
alert: InstanceDown #檢測job的狀態,持續1分鍾metrices不能訪問會發給altermanager進行報警
expr: up == 0
for: 5m
labels:
  severity: page
annotations:
  summary: "Instance {{$labels.instance}} down"
  description: "{{$labels.instance}} of job {{$labels.job}} has been down for more than 5 minutes."


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM