全部產品
Search
文件中心

Container Service for Kubernetes:開源Prometheus監控

更新時間:Jul 16, 2025

Prometheus是一款面向雲原生應用程式的監控工具,本文介紹如何在阿里雲Kubernetes上部署Prometheus。

背景資訊

本文將討論在Kubernetes叢集中如何高效地監控系統組件和資源實體。監控對象可分為以下兩類:

  • 資源監控:涉及節點和應用的資源使用方式。在Kubernetes環境中,這包括節點的資源使用率、叢集的資源使用率及Pod的資源使用率等。

  • 應用監控:應用內部指標的監控,例如即時統計應用的線上人數,並通過連接埠暴露來實現應用業務層級的監控與警示等。

監控對象具體為:

  • 系統組件:包括Kubernetes叢集內建的組件,如API Server、cloud-controller-manager、etcd等。可通過在設定檔中進行設定來實現對這些組件的監控。

  • 靜態資源實體:如節點的資源狀態和核心事件等,其監控可在設定檔中指明。

  • 動態資源實體:例如Deployment、DaemonSet、Pod等,是Kubernetes中抽象的工作負載實體。為了監控這些實體,可以採用Prometheus監控部署方案。

  • 自訂應用:針對需要定製化監控的資料和指標的應用情況,需具體設定以滿足獨特的監控需求,通過連接埠暴露和Prometheus監控方案相結合的方式實現。

步驟一:部署開源Prometheus監控

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  3. Helm頁面,單擊建立,在Chart地區搜尋並選中ack-prometheus-operator,其他設定保持預設,然後單擊下一步

    • 組件預設安裝在monitoring命名空間,並以組件名稱發布應用。

    • 如需自訂應用程式名稱和命名空間,請根據頁面提示設定。

  4. 參數配置頁面中,選擇Chart版本為12.0.0,並設定相應參數,然後單擊確定

    12.0.0版本支援警示配置,您可以通過內建功能設定監控警示條件。

    您根據實際需求自訂以下選擇性參數:

    安裝後,可在Helm頁面的Helm Chart列表中查看組件的安裝狀態。

步驟二:查看Prometheus採集任務

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 服務

  3. 在服務頁面選擇ack-prometheus-operator部署的命名空間(預設為monitoring),單擊ack-prometheus-operator-prometheus操作列下的更新

  4. 在對話方塊中,選擇負載平衡(LoadBalancer)作為服務類型。選擇建立資源,將訪問方式配置為公網訪問計費方式配置為隨用隨付(PayByCLCU),按照頁面提示提交配置的修改。

    關於CLB的計費說明,請參見CLB計費概述
  5. 更新完成後,複製其外部IP地址,然後在瀏覽器中通過IP地址:連接埠號碼(如47.XX.XX.12:9090)訪問Prometheus。

  6. 在Prometheus頁面,選擇功能表列Status > Targets,查看所有採集任務。

    如果所有任務的狀態為UP,表明所有採集任務均已正常運行。

    image

  7. 在功能表列單擊Alerts,查看當前的警示規則。

    Alerts

步驟三:查看Grafana資料彙總

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 服務

  3. 服務頁面選擇ack-prometheus-operator部署的命名空間(預設為monitoring),單擊名稱為ack-prometheus-operator-grafana操作列下的更新

  4. 在對話方塊中,選擇負載平衡(LoadBalancer)作為服務類型。選擇建立資源,將訪問方式配置為公網訪問計費方式配置為隨用隨付(PayByCLCU),按照頁面提示提交配置的修改。

    關於CLB的計費說明,請參見CLB計費概述
  5. 更新完成後,複製其外部IP地址,然後在瀏覽器中通過IP地址:連接埠號碼(連接埠號碼預設為80,如47.XX.XX.12:80)訪問Grafana,按照頁面提示查看大盤。

    Dashboard

警示配置

ack-prometheus-operator支援DingTalk警示和郵件警示。配置入口如下。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  3. 單擊建立,定位ack-prometheus-operator,按照頁面提示進入下一步,在參數配置頁面選擇Chart 版本後,在參數地區參見下文進行配置。

    如果您已經安裝了ack-prometheus-operator,也可以在Helm Chart列表單擊組件名稱,然後單擊參數配置進行配置。流程類似。

配置DingTalk警示

  1. 在設定檔中找到dingtalk欄位,將enabled設定為 true

  2. token欄位中填入DingTalk的Webhook地址。

    擷取Webhook地址請參見使用DingTalk機器人:使用DingTalk機器人實現Kubernetes監控警示
  3. alertmanagerconfig欄位下的receiver配置中,填寫您在receivers中定義的DingTalk警示名稱(預設為webhook)。

    多個DingTalk機器人配置樣本

    例如您有兩個DingTalk機器人,操作樣本如下:

    1. 替換DingTalk的token配置

      在DingTalk機器人中,將Webhook地址分別替換為dingtalk1和dingtalk2的地址,即使用Webhook地址替換下圖中的https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxx

      token配置

    2. 修改receivers

      alertmanagerconfig欄位中找到receiver,填寫您receivers中對應的DingTalk警示名稱。本樣本中分別為webhook1webhook2

    3. 修改URL的值

      將URL中的值替換成實際的dingtalk的值,本例中為dingtalk1dingtalk2

      webhook配置

    說明

    如需添加多個DingTalk機器人,請將前面的Webhook依次遞增。

配置郵件警示

  1. 在關於郵件資訊的紅色選框內,補充完整的郵件資訊。

  2. 在設定檔的alertmanager部分中找到config欄位,定位到receiver並填寫您在receivers中定義的郵件警示名稱(預設是mail)。

郵件警示

設定警示接收模板

您可以在alertmanagertemplateFiles中自訂警示模板。樣本如下。模板設定

Prometheus掛載自訂ConfigMap

以下展示如何在 Prometheus 中通過名為 special-config 的 ConfigMap 掛載設定檔,並在 Pod 啟動時將其指定為 --config.file 參數。

  1. 建立ConfigMap。

    展開查看ConfigMap樣本

    1743645540037_107960FD-B9BA-4aa1-8001-7A97ECCE8A65

  2. 掛載ConfigMap。

    參數配置頁面,在configmaps欄位中添加以下內容,將指定的 ConfigMap 掛載到 Prometheus Pod 的 /etc/prometheus/configmaps/ 路徑下。

    更新配置

    prometheusconfigmaps欄位配置樣本如下。

    39d5cfa9988ab47202e9a160bb890c17

Grafana配置

將Dashboard檔案掛載到Grafana

如需將Dashboard檔案以ConfigMap的方式掛載到Grafana Pod中,您可以在參數配置嚮導中,定位extraConfigmapMounts欄位。dashboard外掛配置需確保:

  • Dashboard以ConfigMap的形式存在於叢集中,且ConfigMap的Labels與其他ConfigMap格式保持一致。

  • 在Grafana的extraConfigmapMounts欄位中填入Dashboard的ConfigMap資訊和掛載資訊。

    • mountPath:配置為/tmp/dashboards/

    • ConfigMap:自訂的ConfigMap的名稱。

    • name:Dashboard的JSON名稱。

實現Dashboard持久化

如需Dashboard匯出到本地,您可將需要儲存的Dashboard匯出為JSON檔案,將其儲存到本地。更多資訊,請參見Grafana匯出

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  3. 定位ack-prometheus-operator,單擊右側的更新。在grafana欄位的persistence選項中,按照下圖完成配置。

    grafana的持久化操作

相關操作

卸載開源Prometheus

請根據Helm Chart版本參見以下流程卸載開源Prometheus,以避免資源殘留,繼而產生非預期行為。需要手動清理的資源套件括相關的Helm Release、命名空間、CRD和kubelet Service資源。

卸載ack-prometheus-operator但無法自動刪除關聯的kubelet Service是社區已知問題,需參見下文手動卸載。問題詳細描述,請參見#1523

Chart v12.0.0

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列選擇不同介面,完成對應操作。

    • 卸載Helm Release:選擇應用 > Helm,在Helm Release列表的操作列,定位到ack-prometheus-operator對應的刪除,按照頁面提示完成刪除並清除發布記錄。

    • 刪除命名空間:單擊命名空間與配額,在命名空間列表,定位並勾選monitoring,按照頁面提示完成刪除。

    • 刪除CRD:選擇工作負載 > 自訂資源,單擊資源定義(CustomResourceDefinition)頁簽,按照頁面提示定位並刪除monitoring.coreos.comAPI組下的所有CRD資源,包括:

      • AlertmanagerConfig

      • Alertmanager

      • PodMonitor

      • Probe

      • Prometheus

      • PrometheusRule

      • ServiceMonitor

      • ThanosRuler

    • 刪除kubelet Service:選擇網路 > 服務,按照頁面提示,在kube-system命名空間下定位並刪除ack-prometheus-operator-kubelet。

kubectl

  • 卸載Helm release

    helm uninstall ack-prometheus-operator -n monitoring
  • 刪除命名空間

    kubectl delete namespace monitoring
  • 刪除CRD

    kubectl delete crd alertmanagerconfigs.monitoring.coreos.com
    kubectl delete crd alertmanagers.monitoring.coreos.com
    kubectl delete crd podmonitors.monitoring.coreos.com
    kubectl delete crd probes.monitoring.coreos.com
    kubectl delete crd prometheuses.monitoring.coreos.com
    kubectl delete crd prometheusrules.monitoring.coreos.com
    kubectl delete crd servicemonitors.monitoring.coreos.com
    kubectl delete crd thanosrulers.monitoring.coreos.com
  • 刪除kubelet Service

    kubectl delete service ack-prometheus-operator-kubelet -n kube-system

Chart v65.1.1

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列選擇不同介面,完成對應操作。

    • 卸載Helm Release:選擇應用 > Helm,在Helm Release列表的操作列,定位ack-prometheus-operator對應的刪除,按照頁面提示完成刪除並清除發布記錄。

    • 刪除命名空間:單擊命名空間與配額,在命名空間列表,定位並勾選monitoring,按照頁面提示完成刪除。

    • 刪除CRD:選擇工作負載 > 自訂資源,單擊資源定義(CustomResourceDefinition)頁簽,按照頁面提示定位並刪除monitoring.coreos.comAPI組下的所有CRD資源,包括:

      • AlertmanagerConfig

      • Alertmanager

      • PodMonitor

      • Probe

      • PrometheusAgent

      • Prometheus

      • PrometheusRule

      • ScrapeConfig

      • ServiceMonitor

      • ThanosRuler

    • 刪除kubelet Service:選擇網路 > 服務,按照頁面提示,在kube-system命名空間下定位並刪除ack-prometheus-operator-kubelet。

kubectl

  • 卸載Helm release

    helm uninstall ack-prometheus-operator -n monitoring
  • 刪除命名空間

    kubectl delete namespace monitoring
  • 刪除CRD

    kubectl delete crd alertmanagerconfigs.monitoring.coreos.com
    kubectl delete crd alertmanagers.monitoring.coreos.com
    kubectl delete crd podmonitors.monitoring.coreos.com
    kubectl delete crd probes.monitoring.coreos.com
    kubectl delete crd prometheusagents.monitoring.coreos.com
    kubectl delete crd prometheuses.monitoring.coreos.com
    kubectl delete crd prometheusrules.monitoring.coreos.com
    kubectl delete crd scrapeconfigs.monitoring.coreos.com
    kubectl delete crd servicemonitors.monitoring.coreos.com
    kubectl delete crd thanosrulers.monitoring.coreos.com
  • 刪除kubelet Service

    kubectl delete service ack-prometheus-operator-kubelet -n kube-system

設定警示壓制

您可通過配置靜默規則(Silence Rule) 特定警示進行壓制。當警示與規則中的條件匹配時,對應警示不會發送通知或啟用,直至壓制時間結束或壓制規則被手動刪除。

  1. 執行以下命令,將 Alertmanager 暴露到本地 9093 連接埠,並允許外部存取。

    kubectl --address 0.0.0.0 port-forward svc/alertmanager-operated 9093 -n monitoring
  2. 將EIP綁定至ECS執行個體,然後在瀏覽器中使用<EIP>:9093進行訪問。

    訪問測試時,請確保ECS執行個體安全性群組已允許存取您的本機IP和9093連接埠。具體操作,請參見添加安全性群組規則
  3. 單擊Silence,按照頁面提示設定警示壓制。

    image

常見問題

DingTalk配置後,沒有收到警示

  1. 擷取DingTalk的webhook地址。請參見事件監控

  2. 找到dingtalk欄位,將enabled設定為true,將Token欄位填入DingTalk的webhook地址。請參見警示配置中的DingTalk警示配置

部署prometheus-operator時報錯

報錯資訊如下

Can't install release with errors: rpc error: code = Unknown desc = object is being deleted: customresourcedefinitions.apiextensions.k8s.io "xxxxxxxx.monitoring.coreos.com" already exists

在卸載prometheus-operator的時候沒有將上一次部署的自訂資源(CRD)及時清理掉,執行如下命令,刪除CRD並重新部署。

kubectl delete crd prometheuses.monitoring.coreos.com
kubectl delete crd prometheusrules.monitoring.coreos.com
kubectl delete crd servicemonitors.monitoring.coreos.com
kubectl delete crd alertmanagers.monitoring.coreos.com

郵件警示沒有生效

郵件警示沒有生效,有可能是因為smtp_auth_password填寫的是您的登入密碼,而非授權碼。另外SMTP的伺服器位址需要加連接埠號碼。

單擊YAML更新時,出現當前叢集暫時無法訪問,請稍後重試或提交工單反饋

此問題原因是tiller的設定檔過大,導致的叢集無法訪問,您可以先將部分注釋刪除,再將設定檔以ConfigMap形式,掛載到pod中,目前prometheus-operator只支援prometheus和alertmanager pod的掛載,詳情請參見Prometheus掛載自訂ConfigMap中的方法二。

部署prometheus-operator後,如何開啟其中的功能

當部署好prometheus-operator後,如果要開啟部分功能,在叢集資訊頁面,選擇應用 > Helm,在ack-prometheus-operator右側,單擊更新,找到對應的開關,進行相應的設定,然後單擊確定開啟您想要的功能。

TSDB和阿里雲雲端硬碟如何選擇。

TSDB支援的地區比較少,而阿里雲雲端硬碟是全域支援,資料回收策略請參見以下配置。資料回收策略

Grafana Dashboard顯示有問題

在叢集資訊頁面選擇應用 > Helm,在ack-prometheus-operator右側,單擊更新,查看clusterVersion的值是否為正確的叢集版本。Kubernetes叢集是1.16以前的版本,這裡請填寫1.14.8-aliyun.1,1.16及以後的版本,請填寫1.16.6-aliyun.1。

刪除ack-prometheus的命名空間後,重新安裝ack-prometheus失敗

只刪除ack-prometheus的命名空間,會導致資源刪除後有殘留配置,影響再次安裝。您可以執行以下操作,刪除殘餘配置。

  1. 刪除RBAC許可權。

    1. 刪除ClusterRole。

      kubectl delete ClusterRole ack-prometheus-operator-grafana-clusterrole
      kubectl delete ClusterRole ack-prometheus-operator-kube-state-metrics
      kubectl delete ClusterRole psp-ack-prometheus-operator-kube-state-metrics
      kubectl delete ClusterRole psp-ack-prometheus-operator-prometheus-node-exporter
      kubectl delete ClusterRole ack-prometheus-operator-operator
      kubectl delete ClusterRole ack-prometheus-operator-operator-psp
      kubectl delete ClusterRole ack-prometheus-operator-prometheus
      kubectl delete ClusterRole ack-prometheus-operator-prometheus-psp
    2. 刪除ClusterRoleBinding。

      kubectl delete ClusterRoleBinding ack-prometheus-operator-grafana-clusterrolebinding
      kubectl delete ClusterRoleBinding ack-prometheus-operator-kube-state-metrics
      kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-kube-state-metrics
      kubectl delete ClusterRoleBinding psp-ack-prometheus-operator-prometheus-node-exporter
      kubectl delete ClusterRoleBinding ack-prometheus-operator-operator
      kubectl delete ClusterRoleBinding ack-prometheus-operator-operator-psp
      kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus
      kubectl delete ClusterRoleBinding ack-prometheus-operator-prometheus-psp
  2. 刪除CRD。

    kubectl delete crd alertmanagerconfigs.monitoring.coreos.com
    kubectl delete crd alertmanagers.monitoring.coreos.com
    kubectl delete crd podmonitors.monitoring.coreos.com
    kubectl delete crd probes.monitoring.coreos.com
    kubectl delete crd prometheuses.monitoring.coreos.com
    kubectl delete crd prometheusrules.monitoring.coreos.com
    kubectl delete crd servicemonitors.monitoring.coreos.com
    kubectl delete crd thanosrulers.monitoring.coreos.com