Promethues是可以單機(jī)搭建的,參考prometheus入門[1]
本文是就Promethues+Grafana在K8s環(huán)境下的搭建及配置
Prometheus度量指標(biāo)監(jiān)控平臺簡介
-
啟動minikube
minikube start
-
安裝helm
使用Helm Chart 安裝 Prometheus Operator:
helm install prometheus-operator stable/prometheus-operator -n monitoring
報錯:
WARNING:?This?chart?is?deprecated
Error:?INSTALLATION?FAILED:?failed?to?install?CRD?crds/crd-alertmanager.yaml:?resource?mapping?not?found?for?name:?"alertmanagers.monitoring.coreos.com"?namespace:?""?from?"":?no?matches?for?kind?"CustomResourceDefinition"?in?version?"apiextensions.k8s.io/v1beta1"
ensure?CRDs?are?installed?first
根據(jù) Kubernetes和微服務(wù)監(jiān)控體系[2](搜索"降低我們的版本")
降低minikube版本: minikube start --kubernetes-version=v1.20.3
(這步可能會卡著不動等半天,耐心等待即可~)


解決該問題后繼續(xù):
kubectl create ns monitoring
helm install prometheus-operator stable/prometheus-operator -n monitoring


要等一會兒,全部pod才能都啟動起來~

Promethues-Operator基本功能展示
訪問prometheus內(nèi)置瀏覽器
kubectl port-forward -n monitoring prometheus-prometheus-operator-prometheus-0 9090
kubectl port-forward 什么意思?
kubectl port-forward
是一個 Kubernetes 命令,用于將本地端口與 Kubernetes Pod 或 Service 的端口之間建立臨時的網(wǎng)絡(luò)轉(zhuǎn)發(fā)連接。
當(dāng)你在本地開發(fā)環(huán)境中需要直接訪問運(yùn)行在 Kubernetes 集群中的 Pod 或 Service 時,kubectl port-forward
命令可以幫助你在本地主機(jī)和 Kubernetes 集群之間建立一個網(wǎng)絡(luò)通道。
使用 kubectl port-forward
命令時,你需要指定要轉(zhuǎn)發(fā)的資源類型和名稱,并指定本地端口和遠(yuǎn)程端口。例如,以下命令將本地的 8080 端口與名為 "my-pod" 的 Pod 的 80 端口進(jìn)行轉(zhuǎn)發(fā):
kubectl?port-forward?my-pod?8080:80
這將在本地主機(jī)的 8080 端口上啟動一個轉(zhuǎn)發(fā)服務(wù),將所有發(fā)送到該端口的請求轉(zhuǎn)發(fā)到運(yùn)行在 "my-pod" Pod 中的 80 端口。你可以使用本地瀏覽器或工具訪問 localhost:8080
來與 Pod 進(jìn)行交互。
類似地,你也可以使用 kubectl port-forward
命令轉(zhuǎn)發(fā)到 Service 的端口。例如:
kubectl?port-forward?service/my-service?8080:80
這將將本地的 8080 端口與名為 "my-service" 的 Service 的 80 端口進(jìn)行轉(zhuǎn)發(fā)。
kubectl port-forward
命令對于在本地開發(fā)和調(diào)試過程中與 Kubernetes 集群中的資源進(jìn)行交互非常有用。它可以方便地將遠(yuǎn)程服務(wù)映射到本地主機(jī),以便你可以直接訪問和測試它們。

訪問 http://localhost:9090/

prometheus-operator 已經(jīng)幫我們把相關(guān)的監(jiān)控項配置好了

up指標(biāo)

node_load1指標(biāo)
No datapoints found.
, issue[3]

但好像沒干啥就好了..

查詢對promethues web總的成功請求數(shù)

查詢對promethues metrics端點的成功請求率

告警信息
http://localhost:9090/alerts

配置信息Configuration

告警(alert)和聚合(record)規(guī)則Rules

監(jiān)控目標(biāo)Targets

訪問Alertmanger UI
kubectl port-forward -n monitoring alertmanager-prometheus-operator-alertmanager-0 9093

告警信息

狀態(tài)和配置

訪問Grafana UI

http://localhost:3000/

user: admin
pass: prom-operator


Nodes節(jié)點監(jiān)控
在上圖搜索框輸入"node"

K8s/Compute Resources/Cluster監(jiān)控


K8s/Compute Resources/Pod監(jiān)控

定制Alertmanager郵件通知
安裝FakeSMTP
git?clone?https://github.com/Nilhcem/FakeSMTP.git
cd?FakeSMTP
mvn?package
java?-jar?target/fakeSMTP-2.0-SNAPSHOT.jar?-p?2525

現(xiàn)在需要改為 java -jar target/fakeSMTP-2.1-SNAPSHOT.jar -p 2525

點擊 啟動服務(wù)器

Alertmanager缺省配置(Secret)
kubectl get secret -n monitoring alertmanager-prometheus-operator-alertmanager -o go-template='左括號 左括號 index .data "alertmanager.yaml" 右括號 右括號' | base64 --decode
(把漢字替換為對應(yīng)符號,不這樣hexo會解析出錯)

該命令用于從 Kubernetes 集群中的指定命名空間(-n monitoring
)獲取名為 alertmanager-prometheus-operator-alertmanager
的 Secret 對象,并提取其中名為 alertmanager.yaml
的數(shù)據(jù)字段的值。然后使用 base64
命令對該值進(jìn)行解碼,以便將其轉(zhuǎn)換回原始的 YAML 格式。
換句話說,這個命令的目的是獲取監(jiān)控系統(tǒng)中 Alertmanager 的配置文件,并將其解碼為可讀的 YAML 格式,以便查看其中的配置詳細(xì)信息。
因為這個配置是secret形式存儲的

Opaque類型,所以最后要用 base64 --decode 轉(zhuǎn)為明文
其實可以通過下面的UI直觀查看
Alertmanager缺省配置(UI)

Alertmanager config更新
參考 https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml#L133
-
增加 郵件smtp等配置 -
增加靜默配置(發(fā)送給null) -
增加抑制配置(inhibit)
Prometheus監(jiān)控系統(tǒng)中,"靜默配置"(inhibit configuration)用于在發(fā)生警報時控制通知的行為。通過靜默配置,可以防止某些特定警報觸發(fā)通知,以避免不必要的干擾或重復(fù)的通知。
靜默配置定義了在特定條件下阻止警報通知的規(guī)則。這些規(guī)則通常基于警報標(biāo)簽和標(biāo)簽值的匹配。當(dāng)觸發(fā)一個警報時,系統(tǒng)將根據(jù)靜默配置中的規(guī)則檢查是否有匹配的規(guī)則存在。如果有匹配的規(guī)則,那么該警報將被靜默,即不會觸發(fā)通知。
通過使用靜默配置,可以靈活地控制在某些情況下抑制警報通知,例如:
-
阻止在維護(hù)窗口期間觸發(fā)通知。 -
抑制由特定部署環(huán)境引起的虛假警報。 -
防止多個相關(guān)的警報同時觸發(fā)大量通知。
在Prometheus中,靜默配置可以通過修改Alertmanager的配置文件(alertmanager.yaml
)來實現(xiàn),具體的配置語法和規(guī)則定義可以參考Prometheus的官方文檔。
在Prometheus中,將通知發(fā)送給null
屬于靜默配置的一種。當(dāng)將靜默規(guī)則配置為將通知發(fā)送給null
時,實際上是將該警報完全靜默化,意味著不會有任何通知發(fā)送。
這種配置適用于那些不希望觸發(fā)任何通知的警報。通常,這可能是對特定類型的警報或某些特定條件下的警報進(jìn)行靜默化的一種方式。通過將通知發(fā)送給null
,可以確保該警報不會引起任何干擾或通知負(fù)擔(dān)。
靜默規(guī)則配置示例:
inhibit_rules:
??-?source_match:
??????severity:?critical
????target_match:
??????severity:?warning
????equal:?['alertname',?'service']
????target_receivers:
??????-?'null'
上述示例中的靜默規(guī)則指定了在警報的嚴(yán)重性為critical
,并且警報名稱和服務(wù)名稱相同時,將通知發(fā)送給null
,即靜默該警報。
更新后的配置在 https://github.com/spring2go/k8s-msa-in-action/blob/master/ch08/07/values_alertmanager.yml

修改ip為本機(jī)地址
更新prometheus-operator release
helm upgrade prometheus-operator stable/prometheus-operator --values=shuang_alertmanager.yml -n monitoring
helm history prometheus-operator -n monitoring

如果有問題,可以看pod日志進(jìn)行排查~
kubectl logs -n monitoring alertmanager-prometheus-operator-alertmanager-0
校驗配置更新成功
打開 http://localhost:9093/#/status, 通過UI校驗看是否修改成功~

啟動FakeSMTP接收告警
此時已經(jīng)收到了郵件

其中 etcd這項告警 message = etcd cluster "kube-etcd": members are down (1).
是因為用minikube,etcd節(jié)點本來就不足~

.+Overcommit
本來應(yīng)該要收到告警,但通過配置抑制掉了
參考自
Kubernetes和微服務(wù)監(jiān)控體系[4]
Kubernetes和微服務(wù)監(jiān)控體系[5]
更多參考:
從零用Helm部署prometheus,并配置釘釘告警[6]
helm 安裝配置 prom-operator[7]
參考資料
prometheus入門: https://dashen.tech/2020/09/14/prometheus%E5%85%A5%E9%97%A8/
[2]Kubernetes和微服務(wù)監(jiān)控體系: https://blog.csdn.net/weixin_35821291/article/details/122877311
[3]issue: https://github.com/prometheus/prometheus/issues/1022
[4]Kubernetes和微服務(wù)監(jiān)控體系: https://www.bilibili.com/video/BV1Qi4y1b79r/?p=8
[5]Kubernetes和微服務(wù)監(jiān)控體系: https://blog.csdn.net/weixin_35821291/article/details/122877311
[6]從零用Helm部署prometheus,并配置釘釘告警: https://blog.csdn.net/lingjinghe/article/details/127646375
[7]helm 安裝配置 prom-operator: https://blog.csdn.net/zhangxueleishamo/article/details/130339221文章來源:http://www.zghlxwxcb.cn/news/detail-648100.html
本文由 mdnice 多平臺發(fā)布文章來源地址http://www.zghlxwxcb.cn/news/detail-648100.html
到了這里,關(guān)于K8s環(huán)境下監(jiān)控告警平臺搭建及配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!