DevOps課程-Prometheus 10

在Alertmanager中設置email為Receiver

ZONGRU Li
9 min readOct 26, 2022

在前面課程中有產出alertmanagerStatefulSet內容為alert.yaml

其中會看到:

所以設定檔是在Secret裡面,這個Secret名稱叫做:

"alertmanager-monitoring-kube-prometheus-alertmanager-generated"

這就是Alertmanager的設定檔內容所在!

#透過以下指令拿到設定檔內容(但是有base64加密):
kubectl get secret alertmanager-monitoring-kube-prometheus-alertmanager-generated -n monitoring -o yaml

講師在上面畫面上datakey是"alertmanager.yaml"

如上圖我看到的則是"alertmanager.yaml.gz"

所以可以透過以下bash指令解密看到裡面YAML內容

#如果像講師畫面一樣只有alertmanager.yaml,沒有gz的話,可透過以下bash指令解密:
echo {後面那一長串} | base64 --decode
#如上,我的看到是"alertmanager.yaml.gz",所以解密要變成:
echo {後面那一長串} | base64 --decode | gzip -d

其內容上的routereceivers就很接近Alertmanager Web上面看到的:

實際要自己構建Alertmanager的設定檔 — 找到文件:

然而同樣的,這是透過Operator佈署的,所以我們無法直接地修改該檔案內容

跟前面Prometheus Configuration一樣

這邊也要透過Custom Kubernetes Resource來提供設定,所以找到:

在RH文件中找到

Configuration Email Notification — spec中receivers部分

本機編輯一個新檔案 →alert-manager-configuration.yaml

往下拉看到:

然後再往下看到:

然後開始填寫:

下面還有emailConfigs的相關陣列設置:

參考到文件上:

暫時性地如下定義:

所以先另外搞一個Secret物件來放密碼,再注入到上圖的設定內

這邊SECRET的metadata打錯
#把密碼做base64加密:
echo "密碼" | base64
#寫好Secret後建立:
kubectl apply -f email-secret.yaml

最後還要補上authIdentity:

初步完成receivers內容如下(alert-manager-configuration.yaml):

後面demo會用個人的gamil來做,所以若是沒有啟用兩段驗證的帳號

需要到以下網址:

https://myaccount.google.com/lesssecureapps

講師畫面中有個啟動鈕才對:"Allow less secure apps: ON"

但是我看到的畫面已經不能有相關設置了:

點上述瞭解詳情連結可以看到:

所以後面可能暫時不實際執行,只學著看看怎麼設定

Configuration Email Notification — spec中route部分

再來這個AlertmanagerConfig還尚有Route部分還沒設定好

先填入以下指定到對應的Alert名稱:

然後再來是這個route對應的receiver是誰

所以目前得到:

這個後來發現有問題,看下面

應用上述完成的設定:

#直接執行apply:
kubectl apply -f alert-manager-configuration.yaml
#確認上述建立的物件:
kubectl get alertmanagerconfig -n monitoring

這邊看到:

所以我調整一下跟著講師的version改為v1alpha1看看

所以現在是:

而這邊跟Prometheus設定一樣

alertmanagerconfig元件建立時,Alertmanager要重新reload設定

所以可以看看Alertmanager裡面的log才看看有沒有設置成功

#可以先找到Alertmanager的Pod:
kubectl get pod -n monitoring

然後看到裡面有兩個Container

一個是Alertmanager本身,另一個是重load設定檔專用的Container

#執行查看pod內容,順便看看有甚麼container在裡面:
kubectl describe pod alertmanager-monitoring-kube-prometheus-alertmanager-0 -n monitoring
#找到Pod後就可以查看log,先看alertmanager:
kubectl logs alertmanager-monitoring-kube-prometheus-alertmanager-0 -c alertmanager -n monitoring
#再看config-reloader:
kubectl logs alertmanager-monitoring-kube-prometheus-alertmanager-0 -c config-reloader -n monitoring
alertmanager的log
config-reloader的log

這時候到AlertmanagerWeb查看Status內容:

往下看到Config內容會看到:

route部分:

#我確認我建立的alertmanagerconfig內容:
kubectl describe alertmanagerconfig main-rules-alert-config -n monitoring
有兩個沒錯,有可能

但是看到上面有嘗試要寄email來看

應該第二個"KubenetesPodCrashLooping"也有設置成功才對!

receivers部分:

name是設定檔上的組合字

主要就是預設內容會再加上我們設置的部分!

另外還可以注意到的是namespace的對應:

在Alertmanager的Config內會多一個matchers的對應是namespace的

這樣同時比對以下兩個條件,才會寄送訊息:

這也是當初alert-rule.yaml內會多加labels:

我這邊順便嘗試如果移除alertmanagerconfig元件會怎樣:

過一陣子設定檔內的route,就我們定義的部分就消失了

這邊我另外嘗試不matchersHostHighCpuLoad的部分建立看看

這是複製出來的設定檔,移除HostHighCpuLoad部分
建立

看看KubenetesPodCrashLooping這個alert能不能載入

這時候我才發現:

眼花撩亂...

重建:

成功!

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet