全部產品
Search
文件中心

Container Service for Kubernetes:Python應用監控

更新時間:Sep 19, 2025

對於部署在ACK叢集中的Python應用(例如使用Django、Flask、FastAPI架構構建的Web應用或基於LlamaIndex、Langchain等開發的AI、LLM應用),通過安裝ack-onepilot組件並調整Dockerfile,即可利用Application Real-Time Monitoring Service (ARMS)實現應用效能監控,包括應用拓撲、鏈路追蹤、介面調用分析、異常檢測等功能以及針對大型模型互動過程中的細緻追蹤記錄。

前提條件

步驟一:安裝ARMS應用監控接入組件ack-onepilot

重要

舊版應用監控組件arms-pilot已不再維護,您可以安裝升級後的ack-onepilot組件用於監控您的應用,ack-onepilot完全相容arms-pilot,您無需修改應用配置即可無縫接入ack-onepilot。更多資訊,請參見如何卸載arms-pilot和安裝ack-onepilot

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

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

  3. 日誌與監控地區,定位ack-onepilot組件,單擊組件卡片的安裝,按照頁面指引在對話方塊配置相關的參數(建議使用預設值),單擊確認完成組件的安裝。

    說明

    請確保ack-onepilot的版本為3.2.4及以上。ack-onepilot組件預設支援1000個Pod規模,叢集Pod每超過1000個,ack-onepilot資源對應的CPU請增加0.5核、記憶體請增加512MB。

    安裝完成後,您可以在組件管理頁面升級、配置或卸載ack-onepilot組件。

步驟二:授予ARMS資源的存取權限

  • 如需監控ACK叢集應用,但ACK叢集中不存在addon.arms.token,請執行以下操作手動為叢集授予ARMS資源的存取權限。如果已經存在addon.arms.token,則無需執行授權操作。

    說明

    當ACK叢集中存在addon.arms.token時,ARMS能夠自動完成免密授權過程。通常情況下,ACK託管叢集預設配備了addon.arms.token。然而,對於一些較早建立的ACK託管叢集來說,可能存在缺少addon.arms.token的情形。

    1. 檢查addon.arms.token是否存在。

      查看叢集是否存在addon.arms.token

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

      2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組態管理 > 保密字典

      3. 保密字典頁面,選擇命名空間kube-system,查看addon.arms.token是否存在。

    2. 如果addon.arms.token存在,無需執行後續授權操作。否則,請執行以下操作手動為叢集授予ARMS資源的存取權限。

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

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

      3. 基本資料頁簽下,單擊叢集資源地區內的Worker RAM角色右側的連結。

      4. 角色頁面的許可權管理頁簽上,單擊新增授權

      5. 選擇許可權為AliyunARMSFullAccess,然後單擊確定

  • 如需監控對接了ECI的ACK託管叢集應用,請在存取控制快速授權頁面完成授權,然後重啟ack-onepilot組件下的所有Pod。

步驟三:整合ARMS Python探針至Dockerfile

修改Dockerfile,在Python應用程式中整合ARMS Python探針,以啟動Python應用。

  1. 從PyPI倉庫下載探針安裝器。

    pip3 install aliyun-bootstrap
  2. 使用aliyun-bootstrap安裝探針。

    # 對應的阿里雲帳號的RegionID
    ARMS_REGION_ID=xxx aliyun-bootstrap -a install
    說明

    如需要指定安裝的Python探針版本,可通過以下命令安裝指定版本的探針:

    # ${version}替換為實際的版本號碼
    aliyun-bootstrap -a install -v ${version}

    請參考探針(Python Agent)版本說明查看所有發行的Python探針版本。

  3. 通過ARMS Python探針啟動應用。

    aliyun-instrument python app.py
  4. 構建鏡像。

完整的Dockerfile樣本如下:

    修改前的Dockerfile

    # 使用Python 3.10基礎鏡像
    FROM docker.m.daocloud.io/python:3.10
    
    # 設定工作目錄
    WORKDIR /app
    
    # 複製requirements.txt檔案到工作目錄
    COPY requirements.txt .
    
    # 使用pip安裝依賴
    RUN pip install --no-cache-dir -r requirements.txt
    
    COPY ./app.py /app/app.py
    # 暴露容器的8000連接埠
    EXPOSE 8000
    CMD ["python","app.py"]

    修改後的Dockerfile

    # 使用官方的Python 3.10基礎鏡像
    FROM docker.m.daocloud.io/python:3.10
    
    # 設定工作目錄
    WORKDIR /app
    
    # 複製requirements.txt檔案到工作目錄
    COPY requirements.txt .
    
    # 使用pip安裝依賴
    RUN pip install --no-cache-dir -r requirements.txt
    #########################安裝aliyun python 探針###############################
    # 對應的阿里雲帳號的RegionID
    RUN pip3 install aliyun-bootstrap && ARMS_REGION_ID=xxx aliyun-bootstrap -a install 
    ##########################################################
    
    COPY ./app.py /app/app.py
    
    
    # 暴露容器的8000連接埠
    EXPOSE 8000
    #########################################################
    CMD ["aliyun-instrument","python","app.py"]

步驟四:啟用Python應用的ARMS應用監控

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

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

  3. 無狀態頁面,單擊目標應用右側image > YAML編輯

  4. 在YAML檔案中將以下labels添加到spec.template.metadata層級下。

    labels:
      aliyun.com/app-language: python # Python應用必填,標明此應用是Python應用。
      armsPilotAutoEnable: 'on'
      armsPilotCreateAppName: "deployment-name"    # 應用在ARMS中的展示名稱
    重要

    如您安裝的ack-onepilot組件版本高於5.0.0,在執行本步驟時ack-onepilot組件將會自動為您執行Python探針包的下載與注入動作,您無需手動修改Dockerfile的啟動命令即可獲得完全無侵入的Python應用監控接入體驗。如果您不希望使用該能力,或者您的容器中已經通過手動安裝的方式安裝了Python探針,建議您通過以下label來關閉Python的完全無侵入注入能力:

    labels:
      aliyun.com/app-language: python # Python應用必填,標明此應用是Python應用。
      armsPilotAutoEnable: 'on'
      armsPilotCreateAppName: "deployment-name"    # 應用在ARMS中的展示名稱
      armsAutoInstrumentationEnable: "off"  # 關閉Python應用的完全無侵入注入能力

    image

    建立無狀態(Deployment)應用並開啟ARMS應用監控的完整YAML樣本模板如下:

    展開查看完整樣本YAML檔案

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: arms-python-client
      name: arms-python-client
      namespace: arms-demo
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: arms-python-client
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: arms-python-client
            aliyun.com/app-language: python # Python應用必填,表示此應用是Python應用。
            armsPilotAutoEnable: 'on'
            armsPilotCreateAppName: "arms-python-client"    # 應用在ARMS中的展示名稱。
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/arms-default/python-agent:arms-python-client
              imagePullPolicy: Always
              name: client
              resources:
                requests:
                  cpu: 250m
                  memory: 300Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: arms-python-server
      name: arms-python-server
      namespace: arms-demo
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: arms-python-server
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: arms-python-server
            aliyun.com/app-language: python # Python應用必填,表示此應用是Python應用。
            armsPilotAutoEnable: 'on'
            armsPilotCreateAppName: "arms-python-server"    # 應用在ARMS中的展示名稱。
        spec:
          containers:
            - env:
              - name: CLIENT_URL
                value: 'http://arms-python-client-svc:8000'
              image: registry.cn-hangzhou.aliyuncs.com/arms-default/python-agent:arms-python-server
              imagePullPolicy: Always
              name: server
              resources:
                requests:
                  cpu: 250m
                  memory: 300Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: arms-python-server
      name: arms-python-server-svc
      namespace: arms-demo
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
        - IPv4
      ipFamilyPolicy: SingleStack
      ports:
        - name: http
          port: 8000
          protocol: TCP
          targetPort: 8000
      selector:
        app: arms-python-server
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: arms-python-client-svc
      namespace: arms-demo
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
        - IPv4
      ipFamilyPolicy: SingleStack
      ports:
        - name: http
          port: 8000
          protocol: TCP
          targetPort: 8000
      selector:
        app: arms-python-client
      sessionAffinity: None
      type: ClusterIP
    

步驟五:查看監控詳情

  1. 等待約一分鐘後,在ARMS控制台應用監控 > 應用列表頁面查看Python應用及其上報的資料。

    image

  2. 單擊應用程式名稱,進入ARMS控制台的應用監控頁面查看監控詳情。更多資訊,請參見應用總覽

(可選)步驟六:釋放資源

您不再需要使用ARMS監控您的Python應用時,可以通過卸載ARMS Python探針停止監控。具體操作,請參見卸載Python探針