架構
部署檔案
專案倉庫:https://github.com/starsliao/VictoriaMetrics
- 本次將會部署以下元件:
cd monit/master && kubectl apply -f .
master
├── 0.vm-single.yaml
├── 1.kube-state-metrics_v2.12.0.yaml
├── 1.node-exporter.yaml
├── 1.vmagent.yaml
├── 2.vmalert.yaml
├── 3.alertmanager.yaml
├── 4.alert-webhook.yaml
└── 5.grafana.yaml
- vmagent是採集元件,負責採集指標;採集後遠端寫入VictoriaMetrics時序資料庫。
- vmalert讀取告警規則後,從VM查詢資料進行評估,後傳送給alertmanager進行告警;記錄規則也會遠端寫入VM。
- vmagent + vmalert + VictoriaMetrics 組成了完整的Prometheus功能 + 遠端儲存。
- kube-state-metrics和node-exporter分別是採集K8S和主機指標的匯出器。
- alert-webhook是Flask寫的一個推送訊息的元件,可以把alertmanager的告警根據路由規則推送給企微、釘釘、飛書。
快速安裝(服務端)
git clone https://github.com/starsliao/VictoriaMetrics.git
cd VictoriaMetrics
kubectl apply -f .
- 部署yaml檔案後,以上所有元件將安裝到K8S的monit名稱空間,並接入各個元件、K8S和節點的監控。
- 你只需要登陸grafana配置資料來源並匯入看板介面實現K8S與節點的監控。
- 安裝後以上所有元件預設接入到監控與自動發現,並且根據告警規則進行告警推送。
- 以下是各yaml檔案的詳細介紹描述,讓您不僅僅是安裝好VictoriaMetrics全家桶,還能明明白白的瞭解每個元件的關聯、配置與作用。
部署(服務端)詳細說明
VictoriaMetrics
-
時序資料庫,儲存所有的指標資訊;可水平擴容的本地全量持久化儲存方案。
-
對於低於每秒一百萬個資料點的攝取率,官方建議使用單節點版本而不是叢集版本。單節點版本可根據 CPU、記憶體和可用儲存空間的數量進行擴充套件。單節點版本比叢集版本更容易配置和操作,所以在使用叢集版本之前要三思而後行。
-
kubectl apply -f 0.vm-single.yaml
-
YAML檔案注意事項:
-retentionPeriod=30d
- 資料儲存時長
-httpAuth.username=ops
- 資料庫賬號設定
-httpAuth.password=wEFHr41Pa
- 資料庫密碼設定
resources
- K8S資源限制
storageClassName: local-path
- PV,PVC配置(當前使用本地主機儲存,使用其它型別外部儲存的請根據實際情況調整)
- 根據實際情況修改使用的storageClassName名稱
path: /k3s/data/vm-single
- 本地主機儲存的本地路徑,需提前建立目錄
nodeSelectorTerms
- 根據實際情況修改本地主機儲存的節點名
storage
- 儲存大小
node-exporter
- 採集Linux元件的指標。
- vmagent已經配置JOB自動發現資源。
kubectl apply -f 1.node-exporter.yaml
kube-state-metrics
- 採集K8S的指標。
- vmagent已經配置JOB自動發現資源。
kubectl apply -f 1.kube-state-metrics_v2.12.0.yaml
vmagent
-
負責對配置或者自動發現的JOB進行
pull
方式採集,也支援接收push
進來的指標。 -
kubectl apply -f 1.vmagent.yaml
-
YAML檔案注意事項:
-
ConfigMap
- 相容Prometheus的配置:採集間隔,JOB的配置(已經配置好了監控K8S和Node的支援自動發現的JOB)
external_labels
是Prometheus的外部系統標籤,用於多個Prometheus接入同一個VictoriaMetrics時,區分不同的Prometheus。每個vmagent都必須配置,key是origin_prometheus
,value是該vmagent的名稱。
-
remoteWrite.url
- 遠端寫url,注意修改了vm儲存的賬號密碼這裡要同步修改。
- 如果服務端的vmagent和VM部署在同一個K8S下,url使用service地址,無需修改。
-
resources
- K8S資源限制
-
vmalert
-
讀取告警規則,並查詢VM時序資料庫,觸發告警則推送到alertmanager。
-
查詢記錄規則,並寫入VM時序資料庫。
-
kubectl apply -f 2.vmalert.yaml
-
YAML檔案注意事項:
ConfigMap
- 相容Prometheus的rule配置:各類告警規則,記錄規則(已經配置好了監控K8S和Node的告警規則)
- rule規則中:
alert
是告警的名稱,annotations.at
是告警時@的人,annotations.description
是告警的內容.
-datasource.url
- 查詢的VM時序資料庫地址
-notifier.url
- 通知的alertmanager地址
-remoteWrite.url
- 寫入的VM時序資料庫地址
resources
- K8S資源限制
alertmanager
- 接收觸發的告警,並根據條件路由到不同的通知服務。
kubectl apply -f 3.alertmanager.yaml
- YAML檔案注意事項:
ConfigMap
- 標準的alertmanager配置,注意webhook地址要配置alert-webhook的url。
- alert-webhook的url的格式:
- http://alert-webhook.monit/node/ddkey=釘釘群機器人ID
- http://alert-webhook.monit/node/wckey=企微群機器人ID
resources
- K8S資源限制
alert-webhook
- 通知服務,接收alertmanager推送的告警資訊,再推送到企微或者釘釘。
- 推送的內容為告警規則的:
alertname
和description
。 kubectl apply -f 4.alert-webhook.yaml
- YAML檔案注意事項:
ALERTMANAGER_URL
- alertmanager的外部訪問URL,用於收到告警後可以點選進入告警遮蔽操作頁面。
DEFAULT_AT
- 當告警規則沒有配置@的人的時候,使用的預設@的人。
grafana
- 展示告警資料的看板,請配置VM作為資料來源,並匯入K8S和Node的看板。
kubectl apply -f 5.grafana.yaml
- 看板:https://grafana.com/orgs/starsliao/dashboards
- YAML檔案注意事項:
GF_SECURITY_ADMIN_USER
- 登入賬號設定
GF_SECURITY_ADMIN_PASSWORD
- 等了密碼設定
resources
- K8S資源限制
storageClassName: local-path
- PV,PVC配置(當前使用本地主機儲存,使用其它型別外部儲存的請根據實際情況調整)
- 根據實際情況修改使用的storageClassName名稱
path: /k3s/data/grafana
- 本地主機儲存的本地路徑,需提前建立目錄
nodeSelectorTerms
- 根據實際情況修改本地主機儲存的節點名
storage
- 儲存大小
部署(客戶端)
- K8S部署
cd monit/client && kubectl apply -f .
部署(客戶端)詳細說明
vmagent
-
負責對配置或者自動發現的JOB進行
pull
方式採集,也支援接收push
進來的指標。 -
kubectl apply -f 0.vmagent.yaml
-
YAML檔案注意事項:
ConfigMap
- 相容Prometheus的配置:採集間隔,JOB配置
external_labels
是Prometheus的外部系統標籤,用於多個Prometheus接入同一個VictoriaMetrics時,區分不同的Prometheus。每個vmagent都必須配置,key是origin_prometheus
,value是該vmagent的名稱。
remoteWrite.url
- 遠端寫url,注意修改了VM儲存的賬號密碼這裡要同步修改。
- 這是客戶端連線VM的url,注意網路通訊正常。
resources
- K8S資源限制
node-exporter
- 採集Linux元件的指標。
- vmagent已經配置JOB自動發現資源。
kubectl apply -f 1.node-exporter.yaml
kube-state-metrics
- 採集K8S的指標。
- vmagent已經配置JOB自動發現資源。
kubectl apply -f 1.kube-state-metrics_v2.12.0.yaml
客戶端主動push指標到vmagent
-
針對vmagent無法請求到客戶端的情況,客戶端可以透過curl獲取自身指標,然後推送到vmagent。
# URI中傳入3個標籤:job,instance,origin_prometheus # 命令寫入到crontab,每分鐘執行一次。 curl -s http://localhost:9100/metrics | curl --data-binary @- http://10.0.0.26:8429/api/v1/import/prometheus/metrics/job/node-exporter/instance/10.0.0.26:9100/origin_prometheus/node-push # 除錯 while true; do curl -s http://localhost:9100/metrics | curl --data-binary @- http://10.0.0.26:8429/api/v1/import/prometheus/metrics/job/node-exporter/instance/10.0.0.26:9100/origin_prometheus/node-push; sleep 15; done