當您需要監控部署在Container Service for Kubernetes (ACK)和容器計算服務ACS中的Python應用時,通過安裝ARMS應用監控組件ack-onepilot並修改對應的Dockerfile,即可在應用即時監控服務ARMS中查看對應應用的應用拓撲、介面調用、調用鏈分析等相關監控資料。本文將介紹如何為部署在Container Service for Kubernetes (ACK)和容器計算服務ACS中的Python應用安裝探針。
Container Service Kubernetes 版ACK和Container Compute ServiceACS安裝探針的操作相同,本文以Container Service Kubernetes 版ACK為例示範安裝探針的操作。
如果您在使用Python探針過程中有任何問題,可以查閱Python探針使用常見問題文檔,如果文檔無法解決您的疑問,歡迎通過DingTalk答疑群(群號:159215000379)與我們聯絡。
為了讓您可以及時使用到Python探針的最新能力,每次使用aliyun-bootstrap組件安裝或使用無侵入方式安裝時都會預設安裝最新的探針版本,如果需要手動指定探針版本,可以參考Python探針使用常見問題文檔的如何安裝指定地區與版本的探針小節。
前提條件
建立ACK叢集或ACS叢集。
ACS叢集:建立ACS叢集。
建立命名空間,具體操作,請參見管理命名空間與配額。本文樣本中的命名空間名稱為arms-demo。
檢查您的Python版本和架構版本。具體要求,請參見ARMS 應用監控支援的 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)
登入Container Service管理主控台,在叢集列表頁面單擊目的地組群名稱。
在左側導覽列單擊組件管理,然後在右上方通過關鍵字搜尋ack-onepilot。
重要請確保ack-onepilot的版本在3.2.4或以上。
在ack-onepilot卡片上單擊安裝。
說明ack-onepilot組件預設支援1000個pod規模,叢集pod每超過1000個,ack-onepilot資源對應的CPU請增加0.5核、記憶體請增加512 MB。
在彈出的頁面中可以配置相關的參數,建議使用預設值,單擊確認。
說明安裝完成後,您可以在組件管理頁面升級、配置或卸載ack-onepilot組件。
- 重要
如您安裝的ack-onepilot組件版本高於5.0.0,您可以跳過步驟二直接從步驟三開始執行,從而獲得完全無侵入的Python應用可觀測接入體驗。
步驟二:修改 Dockerfile
從PyPI倉庫下載探針安裝器。
pip3 install aliyun-bootstrap使用aliyun-bootstrap安裝探針。
# 對應的阿里雲帳號的RegionID ARMS_REGION_ID=xxx aliyun-bootstrap -a install說明如需要指定安裝的Python探針版本,可通過以下命令安裝指定版本的探針:
# ${version}替換為實際的版本號碼 aliyun-bootstrap -a install -v ${version}請參考探針(Python Agent)版本說明查看所有發行的Python探針版本。
通過ARMS Python探針啟動應用。
aliyun-instrument python app.py構建鏡像。
完整的Dockerfile樣本如下:
步驟三:授予 ARMS 資源的存取權限
ACK託管叢集
如果ACK託管叢集中不存在ARMS Addon Token,請執行以下操作手動為叢集授予ARMS資源的存取權限。如果已經存在ARMS Addon Token,請跳轉至步驟四。
叢集存在ARMS Addon Token時,ARMS會進行免密授權。Kubernetes託管版叢集預設存在ARMS Addon Token,但對於部分早期建立的Kubernetes託管版叢集,可能會存在沒有ARMS Addon Token的情況,因此,對於Kubernetes託管版叢集,建議首先檢查ARMS Addon Token是否存在。若不存在,需進行手動授權。
專有版叢集/註冊叢集
如果需要監控ACK專有版叢集和ACK One註冊叢集應用,請確認對應的阿里雲帳號已包含AliyunARMSFullAccess和AliyunSTSAssumeRoleAccess許可權。添加許可權的操作,請參見為RAM使用者授權。
安裝ack-onepilot組件後,還需要在ack-onepilot中填寫有ARMS許可權的阿里雲帳號AK/SK。
方式一:Helm中直接填寫AK/SK
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列選擇頁面,單擊ack-onepilot組件右側的更新。
將
accessKey和accessKeySecret替換為當前帳號的AccessKey,然後單擊確定。說明擷取AccessKey的操作,請參見建立AccessKey。
為降低AccessKey泄露的風險,阿里雲帳號(主帳號)的AccessKey Secret只在建立時顯示,後續不支援查看,請妥善保管。

重啟應用Deployment。
方式二:通過K8s Secret引入AK/SK
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列選擇。
選擇ack-onepilot命名空間,然後建立Secret,添加AK/SK資訊。
說明擷取AccessKey的操作,請參見建立AccessKey。
為降低AccessKey泄露的風險,阿里雲帳號(主帳號)的AccessKey Secret只在建立時顯示,後續不支援查看,請妥善保管。

在左側導覽列選擇,單擊ack-onepilot組件(一般在ack-onepilot命名空間下,名稱為ack-onepilot-ack-onepilot)。
在ack-onepilot-ack-onepilot頁面右上方單擊編輯,然後在環境變數地區添加
ONE_PILOT_ACCESSKEY和ONE_PILOT_ACCESSKEY_SECRET,通過保密字典引用的方式替換為Secret中儲存的值,單擊確定。
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樣本模板如下:
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在無狀態頁面的目標應用右側選擇。
如需建立一個新應用,單擊使用YAML建立資源。
在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應用的完全無侵入注入能力
單擊更新。
執行結果
約一分鐘後,若Python應用出現在ARMS控制台的頁面中且有資料上報,則說明接入成功。

> YAML 編輯