全部產品
Search
文件中心

Application Real-Time Monitoring Service:Container Service ACK 和容器計算服務 ACS 通過 ack-onepilot 組件安裝 Python 探針

更新時間:Nov 04, 2025

當您需要監控部署在Container Service for Kubernetes (ACK)和容器計算服務ACS中的Python應用時,通過安裝ARMS應用監控組件ack-onepilot並修改對應的Dockerfile,即可在應用即時監控服務ARMS中查看對應應用的應用拓撲、介面調用、調用鏈分析等相關監控資料。本文將介紹如何為部署在Container Service for Kubernetes (ACK)和容器計算服務ACS中的Python應用安裝探針。

說明
  • Container Service Kubernetes 版ACKContainer Compute ServiceACS安裝探針的操作相同,本文以Container Service Kubernetes 版ACK為例示範安裝探針的操作。

  • 如果您在使用Python探針過程中有任何問題,可以查閱Python探針使用常見問題文檔,如果文檔無法解決您的疑問,歡迎通過DingTalk答疑群(群號:159215000379)與我們聯絡。

  • 為了讓您可以及時使用到Python探針的最新能力,每次使用aliyun-bootstrap組件安裝或使用無侵入方式安裝時都會預設安裝最新的探針版本,如果需要手動指定探針版本,可以參考Python探針使用常見問題文檔的如何安裝指定地區與版本的探針小節。

前提條件

注意事項

  • 如果應用使用uvicorn啟動,請選擇以下一種方式進行配置。

    • 方式一:在uvicorn的入口檔案處的第一行添加以下語句以引入Python探針。

      from aliyun.opentelemetry.instrumentation.auto_instrumentation import sitecustomize
    • 方式二:使用gunicorn替換uvicorn,並在gunicorn命令前添加aliyun-instrument首碼。

      例如:

      uvicorn app:app --workers 4 --port=9090 --host 0.0.0.0

      修改為:

      aliyun-instrument gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 app:app
      說明

      aliyun-instrument指令負責ARMS Python探針初始化配置及無侵入埋點。

  • 如果應用使用uWSGI啟動,請參考以下接入文檔進行接入:在使用uWSGI啟動Django或Flask專案時接入Python探針

  • 如果有使用gevent協程,則需要設定環境變數GEVENT_ENABLE=true

    例如程式中有使用:

    from gevent import monkey
    monkey.patch_all()

    需要設定環境變數如下:

    GEVENT_ENABLE=true

步驟一:安裝 ARMS 探針接入助手(ack-onepilot)

  1. 登入Container Service管理主控台,在叢集列表頁面單擊目的地組群名稱。

  2. 在左側導覽列單擊組件管理,然後在右上方通過關鍵字搜尋ack-onepilot

    重要

    請確保ack-onepilot的版本在3.2.4或以上。

  3. ack-onepilot卡片上單擊安裝

    說明

    ack-onepilot組件預設支援1000個pod規模,叢集pod每超過1000個,ack-onepilot資源對應的CPU請增加0.5核、記憶體請增加512 MB。

  4. 在彈出的頁面中可以配置相關的參數,建議使用預設值,單擊確認

    說明

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

  5. 重要

    如您安裝的ack-onepilot組件版本高於5.0.0,您可以跳過步驟二直接從步驟三開始執行,從而獲得完全無侵入的Python應用可觀測接入體驗。

步驟二:修改 Dockerfile

  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"]

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

ACK託管叢集

如果ACK託管叢集中不存在ARMS Addon Token,請執行以下操作手動為叢集授予ARMS資源的存取權限。如果已經存在ARMS Addon Token,請跳轉至步驟四

查看叢集是否存在ARMS Addon Token。

  1. 登入Container Service管理主控台,在叢集列表頁面,單擊目的地組群名稱進入叢集詳情頁。

  2. 在左側導覽列選擇組態管理 > 保密字典,然後在頂部選擇命名空間kube-system,查看addon.arms.token是否存在。

說明

叢集存在ARMS Addon Token時,ARMS會進行免密授權。Kubernetes託管版叢集預設存在ARMS Addon Token,但對於部分早期建立的Kubernetes託管版叢集,可能會存在沒有ARMS Addon Token的情況,因此,對於Kubernetes託管版叢集,建議首先檢查ARMS Addon Token是否存在。若不存在,需進行手動授權。

手動添加權限原則。

  1. 登入Container Service管理主控台,在叢集列表頁面單擊目的地組群名稱。

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

  3. 許可權管理頁簽單擊新增授權

  4. 新增授權面板添加以下兩個權限原則,然後單擊確認新增授權

    • AliyunTracingAnalysisFullAccess:Managed Service for OpenTelemetry的完整許可權。

    • AliyunARMSFullAccess:ARMS的完整許可權。

專有版叢集/註冊叢集

如果需要監控ACK專有版叢集ACK One註冊叢集應用,請確認對應的阿里雲帳號已包含AliyunARMSFullAccessAliyunSTSAssumeRoleAccess許可權。添加許可權的操作,請參見為RAM使用者授權

安裝ack-onepilot組件後,還需要在ack-onepilot中填寫有ARMS許可權的阿里雲帳號AK/SK。

方式一:Helm中直接填寫AK/SK

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

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

  3. accessKeyaccessKeySecret替換為當前帳號的AccessKey,然後單擊確定

    說明

    擷取AccessKey的操作,請參見建立AccessKey

    為降低AccessKey泄露的風險,阿里雲帳號(主帳號)的AccessKey Secret只在建立時顯示,後續不支援查看,請妥善保管。

    image

  4. 重啟應用Deployment。

方式二:通過K8s Secret引入AK/SK

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

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

  3. 選擇ack-onepilot命名空間,然後建立Secret,添加AK/SK資訊。

    說明

    擷取AccessKey的操作,請參見建立AccessKey

    為降低AccessKey泄露的風險,阿里雲帳號(主帳號)的AccessKey Secret只在建立時顯示,後續不支援查看,請妥善保管。

    image

  4. 在左側導覽列選擇工作負載 > 無狀態,單擊ack-onepilot組件(一般在ack-onepilot命名空間下,名稱為ack-onepilot-ack-onepilot)。

  5. 在ack-onepilot-ack-onepilot頁面右上方單擊編輯,然後在環境變數地區添加ONE_PILOT_ACCESSKEYONE_PILOT_ACCESSKEY_SECRET,通過保密字典引用的方式替換為Secret中儲存的值,單擊確定

    image

ASK/ECI叢集

如果需監控ACK Serverless叢集或對接了ECI的叢集應用,請在雲資源訪問授權頁面完成授權,然後重啟ack-onepilot組件下的所有Pod。

步驟四:為Python應用開啟ARMS應用監控

重要
  • 如您安裝的ack-onepilot組件版本高於5.0.0,在執行本步驟時ack-onepilot組件將會自動為您執行Python探針包的下載與注入動作,您無需手動修改Dockerfile的啟動命令即可獲得完全無侵入的Python應用監控接入體驗。

  • Python探針包的下載以及注入動作將會通過一個初始化容器來執行,初始化容器的執行在預設的資源設定下可能會佔用約10s的時間,該初始化容器預設會消耗0.5c 250MB的資源(初始化結束後即釋放)。您可以通過以下環境變數來調整初始化容器的資源配額以調整初始化容器的執行速度:

    • PYTHON_INIT_RESOURCE_REQUESTS_CPU:Python應用初始化容器的CPU Request值,樣本值:500m。

    • PYTHON_INIT_RESOURCE_REQUESTS_MEM:Python應用初始化容器的記憶體 Request值,樣本值:250Mi。

    • PYTHON_INIT_RESOURCE_LIMIT_CPU:Python應用初始化容器的CPU Limit值,樣本值:1000m。

    • PYTHON_INIT_RESOURCE_LIMIT_MEM:Python應用初始化容器的CPU Limit值,樣本值:500Mi。

  • 該能力處於Beta測試階段,如果您在使用該完全無侵入注入能力時有任何問題,歡迎通過DingTalk答疑群(群號:159215000379)與我們聯絡。

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

展開查看完整樣本YAML檔案(Python)

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
  uid: 91f94804-594e-495b-9f57-9def1fdc7c1d
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. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

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

  3. 無狀態頁面的目標應用右側選擇image > YAML 編輯

    如需建立一個新應用,單擊使用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

  5. 單擊更新

執行結果

約一分鐘後,若Python應用出現在ARMS控制台應用監控 > 應用列表頁面中且有資料上報,則說明接入成功。

2024-09-23_17-45-22