告警規則的設置是通過yml文件來設置,因此需要遵從yml的語法
groups:
- name: example #報警規則組的名字
rules:
- alert: InstanceDown #檢測job的狀態,持續1分鍾metrices不能訪問會發給altermanager進行報警
expr: up == 0
for: 1m #持續時間 , 表示持續一分鍾獲取不到信息,則觸發報警
labels:
serverity: page # 自定義標簽
annotations:
summary: "Instance {{ $labels.instance }} down" # 自定義摘要
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes." # 自定義具體描述
可以設置規則組, 規則組主要是做個告警類型的區分,比如說跟內存相關,IO相關,等等。
rules 下面 就是設置具體的規則。
告警規則的設置主要在於expr表達式的設置,以及annotations里面的提示消息的設置。
對於不了解PromSQL查詢語言的,獨自寫表達式的難度是非常大的,我這里有個非常好的辦法,我們可以從grafana
控制台獲取查詢語言,然后根據這個來寫表達式。
第一步
進入grafana的控制台,找到任意一個視圖。
點擊edit
進入edit頁面,可以看到**metrics **這個tab欄 , 這里就有各個指標的查詢函數。 這里舉個例子,比如
獲取整個系統的CPU占比
system_cpu_usage{job="$application", instance="$instance"}
這個函數是指定了Job(應用的唯一標識,默認為應用名)和instance(應用的IP:端口)的,我們在實際使用的時候可以這樣
system_cpu_usage{job="MSG-MS", instance="192.168.139.120:8080"}
想知道這個具體能查出來的數據是什么,可以訪問prometheus的控制台。
http://10.208.204.46:9090/graph
查詢結果如下
最下方,我們可以看到查詢出來的結果。
查詢的時候除了可以使用等號,也可以使用其他運算符
=:選擇正好相等的字符串標簽
!=:選擇不相等的字符串標簽
=~:選擇匹配正則表達式的標簽(或子標簽)
!=:選擇不匹配正則表達式的標簽(或子標簽)
舉個例子:
system_cpu_usage{ job=~'.*MSG.*' } # 包含MSG的JOB
system_cpu_usage這個括號里面的值,都可以用來做查詢條件。 后面value即為查出來的值
由此根據上面的准備,我們就可以定義如下的告警規則
groups:
- name: example #報警規則組的名字
rules:
- alert: CPU負載告警 # 規則名稱
expr: system_cpu_usage{job="MSG-MS"}> 0.7 # 表示如果MSG-MS這個應用整個系統的CPU超過70% ,則觸發告警
for: 10s #持續時間 , 表示持續10秒都是高於70%的,則報警
labels:
serverity: page # 自定義標簽
annotations:
summary: "{{ $labels.job}} - {{ $labels.instance }} 的CPU 太高了" # 自定義摘要
description: "應用名: {{ $labels.job }} 實例名: {{ $labels.instance }} , 環境: {{ $labels.env }} , 當前值為 : {{ $value }}" # 自定義具體描述
上面的告警規則, 我們用到了labels這個變量,以及value這個變量來輸出信息。
labels 使用方法 :
在我們使用prometheus控制台做測試查詢的時候,system_cpu_usage括號里面的屬性,就是labels可以取到的值
value 使用:
上圖中的value值
轉自
prometheus告警規則設置(二) | sharedCode https://www.shared-code.com/article/83