是時候扔掉Prometheus了,VictoriaMetrics全家桶入門與K8S部署

StarsL發表於2024-11-03

架構

在這裡插入圖片描述

部署檔案

專案倉庫: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
  1. vmagent是採集元件,負責採集指標;採集後遠端寫入VictoriaMetrics時序資料庫。
  2. vmalert讀取告警規則後,從VM查詢資料進行評估,後傳送給alertmanager進行告警;記錄規則也會遠端寫入VM。
  3. vmagent + vmalert + VictoriaMetrics 組成了完整的Prometheus功能 + 遠端儲存。
  4. kube-state-metrics和node-exporter分別是採集K8S和主機指標的匯出器。
  5. 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檔案注意事項:

    1. -retentionPeriod=30d
      • 資料儲存時長
    2. -httpAuth.username=ops
      • 資料庫賬號設定
    3. -httpAuth.password=wEFHr41Pa
      • 資料庫密碼設定
    4. resources
      • K8S資源限制
    5. storageClassName: local-path
      • PV,PVC配置(當前使用本地主機儲存,使用其它型別外部儲存的請根據實際情況調整)
      • 根據實際情況修改使用的storageClassName名稱
    6. path: /k3s/data/vm-single
      • 本地主機儲存的本地路徑,需提前建立目錄
    7. nodeSelectorTerms
      • 根據實際情況修改本地主機儲存的節點名
    8. 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檔案注意事項:

    1. ConfigMap

      • 相容Prometheus的配置:採集間隔,JOB的配置(已經配置好了監控K8S和Node的支援自動發現的JOB)
      • external_labels是Prometheus的外部系統標籤,用於多個Prometheus接入同一個VictoriaMetrics時,區分不同的Prometheus。每個vmagent都必須配置,key是origin_prometheus,value是該vmagent的名稱。
    2. remoteWrite.url

      • 遠端寫url,注意修改了vm儲存的賬號密碼這裡要同步修改。
      • 如果服務端的vmagent和VM部署在同一個K8S下,url使用service地址,無需修改。
    3. resources

      • K8S資源限制

vmalert

  • 讀取告警規則,並查詢VM時序資料庫,觸發告警則推送到alertmanager。

  • 查詢記錄規則,並寫入VM時序資料庫。

  • kubectl apply -f 2.vmalert.yaml

  • YAML檔案注意事項:

    1. ConfigMap
      • 相容Prometheus的rule配置:各類告警規則,記錄規則(已經配置好了監控K8S和Node的告警規則)
      • rule規則中:alert是告警的名稱,annotations.at是告警時@的人,annotations.description是告警的內容.
    2. -datasource.url
      • 查詢的VM時序資料庫地址
    3. -notifier.url
      • 通知的alertmanager地址
    4. -remoteWrite.url
      • 寫入的VM時序資料庫地址
    5. resources
      • K8S資源限制

alertmanager

  • 接收觸發的告警,並根據條件路由到不同的通知服務。
  • kubectl apply -f 3.alertmanager.yaml
  • YAML檔案注意事項:
    1. ConfigMap
      • 標準的alertmanager配置,注意webhook地址要配置alert-webhook的url。
      • alert-webhook的url的格式:
      • http://alert-webhook.monit/node/ddkey=釘釘群機器人ID
      • http://alert-webhook.monit/node/wckey=企微群機器人ID
    2. resources
      • K8S資源限制

alert-webhook

  • 通知服務,接收alertmanager推送的告警資訊,再推送到企微或者釘釘。
  • 推送的內容為告警規則的:alertnamedescription
  • kubectl apply -f 4.alert-webhook.yaml
  • YAML檔案注意事項:
    1. ALERTMANAGER_URL
      • alertmanager的外部訪問URL,用於收到告警後可以點選進入告警遮蔽操作頁面。
    2. DEFAULT_AT
      • 當告警規則沒有配置@的人的時候,使用的預設@的人。

grafana

  • 展示告警資料的看板,請配置VM作為資料來源,並匯入K8S和Node的看板。
  • kubectl apply -f 5.grafana.yaml
  • 看板:https://grafana.com/orgs/starsliao/dashboards
  • YAML檔案注意事項:
    1. GF_SECURITY_ADMIN_USER
      • 登入賬號設定
    2. GF_SECURITY_ADMIN_PASSWORD
      • 等了密碼設定
    3. resources
      • K8S資源限制
    4. storageClassName: local-path
      • PV,PVC配置(當前使用本地主機儲存,使用其它型別外部儲存的請根據實際情況調整)
      • 根據實際情況修改使用的storageClassName名稱
    5. path: /k3s/data/grafana
      • 本地主機儲存的本地路徑,需提前建立目錄
    6. nodeSelectorTerms
      • 根據實際情況修改本地主機儲存的節點名
    7. storage
      • 儲存大小

部署(客戶端)

  • K8S部署
    cd monit/client && kubectl apply -f .
    

部署(客戶端)詳細說明

vmagent

  • 負責對配置或者自動發現的JOB進行pull方式採集,也支援接收push進來的指標。

  • kubectl apply -f 0.vmagent.yaml

  • YAML檔案注意事項:

    1. ConfigMap
      • 相容Prometheus的配置:採集間隔,JOB配置
      • external_labels是Prometheus的外部系統標籤,用於多個Prometheus接入同一個VictoriaMetrics時,區分不同的Prometheus。每個vmagent都必須配置,key是origin_prometheus,value是該vmagent的名稱。
    2. remoteWrite.url
      • 遠端寫url,注意修改了VM儲存的賬號密碼這裡要同步修改。
      • 這是客戶端連線VM的url,注意網路通訊正常。
    3. 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
    

相關文章