概念
警報規則允許您根據 Prometheus 表達式語言表達式定義警報條件,並將有關觸發警報的通知發送到外部服務。每當警報表達式在給定的時間點產生一個或多個向量元素時,警報對於這些元素的標簽集算作活動。
類似於記錄規則, 告警規則(Alerting rule) 也定義在獨立的文件中, 而后由 Prometheus 在 rule_files 配置段中加載,如下配置
告警規則模板地址:
rule_files: - recording_rules/*.yaml - alerting_rules/*.yml # 告警規則文件路徑
觸發告警
Prometheus以一個固定的周期來評估所有告警規則,其值由 evaluate_interval 參數定義,默認為15s;在每個評估周期內,Prometheus會計算每條告警規則中的布爾表達式並更新告警狀態;
未使用for子句的告警,會自動從Inactive狀態轉為Firing,它只需要一個評估周期便能觸發;而帶有for子句的告警狀態將先轉為Pending,而后才到Firing,因而至少需要兩個評估周期才能觸發;
處於Pending狀態的告警,在其持續時長滿足for子句的定義之前,若布爾表達式的值轉回了false,則告警狀態將轉回Inactive;
由此可見,經由Pending再到Firing的轉換,可以確保告警更有效,且不會來回浮動;
Prometheus將為Pending和Firing狀態中的每個告警創建指標,該指標名稱為ALERT,其值固定為1,並且在告警處於Pending和Firing狀態期間存在;在此之后,它將不接收任何更新,直到過期;
告警規則
警報規則在 Prometheus 中的配置方式與記錄規則相同。
指標含義
選項 | 含義 |
groups | 配置頂級,用於定義一個監控組 |
- name | 規則名稱 |
rules | 規則 |
- alert | 告警規則的名稱。 |
expr | 表達式基於PromQL表達式告警觸發條件,用於計算是否有時間序列滿足該條件。 |
for | 評估等待時間, 在等待時狀態為pending, 滿足時長告警狀態為 firing, 恢復則為 inactive狀態. |
labels | 自定義標簽 |
annotations | 用於指定一組附加信息,比如用於描述告警詳細信息的文字等,annotations的內容在告警產生時會一同作為參數發送到Alertmanager。summary描述告警的概要信息,description用於描述告警的詳細信息。同時Alertmanager的UI也會根據這兩個標簽值,顯示告警信息。 |
實例規則
groups: - name: Allinstances # 組名 rules: - alert: instanceDown # 規則名稱 expr: up == 0 # 匹配規則 實例宕機 promQl 表達式 for: 10s # 檢測持續時間 annotations: # 告警自己也是一個時間序列 注解 title: "instance down" # 告警標題 description: 'Instance has been down for more than 1 minute.' # 告警詳情 labels: # 新標簽 serverity: "critical" group_by: "node" - alert: 主機內存不足 expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 99 for: 10s labels: severity: "critical" annotations: summary: 主機內存不足 (主機地址 {{ $labels.instance }}) description: "主機內存已滿 (< 10% left)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
告警模板
Prometheus支持在告警中使用模板;
- 告警模板是指在告警中的標簽和注解上引用時間序列的標簽和樣本值的方法;
- 它使用標准的Go語法,並暴露一些包含時間標簽和值的變量;
-
- 標簽引用: {{ $label.<label_name> }}
- 指標樣本值引用: {{ $value }}
若要在description注解中引用觸發告警的時間序列上的instance和job標簽的值,可分別使用“{{ $label.instance }}”和“{{ $label.job }}”;
示例
[root@ops prometheus]# cat alerting_rules/instance-down.yml groups: - name: Allinstances # 組名 rules: - alert: instanceDown # 規則名稱 expr: up == 0 # 匹配規則 實例宕機 promQl 表達式 for: 10s # 檢測持續時間 annotations: # 告警自己也是一個時間序列 注解 summary: 主機宕機 (主機地址 {{ $labels.instance }}) description: '實例宕機超過 1m. 當前值為: {{ $value }}' # 告警詳情 labels: # 新標簽 serverity: "critical"
Prometheus 頁面檢查配置