Prometheus: 警報
Prometheus 警報的運作方式及其配置方法
👋 歡迎來到 Stackhero 文件!
Stackhero 提供一個即用型的 Prometheus cloud 解決方案,帶來多項好處,包括:
- 包含
Alert Manager,可發送警報至Slack、Mattermost、PagerDuty等。- 專用電郵伺服器發送無限電郵警報。
Blackbox用於探測HTTP、ICMP、TCP等。- 使用線上配置文件編輯器進行簡易配置。
- 只需點擊即可輕鬆完成更新。
- 由專用私有 VM提供的最佳性能和強大安全性。
節省時間並簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Prometheus cloud hosting 解決方案!
Prometheus 警報簡介
Prometheus 可以分析您的指標並根據您定義的規則觸發警報。使用 Stackhero for Prometheus,警報分兩個階段處理。首先,評估 Prometheus 警報規則,然後由 Alert Manager 接手。
所有內容都已預先安裝並配置在 Stackhero for Prometheus 中,因此您只需進行最少的設置,例如添加您的電子郵件地址,即可開始接收警報。
Stackhero for Prometheus 的大圖
Prometheus 警報規則簡介
當 Prometheus 獲取指標時,它會根據 rules-alert.yml 文件中指定的規則進行評估。這些警報規則定義了根據收集的指標觸發警報的閾值和時間窗口。
例如,如果磁碟使用量超過 80%,則可以觸發警報。此外,可以設置規則來預測未來的情況,並在估計磁碟空間將在未來 24 小時內完全填滿時發送警報。
另一個常見的用例是檢測異常行為。例如,如果網絡帶寬使用量突然激增,可以觸發警報以幫助檢測潛在的分佈式拒絕服務 (DDoS) 攻擊或數據外洩嘗試。
Prometheus 警報規則直接包含在 Prometheus 服務器中。
Alert Manager 簡介
Alert Manager 接收由 Prometheus 警報規則觸發的警報。它會去重警報,將其分組,然後通過各種通知渠道(如電子郵件、Slack、Mattermost、PagerDuty 等)轉發。其配置文件為 alert-manager.yml。
例如,如果發生服務器減速,Prometheus 警報規則可能會觸發針對負載增加和 CPU 使用率的單獨警報。Alert Manager 接收這些警報,將其分組,因為它們涉及同一服務器,並根據您的配置向適當的收件人或團隊發送單一合併通知。
如果減速持續,Prometheus 將繼續發送警報,但 Alert Manager 會在指定時間內抑制重複消息,以防止您的團隊被冗餘警報淹沒。
如果需要,您還可以靜音或完全抑制警報。一旦解決了根本問題,將發送恢復消息以通知您的團隊。
此示例說明了一個常見場景,但您可以完全自定義設置以滿足您的特定需求。
警告
Alert Manager並未預設包含在 Prometheus 中。 為了節省您的時間並簡化過程,我們已在 Stackhero for Prometheus 中集成並配置了Alert Manager,因此您只需幾分鐘即可發送警報,幾乎不需要任何努力。
配置 Prometheus 警報規則
您可以通過編輯 rules-alert.yml 文件來調整 Prometheus 警報規則。要執行此操作,請訪問您的 Stackhero 儀表板,選擇您的 Prometheus 服務,然後點擊 "Prometheus 警報規則配置"。
我們已經在您的 Stackhero for Prometheus 實例中添加了一些默認警報規則,因此通常不需要修改 rules-alert.yml 文件,除非需要自定義。
以下是一個當磁碟使用量超過 90% 時觸發的警報示例:
- alert: "HostOutOfDiskSpace"
expr: (node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes < 10 and ON (instance, device, mountpoint) node_filesystem_readonly == 0
for: 2m
labels:
severity: "warning"
annotations:
summary: "Host out of disk space (instance {{ $labels.instance }})"
description: "Disk is almost full (< 10% left)"
value: "{{ $value }}"
這是另一個預測未來 24 小時內磁碟空間飽和的示例:
- alert: "HostDiskWillFillIn24Hours"
expr: (node_filesystem_avail_bytes * 100) / node_filesystem_size_bytes < 10 and ON (instance, device, mountpoint) predict_linear(node_filesystem_avail_bytes{fstype!~"tmpfs"}[1h], 24 * 3600) < 0 and ON (instance, device, mountpoint) node_filesystem_readonly == 0
for: 2m
labels:
severity: "warning"
annotations:
summary: "Host disk will fill in 24 hours (instance {{ $labels.instance }})"
description: "Filesystem is predicted to run out of space within the next 24 hours at the current write rate"
value: "{{ $value }}"
您可以在 Awesome Prometheus Alerts 網站上找到更多警報規則示例。
配置 Alert Manager
要配置 Alert Manager,請編輯 alert-manager.yml 文件。在您的 Stackhero 儀表板中,選擇您的 Prometheus 服務,然後點擊 "Alert Manager 配置"。
以下是基本介紹。欲了解更多詳情,請參閱官方文檔。
配置 Alert Manager:接收者
第一步是配置 receivers。每個 receiver 是一組通知集成(如電子郵件、Slack 等),由唯一的 name 標識。
例如,您可以創建一個名為 "critical_alert" 的接收者,用於由嚴重警報觸發的通知。或者,您可以創建一個像 "devops_team" 的接收者,將警報定向到您的 DevOps 團隊。
僅設置
receiver名稱為 "critical_alert" 並不會發送警報。警報與接收者之間的關聯是在下面描述的routes配置中完成的。
一旦定義了接收者,您需要設置相應的通知集成。這些可能包括電子郵件、Slack/Mattermost 通知、PagerDuty、Opsgenie、Webhook 等。
以下是一個名為 "critical_alert" 的 receiver 示例,它向兩個用戶發送電子郵件並向 #alerts 頻道發送 Slack 消息:
receivers:
- name: "critical_alert"
# 通過電子郵件發送嚴重警報
email_configs:
- send_resolved: true
to: "[email protected]"
# 發送嚴重警報到 Slack 或 Mattermost
slack_configs:
- send_resolved: true
api_url: "<your Slack or Mattermost API URL>"
channel: "#alerts"
title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"
您可以定義多個接收者來處理不同類型的警報。例如,您可能有一個用於嚴重警報,另一個用於錯誤警報,還有一個用於其他類型的警報。
Stackhero for Prometheus 的實例包括一個專用且私人的電子郵件服務器,允許您無限量發送電子郵件警報,無需額外費用。
配置 Alert Manager:路由
配置完接收者後,您需要設置 routes。路由告訴 Alert Manager 如何處理來自 Prometheus 的警報以及將其發送到哪裡(通常是到您預先配置的接收者之一)。
以下是一個基本示例,將嚴重性為 "critical" 的警報定向到名為 "critical_alert" 的接收者:
route:
routes:
- match:
severity: "critical"
receiver: "critical_alert"
我們已在您的 Stackhero for Prometheus 實例中預配置了一些路由。要開始接收警報,只需更新
email_configs和/或slack_configs部分,填寫您的通知詳情。