Prometheus: 警報

Prometheus 警報的運作方式及其配置方法

👋 歡迎來到 Stackhero 文件!

Stackhero 提供一個即用型的 Prometheus cloud 解決方案,帶來多項好處,包括:

  • 包含 Alert Manager,可發送警報至 SlackMattermostPagerDuty 等。
  • 專用電郵伺服器發送無限電郵警報
  • Blackbox 用於探測 HTTPICMPTCP 等。
  • 使用線上配置文件編輯器進行簡易配置
  • 只需點擊即可輕鬆完成更新
  • 專用私有 VM提供的最佳性能和強大安全性

節省時間簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Prometheus cloud hosting 解決方案!

Prometheus 可以分析您的指標並根據您定義的規則觸發警報。使用 Stackhero for Prometheus,警報分兩個階段處理。首先,評估 Prometheus 警報規則,然後由 Alert Manager 接手。

所有內容都已預先安裝並配置在 Stackhero for Prometheus 中,因此您只需進行最少的設置,例如添加您的電子郵件地址,即可開始接收警報。

Stackhero for Prometheus 的大圖Stackhero for Prometheus 的大圖

當 Prometheus 獲取指標時,它會根據 rules-alert.yml 文件中指定的規則進行評估。這些警報規則定義了根據收集的指標觸發警報的閾值和時間窗口。

例如,如果磁碟使用量超過 80%,則可以觸發警報。此外,可以設置規則來預測未來的情況,並在估計磁碟空間將在未來 24 小時內完全填滿時發送警報。

另一個常見的用例是檢測異常行為。例如,如果網絡帶寬使用量突然激增,可以觸發警報以幫助檢測潛在的分佈式拒絕服務 (DDoS) 攻擊或數據外洩嘗試。

Prometheus 警報規則直接包含在 Prometheus 服務器中。

Alert Manager 接收由 Prometheus 警報規則觸發的警報。它會去重警報,將其分組,然後通過各種通知渠道(如電子郵件、Slack、Mattermost、PagerDuty 等)轉發。其配置文件為 alert-manager.yml

例如,如果發生服務器減速,Prometheus 警報規則可能會觸發針對負載增加和 CPU 使用率的單獨警報。Alert Manager 接收這些警報,將其分組,因為它們涉及同一服務器,並根據您的配置向適當的收件人或團隊發送單一合併通知。

如果減速持續,Prometheus 將繼續發送警報,但 Alert Manager 會在指定時間內抑制重複消息,以防止您的團隊被冗餘警報淹沒。

如果需要,您還可以靜音或完全抑制警報。一旦解決了根本問題,將發送恢復消息以通知您的團隊。

此示例說明了一個常見場景,但您可以完全自定義設置以滿足您的特定需求。

警告 Alert Manager 並未預設包含在 Prometheus 中。 為了節省您的時間並簡化過程,我們已在 Stackhero for Prometheus 中集成並配置了 Alert Manager,因此您只需幾分鐘即可發送警報,幾乎不需要任何努力。

您可以通過編輯 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.yml 文件。在您的 Stackhero 儀表板中,選擇您的 Prometheus 服務,然後點擊 "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 的實例包括一個專用且私人的電子郵件服務器,允許您無限量發送電子郵件警報,無需額外費用。

配置完接收者後,您需要設置 routes。路由告訴 Alert Manager 如何處理來自 Prometheus 的警報以及將其發送到哪裡(通常是到您預先配置的接收者之一)。

以下是一個基本示例,將嚴重性為 "critical" 的警報定向到名為 "critical_alert" 的接收者:

route:
  routes:
    - match:
        severity: "critical"
      receiver: "critical_alert"

我們已在您的 Stackhero for Prometheus 實例中預配置了一些路由。要開始接收警報,只需更新 email_configs 和/或 slack_configs 部分,填寫您的通知詳情。