把叢集警示送到通知管道
新增通知管道、選擇事件並傳送測試,讓節點與叢集異常能送達管理員。
打開 叢集 → 通知,按 新增管道,選擇接收位置和事件。套用後按 傳送測試,到 Slack、信箱或其他接收位置確認有收到。
叢集的管道接收節點、Falco 執行期安全事件和系統 Namespace 的警示。個別專案的建置、部署或資料庫事件,要在該專案的 設定 → 通知 另外新增管道。
- 叢集裝了指標元件(VictoriaMetrics)。畫面顯示 通知需要先安裝警示功能 時,按 安裝指標元件,裝好再回來。
- 準備好接收服務的 Webhook 網址、權杖或 SMTP 設定。
- 新增管道需要在通知所在的 Namespace 建立
VMAlertmanagerConfig和 Secret 的權限。傳送測試還要能建立 Job。管理員帳號都有這些權限。
新增並測試管道
Section titled “新增並測試管道”選擇接收位置
Section titled “選擇接收位置”在 叢集 → 通知 按 新增管道。名稱 最多 30 個字元,只能用小寫字母、數字和連字號,並以字母開頭。
在 送到 選擇類型,填入對應設定:
| 類型 | 需要準備 |
|---|---|
| Slack、Discord | Webhook 網址。 |
| Telegram | Bot 權杖、數字格式的 聊天 ID。 |
| 電子郵件 | 收件人、寄件人,以及含連接埠的 SMTP 伺服器,例如 smtp.example.com:587。SMTP 伺服器必須支援 TLS,SMTP 帳號 和 SMTP 密碼 選填。 |
| Webhook | 網址,Bearer 權杖 選填。 |
| ntfy | 主題。伺服器 留白時使用 ntfy.sh,存取權杖 選填。 |
選事件並套用
Section titled “選事件並套用”在 事件 至少勾一項,例如 節點沒有就緒 或 執行期安全(Falco)。
按 檢查變更,確認要建立的管道和存放網址、權杖的機密(內容不會顯示),再按 新增管道。
傳送一次測試
Section titled “傳送一次測試”等管道不再標示 等待中,在管道列按 傳送測試,檢查要建立的測試用 Job,再按 傳送測試。
測試是一個最多執行兩分鐘的 Job,警示規則看到它後,會送一則測試警示到這個管道。畫面顯示已傳送後,大約一兩分鐘內,到接收位置確認有收到訊息。
在管道列按 編輯,可以改事件和接收設定,再按 檢查變更 和 儲存管道。
表單會帶入不屬於機密的設定。網址、權杖和密碼欄位會留空,標示 不變更。留空就保留已儲存的值,填了才會換掉那一項。Zeabur 不會讀出已儲存的機密。
類型不能改。要從 Slack 改送到電子郵件這類不同的類型,先新增另一個管道、傳送測試並確認收到,再移除舊的管道。
用 kubectl 做同樣的事
Section titled “用 kubectl 做同樣的事”一個管道是兩個名為 zeabur-notify-<名稱> 的物件,都帶 label zeabur.com/notification-channel: <名稱>:Secret 放網址、權杖和密碼,VMAlertmanagerConfig 寫路由和接收設定。叢集的管道放在 observability Namespace,專案的管道放在專案自己的 Namespace。
下面是專案 shop 的 Slack 管道,收當機重啟和部署失敗:
apiVersion: v1kind: Secretmetadata: name: zeabur-notify-ops namespace: shop labels: zeabur.com/notification-channel: opstype: OpaquestringData: url: https://hooks.slack.com/services/T000/B000/XXXX---apiVersion: operator.victoriametrics.com/v1beta1kind: VMAlertmanagerConfigmetadata: name: zeabur-notify-ops namespace: shop labels: zeabur.com/notification-channel: ops annotations: zeabur.com/notification-kind: slackspec: route: receiver: events matchers: - zeabur_event=~"crash-loop|deploy-failed|test" - zeabur_channel=~"|ops" group_by: ["..."] group_wait: 30s group_interval: 5m repeat_interval: 12h routes: - receiver: states matchers: - zeabur_kind="state" group_by: [alertname] receivers: - name: events slack_configs: - api_url: {name: zeabur-notify-ops, key: url} title: '{{ if eq .Status "resolved" }}Resolved: {{ end }}{{ (index .Alerts 0).Annotations.summary }}' text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}" send_resolved: false - name: states slack_configs: - api_url: {name: zeabur-notify-ops, key: url} title: '{{ if eq .Status "resolved" }}Resolved: {{ end }}{{ (index .Alerts 0).Annotations.summary }}' text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}" send_resolved: true幾個要照著寫的地方:
- 第一個 matcher 列出要收的事件,最後要加上
test,傳送測試 才收得到。專案可用的事件有build-failed、build-succeeded、deploy-failed、deploy-succeeded、crash-loop、out-of-memory、database-unhealthy、backup-failed、volume-almost-full、certificate。叢集的管道可用node-not-ready、runtime-security、crash-loop、volume-almost-full、certificate、backup-failed。 - 第二個 matcher 的
|ops讓這個管道收一般警示,也收指名給ops的測試。 events和states兩個接收設定內容相同,只差send_resolved。狀態類的警示恢復時會再通知一次。
其他類型的 Secret 鍵和接收設定:
| 類型 | Secret 的鍵 | 接收設定 |
|---|---|---|
| Discord | url | discord_configs,webhook_url_secret 指向 url |
| Telegram | token | telegram_configs,bot_token 指向 token,chat_id 寫數字 |
| 電子郵件 | password(有填才有) | email_configs,to、from、smarthost、require_tls: true,auth_username、auth_password 選填 |
| Webhook | url,token 選填 | webhook_configs,url_secret 指向 url;有權杖時加 http_config.authorization(type: Bearer,credentials 指向 token) |
| ntfy | url,token 選填 | 同 Webhook。url 寫 https://ntfy.sh/<主題>?template=alertmanager,自架伺服器就換掉網域 |
傳送測試是建立一個帶 zeabur.com/notification-test: <名稱> 的 Job。指標元件的警示規則看到它,就送出一則指名給這個管道的測試警示:
apiVersion: batch/v1kind: Jobmetadata: name: zeabur-notify-test-ops-1761456000 namespace: shop labels: zeabur.com/notification-test: opsspec: activeDeadlineSeconds: 120 ttlSecondsAfterFinished: 300 backoffLimit: 0 template: metadata: labels: zeabur.com/notification-test: ops spec: restartPolicy: Never automountServiceAccountToken: false enableServiceLinks: false securityContext: runAsNonRoot: true runAsUser: 65535 seccompProfile: {type: RuntimeDefault} containers: - name: wait image: registry.k8s.io/pause:3.10 resources: requests: {cpu: 1m, memory: 4Mi} limits: {cpu: 10m, memory: 8Mi} securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: {drop: [ALL]}移除管道就是刪掉這兩個物件:
kubectl -n shop delete vmalertmanagerconfig,secret zeabur-notify-ops- 管道列不再顯示 等待中,也沒有 被拒絕。
kubectl -n shop get vmalertmanagerconfig zeabur-notify-ops -o jsonpath='{.status.updateStatus}'印出operational。印出failed時,把路徑換成{.status.reason}看原因。- 傳送測試後一兩分鐘內,接收位置收到一則測試訊息。
- 等待中:Alertmanager 還沒載入這個管道,稍後再看。
- 被拒絕:該列會寫出原因,例如網址不完整、儲存的網址或權杖不見了、SMTP 伺服器沒有連接埠。按 編輯 修正後儲存。
- 收不到測試:核對接收服務的網址和權杖。畫面說 Zeabur 的警示規則沒有安裝時,重新安裝指標元件。
- 能新增管道卻不能測試:傳送測試要能建立 Job,請管理員確認這項權限。
- 不是在 Zeabur 建立的,請到原本建立的地方修改:回到原本的 Helm 或 GitOps 設定修改。
在管道的操作選單選 移除,確認要刪除的管道和機密後按 移除管道。之後的警示只會送到其他有勾選該事件的管道。
測試用的 Job 結束五分鐘後,Kubernetes 會自動刪除它,不用另外清理。