全部產品
Search
文件中心

Container Service for Kubernetes:基於阿里雲Prometheus監控配置監控警示並查看效能指標

更新時間:Oct 25, 2024

您可以在ACK叢集中快速啟用阿里雲Prometheus,以即時監控叢集和容器的健康情況,並查看可視化的Grafana監控資料大盤。您還可按需配置連絡人接收監控警示、配置Prometheus抓取自訂的監控指標等。

阿里雲Prometheus監控介紹

阿里雲Prometheus監控全面對接開源Prometheus生態,支援類型豐富的組件監控,提供多種開箱即用的預置監控大盤,且提供全面託管的Prometheus服務。阿里雲Prometheus服務提供的容器監控能力分為基礎版和Pro版。

  • 基礎版:為非託管採集Agent(預設單副本佔用叢集資源為3C4G),提供基礎指標,支援資料存放區時間長度為7天。

  • Pro版:為託管採集Agent(不佔用叢集資源),提供基礎與自訂指標,預設支援資料存放區時間長度為90天 。

藉助阿里雲Prometheus監控,您無需自行搭建Prometheus監控系統,無需關心底層資料存放區、資料展示、系統營運等問題。關於阿里雲Prometheus監控的更多資訊,請參見什麼是Prometheus監控

相關計費

  • 阿里雲Prometheus基礎指標費用

    啟用阿里雲Prometheus監控功能後,ACK將採集叢集中的容器監控指標。預設採集的指標均為阿里雲Prometheus基礎指標,在預設情況下不會產生費用。關於阿里雲Prometheus基礎指標的說明,請參見指標說明

    預設採集的基礎指標

    啟用功能後自動上報的基礎指標

    • 容器基礎資源監控kubelet

    • 叢集應用狀態監控kube-state-metrics

    • 叢集節點基礎資源監控node-exporter

    • 叢集節點GPU監控ack-gpu-exporter

    • 託管版叢集控制面組件監控指標API Server、etcd、kube-scheduler、kube-controller-manager、cloud-controller-manager

    • 叢集CoreDNS基礎監控指標

    • 叢集Ingress-Controller基礎監控指標

    重要

    如您調整了指標儲存時間長度,或上報了自訂指標,將會產生額外計費。關於如何調整指標的儲存時間長度,請參見如何調整指標的儲存時間長度?;關於阿里雲Prometheus的計費說明,請參見計費說明

  • 阿里雲Grafana費用

    啟用阿里雲Prometheus監控功能後,預設使用免費的共用版Grafana展示上報的監控資料。關於Grafana的計費說明,請參見計費規則

步驟一:開啟阿里雲Prometheus監控

建立叢集時開啟

在建立叢集的組件配置頁面,選中使用阿里雲可觀測監控 Prometheus 版。具體操作,請參見建立ACK託管叢集

image.png

建立叢集時,系統將預設勾選使用阿里雲可觀測監控 Prometheus 版。叢集建立完成後,系統將自動設定阿里雲Prometheus監控服務。

在已有叢集中開啟

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > Prometheus 監控

  3. Prometheus 監控頁面,按照頁面提示完成相關組件的安裝和監控大盤的檢查。

    控制台會自動安裝組件、檢查監控大盤。安裝完成後,您可以單擊各個頁簽查看相應監控資料。

如果您使用的是專有版叢集,請展開按照以下步驟完成授權。

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

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

  3. 基本資料頁簽下,單擊Worker RAM 角色右側的KubernetesWorkerRole-***,然後在RAM角色頁面的許可權管理頁簽,單擊權限原則列下的k8sWorkerRole****

  4. 在權限原則詳情頁面的策略內容頁簽下,單擊修改策略內容

  5. 在指令碼編輯框中的Statement欄位中增加以下授權規則,修改完成後單擊編輯基本資料,然後單擊確定

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "arms:Describe*",
                    "arms:List*",
                    "arms:Get*",
                    "arms:Search*",
                    "arms:Check*",
                    "arms:Query*",
                    "arms:ListEnvironments",
                    "arms:DescribeAddonRelease",
                    "arms:InstallAddon",
                    "arms:DeleteAddonRelease",
                    "arms:ListEnvironmentDashboards",
                    "arms:ListAddonReleases",
                    "arms:CreateEnvironment",
                    "arms:UpdateEnvironment",
                    "arms:InitEnvironment",
                    "arms:DescribeEnvironment",
                    "arms:InstallEnvironmentFeature",
                    "arms:ListEnvironmentFeatures"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
    
    說明

    多個策略內容需要用英文半形逗號(,)分隔。

步驟二:查看阿里雲Prometheus Grafana大盤

Container Service管理主控台Prometheus 監控頁面,切換頁簽選擇需要查看的Grafana監控大盤,擷取相應的監控資料。

(可選)步驟三:配置Prometheus監控警示

為監控任務建立警示可在滿足警示條件時通過郵件、簡訊、DingTalk等渠道即時警示,主動協助您發現異常。警示規則被觸發時,系統會向您指定的連絡人分組發送通知。建立連絡人分組前,您需要先建立連絡人,用於指定連絡人接收通知的手機號碼和郵箱地址,也可以提供自動發送警示通知的DingTalk機器人地址。

1、建立連絡人

  1. 登入Prometheus控制台,在Prometheus 監控頁面左上方,選擇ACK叢集所在的地區。

  2. 在左側導覽列,選擇警示管理>通知對象

  3. 連絡人頁簽單擊建立連絡人

  4. 按照頁面提示,配置連絡人資訊。

    關於配置流程和配置項詳細說明,請參見連絡人

2、配置警示規則

  1. 登入Prometheus控制台,在左側導覽列,單擊執行個體列表

  2. 在頁面頂部選擇ACK叢集所在的地區,然後單擊目標執行個體名稱進入對應執行個體頁面。

  3. 在左側導覽列,單擊警示規則,在警示規則列表,單擊對應警示操作列的編輯,配置警示規則,配置完成後單擊儲存,可快速建立對應指標項的警示規則。

    更多資訊,請參見Prometheus警示規則(新版)Prometheus警示規則(舊版)

(可選)步驟四:自訂Prometheus監控指標並通過Grafana展示

配置Annotation,使用預設服務發現自訂指標監控

您可以在Deployment Pod Template中加入Annotation,以實現自訂監控。配置後,阿里雲Prometheus監控會通過Pod預設服務發現的方式自動擷取Pod的自訂指標。

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

  2. 建立應用。

    關於建立Deployment的更多資訊,請參見建立無狀態工作負載Deployment

    1. 在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載>無狀態。

    2. 無狀態頁面,單擊使用鏡像建立,在應用基本資料頁面,填寫應用的基本資料,然後單擊下一步

    3. 容器配置頁面,配置容器鏡像和所需資源,建立一個Web應用,暴露5000連接埠,然後單擊下一步

      • 鏡像名稱:本文以yejianhonghong/pindex:latest為例。

      • 連接埠設定:本文以名稱為web、容器連接埠為5000,協議為TCP為例。

    4. 進階配置頁面,建立Service並添加Pod Annotation。

      • 建立Service。

        在服務(Service)地區,單擊建立,然後按頁面提示配置Service資訊。

        關於建立服務的更多資訊,請參見建立服務

        配置項

        說明

        服務名稱

        自訂,例如custom-metrics-pindex

        服務類型

        選擇負載平衡型服務,並選擇通過公網訪問。

        連接埠映射

        設定名稱、服務連接埠和容器連接埠,例如分別為web50005000

      • Pod註解地區,單擊添加,添加Pod Annotation。

        • prometheus.io/scrape:設定為true,表示Prometheus將自動抓取(scrape)指標。

        • prometheus.io/port:本文設定為5000,表示Prometheus要抓取(scrape)的Endpoint連接埠為5000

        • prometheus.io/path:本文設定為/access,表示Prometheus要抓取(scrape)的Endpoint路徑為/access

    5. 單擊建立,完成應用建立。

  3. 配置自訂指標。

    1. 登入Prometheus控制台

    2. 執行個體列表頁面頂部,選擇ACK叢集所在的地區,然後單擊目標執行個體名稱進入對應執行個體頁面。

    3. 在執行個體詳情頁面的左側導覽列單擊服務發現,單擊配置頁簽,通過添加ServiceMonitor、PodMonitor配置可觀測監控Prometheus版的採集規則。

      關於配置自訂指標的更多操作,請參見管理Kubernetes叢集服務發現

    4. 配置完成後,單擊Targets頁簽,查看自訂的指標是否配置成功。

      自訂指標

  4. 單擊Endpoint列的連結,增加訪問指標值。

    關於指標配置的更多資訊,請參見DATA MODEL

    image

    image

  5. 自訂指標監控。

    1. Prometheus控制台執行個體列表頁面,單擊目標執行個體名稱進入對應執行個體頁面。

    2. 在左側導覽列單擊大盤列表,單擊Prometheus任意一個預置的圖表進入Grafana,然後先單擊右上方的image.png表徵圖,再單擊Add a new panel添加Panel。

      image.png

    3. 選擇對應的叢集資料來源和填寫PromQL。例如,將模式選為CodeMetrics填寫為current_person_counts

      image

  6. 儲存配置,觀察自訂指標的Grafana圖形。

配置Service標籤,通過ServiceMonitor自訂指標監控

通過ServiceMonitor方式自訂指標監控時,您部署應用時無需配置Annotations,可以通過為Service對象添加標籤來實現。

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

  2. 建立應用。

    1. 在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載>無狀態。

    2. 無狀態頁面,單擊使用鏡像建立,在應用基本資料頁面,填寫應用的基本資料,然後單擊下一步

    3. 容器配置頁面,配置容器鏡像和所需資源,並建立一個Web應用,暴露5000連接埠,然後單擊下一步

      • 鏡像名稱:本文以yejianhonghong/pindex:latest為例。

      • 連接埠設定:本文以名稱為web、容器連接埠為5000,協議為TCP為例。

    4. 進階配置頁面,單擊服務(Service)地區的建立,根據頁面提示建立Service。

      關於建立服務的更多資訊,請參見建立服務

      配置項

      說明

      服務名稱

      自訂,例如custom-metrics-pindex

      服務類型

      選擇負載平衡型服務,並選擇通過公網訪問。

      連接埠映射

      設定名稱、服務連接埠和容器連接埠,例如分別為web50005000

      標籤

      添加標籤,例如Key為app,Value為custom-metrics-pindex。該標籤將被用於ServiceMonitor的Selector。

    5. 單擊建立,完成應用建立。

  3. 配置自訂指標。使Prometheus獲得Service的Scrape Endpoint。

    1. 登入Prometheus控制台

    2. Prometheus 監控頁面左上方,選擇ACK叢集所在的地區,然後單擊目標執行個體名稱進入對應執行個體頁面。

    3. 在左側導覽列,單擊服務發現,單擊配置頁簽,然後在配置頁簽下單擊ServiceMonitor

    4. ServiceMonitor頁簽,單擊添加ServiceMonitor建立ServiceMonitor,然後單擊確定

      關於配置自訂指標的更多操作,請參見管理Kubernetes叢集服務發現

      展開查看完整的樣本YAML

      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        # 填寫一個唯一名稱。
        name: custom-metrics-pindex
        # 填寫目標命名空間。
        namespace: default
      spec:
        endpoints:
        - interval: 30s
          # 填寫service.yaml中對應的Port的Name欄位的值。
          port: web
          # 填寫Service對應的Path的值。
          path: /access
        namespaceSelector:
          any: true
          # Nginx Demo的命名空間。
        selector:
          matchLabels:
            # 填寫service.yaml的Label欄位的值以定位目標service.yaml。
            app: custom-metrics-pindex
    5. Targets頁簽,可見Prometheus已經獲得服務Scrape Endpoint。

      Scape Endpioint

      說明

      相較於Annotation的實現方式,通過ServiceMonitor定義自定指標時,Label能夠展示Namespace和Service名稱。

  4. 單擊Endpoint列的連結,增加訪問指標值。

    關於指標配置的更多資訊,請參見DATA MODEL

    image

    image

  5. 自訂指標監控。

    1. 登入Prometheus控制台

    2. Prometheus 監控頁面左上方,選擇Container ServiceK8s叢集所在的地區,然後單擊目標執行個體名稱進入對應執行個體頁面。

    3. 在左側導覽列單擊大盤列表,單擊Prometheus任意一個預置的圖表進入Grafana,然後先單擊右上方的image.png表徵圖,再單擊Add a new panel添加Panel 。

      image.png

    4. 選擇對應的叢集資料來源和填寫PromQL。例如,選擇模式為Code,將Metrics填寫為current_person_counts

      image

  6. 儲存配置,觀察自訂指標的Grafana圖形。

常見問題

如何查看ack-arms-prometheus組件版本?

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

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面,單擊日誌與監控頁簽,找到ack-arms-prometheus組件。

    在組件下方顯示目前的版本資訊,如有新版本需要升級,可單擊版本右側升級完成組件升級。

    說明

    當已安裝的組件版本不是最新版本時,才會顯示升級操作。

為什麼GPU監控無法部署?

如果您的GPU節點上存在汙點,可能導致GPU監控無法部署。您可以通過以下步驟查看GPU節點的汙點情況。

  1. 執行以下命令,查看目標GPU節點的汙點情況。

    如果您的GPU節點擁有自訂的汙點,可找到汙點相關的條目。本文以keytest-keyvaluetest-valueeffectNoSchedule為例說明:

    kubectl describe node cn-beijing.47.100.***.***

    預期輸出:

    Taints:test-key=test-value:NoSchedule
  2. 通過以下兩種方式處理GPU節點的汙點。

    • 執行以下命令,刪除GPU節點的汙點。

      kubectl taint node cn-beijing.47.100.***.*** test-key=test-value:NoSchedule-
    • 對GPU節點的汙點進行容忍度聲明,允許Pod調度到該汙點的節點上。

      # 1.執行以下命令,編輯ack-prometheus-gpu-exporter。
      kubectl edit daemonset -n arms-prom ack-prometheus-gpu-exporter
      
      # 2. 在YAML中添加如下欄位,聲明對汙點的容忍度。
      #省略其他欄位。
      #tolerations欄位添加在containers欄位上面,且與containers欄位同級。
      tolerations:
      - key: "test-key"
        operator: "Equal"
        value: "test-value"
        effect: "NoSchedule"
      containers:
       #省略其他欄位。

手動刪除資源或將導致重新安裝阿里雲Prometheus失敗,如何完整地手動刪除ARMS-Prometheus?

只刪除阿里雲Prometheus的命名空間,會導致資源刪除後有殘留配置,影響再次安裝。您可以執行以下操作,完整地手動刪除ARMS-Prometheus殘餘配置。

  • 刪除arms-prom命名空間。

    kubectl delete namespace arms-prom
  • 刪除ClusterRole。

    kubectl delete ClusterRole arms-kube-state-metrics
    kubectl delete ClusterRole arms-node-exporter
    kubectl delete ClusterRole arms-prom-ack-arms-prometheus-role
    kubectl delete ClusterRole arms-prometheus-oper3
    kubectl delete ClusterRole arms-prometheus-ack-arms-prometheus-role
    kubectl delete ClusterRole arms-pilot-prom-k8s
    kubectl delete ClusterRole gpu-prometheus-exporter
  • 刪除ClusterRoleBinding。

    kubectl delete ClusterRoleBinding arms-node-exporter
    kubectl delete ClusterRoleBinding arms-prom-ack-arms-prometheus-role-binding
    kubectl delete ClusterRoleBinding arms-prometheus-oper-bind2
    kubectl delete ClusterRoleBinding arms-kube-state-metrics
    kubectl delete ClusterRoleBinding arms-pilot-prom-k8s
    kubectl delete ClusterRoleBinding arms-prometheus-ack-arms-prometheus-role-binding
    kubectl delete ClusterRoleBinding gpu-prometheus-exporter
  • 刪除Role及RoleBinding。

    kubectl delete Role arms-pilot-prom-spec-ns-k8s
    kubectl delete Role arms-pilot-prom-spec-ns-k8s -n kube-system
    kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s
    kubectl delete RoleBinding arms-pilot-prom-spec-ns-k8s -n kube-system

手動刪除ARMS-Prometheus資源後,請在Container Service管理主控台營運管理>組件管理中,重新安裝ack-arms-prometheus組件。

安裝ack-arms-prometheus組件時報錯xxx in use

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

  2. 叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

  3. 在叢集管理頁面左側導覽列選擇應用 > Helm

    Helm頁面檢查是否已有ack-arms-prometheus。

    • Helm頁面已有ack-arms-prometheus,您需要進行以下操作:

      您需要在Helm頁面刪除ack-arms-prometheus,並在組件管理頁面重新安裝ack-arms-prometheus。關於安裝ack-arms-prometheus的具體操作,請參見管理組件

    • Helm頁面沒有ack-arms-prometheus,您需要進行以下操作:

      1. 若沒有ack-arms-prometheus,說明刪除ack-arms-prometheus helm有資源殘留,需要手動清理。關於刪除ack-arms-prometheus殘留資源的具體操作,請參見阿里雲Prometheus監控常見問題

      2. 組件管理頁面安裝ack-arms-prometheus。關於安裝ack-arms-prometheus的具體操作,請參見管理組件

      3. 執行以上步驟,仍無法安裝ack-arms-prometheus,請提交工單

提示Component Not Installed後繼續安裝ack-arms-prometheus組件,安裝失敗

  • 檢查是否已經安裝ack-arms-prometheus組件。

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

    2. 叢集列表頁面中,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

    3. 在叢集管理頁面左側導覽列選擇應用>Helm

      Helm頁面檢查是否已有ack-arms-prometheus組件。

      Helm頁面已有ack-arms-prometheus

      Helm頁面已有ack-arms-prometheus,您需要在Helm頁面刪除ack-arms-prometheus,並在組件管理頁面重新安裝ack-arms-prometheus。關於安裝ack-arms-prometheus的具體操作,請參見管理組件

      Helm頁面沒有ack-arms-prometheus

      Helm頁面沒有ack-arms-prometheus組件,您需要進行以下操作:

      1. 若沒有ack-arms-prometheus,說明刪除ack-arms-prometheus helm有資源殘留,需要手動清理。關於刪除ack-arms-prometheus殘留資源的具體操作,請參見阿里雲Prometheus監控常見問題

      2. 組件管理頁面安裝ack-arms-prometheus。關於安裝ack-arms-prometheus的具體操作,請參見管理組件

      3. 執行以上步驟,仍無法安裝ack-arms-prometheus,請提交工單

  • 檢查ack-arms-prometheus的日誌是否有報錯。

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

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    3. 無狀態頁面頂部設定命名空間arms-prom,然後單擊arms-prometheus-ack-arms-prometheus。

    4. 單擊日誌頁簽,查看日誌中是否有報錯。

      若日誌中出現報錯,請提交工單

  • 檢查Agent是否安裝報錯。

    1. 登入ARMS控制台

    2. 在頂部功能表列,選擇地區。

    3. 在控制台左側導覽列單擊Prometheus 監控,然後在Prometheus 監控頁面,單擊K8s叢集名稱。

    4. 在左側導覽列單擊設定,在右側頁面單擊設定頁簽。

      設定頁簽下可以查看健全狀態檢查結果。若有報錯,請提交工單