對于部署在ACK集群中的Python應用(例如使用Django、Flask、FastAPI框架構建的Web應用或基于LlamaIndex、Langchain等開發的AI、LLM應用),通過安裝ack-onepilot組件并調整Dockerfile,即可利用應用實時監控服務 ARMS(Application Real-Time Monitoring Service)實現應用性能監控,包括應用拓撲、鏈路追蹤、接口調用分析、異常檢測等功能以及針對大型模型交互過程中的細致跟蹤記錄。
前提條件
已創建命名空間。具體操作,請參見管理命名空間與配額。本文示例中的命名空間為
arms-demo
。已確保使用的Python運行時為3.8及以上。
ARMS兼容的Python版本為3.8及以上,低于此版本時可能會出現接入問題。
已開通ARMS。
ARMS是一款阿里云應用性能管理(APM)類監控產品,如需了解ARMS應用監控的詳細信息,請參見什么是應用實時監控服務ARMS?、什么是應用監控。
步驟一:安裝ARMS應用監控接入組件ack-onepilot
ACK舊版應用監控組件arms-pilot已不再維護,您可以安裝升級后的ack-onepilot組件用于監控您的應用,ack-onepilot完全兼容arms-pilot,您無需修改應用配置即可無縫接入ack-onepilot。更多信息,請參見如何安裝ack-onepilot和卸載arms-pilot。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在組件管理頁面,搜索關鍵字ack-onepilot。
重要請確保ack-onepilot的版本為3.2.4及以上。
在ack-onepilot卡片上單擊安裝,并在彈出的頁面中可以配置相關的參數,建議使用默認值,然后單擊確定。
說明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
的情形。檢查
addon.arms.token
是否存在。登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在保密字典頁面,選擇命名空間為kube-system,查看
addon.arms.token
是否存在。
如果
addon.arms.token
存在,無需執行后續授權操作。否則,請執行以下操作手動為集群授予ARMS資源的訪問權限。登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇集群信息。
在基本信息頁簽下,單擊集群資源區域內的Worker RAM角色右側的鏈接。
在角色頁面的權限管理頁簽上,單擊新增授權。
選擇權限為AliyunARMSFullAccess,然后單擊確定。
如需監控對接了ECI的ACK托管集群應用,請在云資源訪問授權頁面完成授權,然后重啟ack-onepilot組件下的所有Pod。
步驟三:集成ARMS Python探針至Dockerfile
修改Dockerfile,在您的Python應用程序中集成ARMS Python探針,以啟動Python應用。
從PyPI倉庫下載探針安裝器。
pip3 install aliyun-bootstrap
使用aliyun-bootstrap安裝探針。
aliyun-bootstrap -a install
通過ARMS Python探針啟動應用。
aliyun-instrument 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
COPY ./app.py /app/app.py
# 暴露容器的8000端口
EXPOSE 8000
CMD ["python","app.py"]
# 使用官方的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 探針###############################
RUN pip3 install aliyun-bootstrap && aliyun-bootstrap -a install
##########################################################
COPY ./app.py /app/app.py
# 暴露容器的8000端口
EXPOSE 8000
#########################################################
CMD ["aliyun-instrument","python","app.py"]
步驟四:啟用Python應用的ARMS應用監控
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在目標應用的右側選擇
。在YAML文件中將以下
labels
添加到spec.template.metadata層級下。labels: aliyun.com/app-language: python # Python應用必填,標明此應用是Python應用。 armsPilotAutoEnable: 'on' armsPilotCreateAppName: "<your-deployment-name>" #應用在ARMS中的展示名稱
創建無狀態(Deployment)應用并開啟ARMS應用監控的完整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
步驟五:查看監控詳情
(可選)步驟六:釋放資源
您不再需要使用ARMS監控您的Python應用時,可以通過卸載ARMS Python探針停止監控。具體操作,請參見卸載Python探針。
相關文檔
如需了解如何將ACK集群下的Java應用或Golang應用接入ARMS應用監控,請參見Java應用監控、Golang應用監控。