Python应用监控
更新时间:2025-12-12
概述
对于部署在CCE集群中的Python应用(例如使用Django、Flask、FastAPI框架构建的Web应用或基于LlamaIndex、Langchain等开发的AI、LLM应用),通过安装 APM 应用监控组件 CCE OnePilot并调整Dockerfile,即可利用 APM(Application Performance Monitor,APM)实现全链路智能监控能力。
背景信息
应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,提供分布式应用拓扑查询和性能分析能力,可通过APM对应用的四个黄金指标(请求数,QPS,耗时,错误率)进行监控,并可通过Trace链路详情定位问题,全方位保障系统的可用性和稳定性。
前提条件
- 已确保使用的Python运行时为3.8及以上。APM 兼容的Python版本为3.8及以上,低于此版本时可能会出现接入问题。
- 已开通APM。APM是一款百度云应用性能管理平台,如需了解APM应用监控的详细信息,请参什么是APM应用性能监控。
步骤一:安装 APM 应用监控组件
- 登录容器引擎控制台。
- 在左侧导航栏,选择集群列表。
- 在“集群列表”页面单击目标集群,进入集群管理页面。
- 在集群管理页面左侧导航栏中选择运维与管理>组件管理。
- 在“组件管理”页面的“监控和日志日志”页签下,找到CCE Onepilot组件,单击安装。
安装完成后,您可以在组件管理页面升级或卸载CCE Onepilot组件。
步骤二:集成 APM Python探针至Dockerfile
修改Dockerfile,在您的Python应用程序中集成ARMS Python探针,以启动Python应用。
- 安装所需的 Python 探针。
Plain Text
1pip install opentelemetry-instrumentation-redis
2pip install opentelemetry-instrumentation-mysql
3pip install opentelemetry-distro opentelemetry-exporter-otlp
4
5opentelemetry-bootstrap -a install
- 通过APM Python探针启动应用。
Plain Text
1opentelemetry-instrument \
2--traces_exporter otlp \
3--service_name <serviceName> \
4--exporter_otlp_endpoint <endpoint> \
5--exporter_otlp_protocol http/protobuf \
6--exporter_otlp_headers Authentication=<Authentication> \
7--resource_attributes host.name=<hostName> \
8python3 app.py
3.构建镜像。
完整的Dockerfile示例如下:
修改前的Dockerfile如下:
Plain Text
1# 使用官方的Python 3.10基础镜像
2FROM docker.m.daocloud.io/python:3.10
3
4# 设置工作目录
5WORKDIR /app
6
7# 复制requirements.txt文件到工作目录
8COPY ./requirements.txt .
9
10RUN pip install --no-cache-dir -r requirements.txt
11
12COPY ./app.py /app/app.py
13
14# 暴露容器的8000端口
15EXPOSE 8080
16#########################################################
17CMD ["python","app.py"]
修改后的Dockerfile
Plain Text
1# 使用官方的Python 3.10基础镜像
2FROM docker.m.daocloud.io/python:3.10
3
4# 设置工作目录
5WORKDIR /app
6
7# 复制requirements.txt文件到工作目录
8COPY ./requirements.txt .
9
10# 使用pip安装依赖
11RUN pip install --no-cache-dir -r requirements.txt
12
13# 使用 pip 安装 opentelemetry 相关 python sdk
14RUN pip install opentelemetry-exporter-otlp
15RUN pip install opentelemetry-distro
16RUN opentelemetry-bootstrap -a install
17
18COPY ./app.py /app/app.py
19
20# 暴露容器的8000端口
21EXPOSE 8080
22#########################################################
23CMD ["opentelemetry-instrument","python","app.py"]
步骤三:为 Python 应用开启 APM 应用监控
如需在创建新应用的同时开启ARMS应用监控,请完成以下操作。
- 登录容器引擎控制台,在左侧导航栏选择集群列表。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。
- 在无状态页面单击使用YAML创建资源。
- 选择自定义模板,并在模板(YAML格式)中将以下labels添加到spec.template.metadata层级下。
Plain Text
1labels:
2 baidubce.com/app-language: Python # Python应用必填,标明此应用是Python应用。
3 cceOnepilotEnable: "on"
4 apmServiceName: "<your_service_name>" # 请用您应用实例的名称替换 <your_service_name>,若不设置此标签,则会以工作负载的名称 metadata.name 上报指标至 APM。
创建一个无状态(Deployment)应用并开启APM应用监控的完整YAML示例模板如下:
Plain Text
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 labels:
5 app: apm-python-client
6 name: apm-python-client
7 namespace: apm-demo
8spec:
9 progressDeadlineSeconds: 600
10 replicas: 1
11 revisionHistoryLimit: 10
12 selector:
13 matchLabels:
14 app: apm-python-client
15 strategy:
16 rollingUpdate:
17 maxSurge: 25%
18 maxUnavailable: 25%
19 type: RollingUpdate
20 template:
21 metadata:
22 labels:
23 app: apm-python-client
24 baidubce.com/app-language: python # Python应用必填,表示此应用是Python应用。
25 cceOnepilotEnable: 'on'
26 apmServiceName: "arms-python-client" # 应用在APM中的展示名称。
27 spec:
28 containers:
29 - image: registry.baidubce.com/cce-plugin-dev/tomcat:my-tomcat
30 imagePullPolicy: Always
31 name: client
32 resources:
33 requests:
34 cpu: 250m
35 memory: 300Mi
36 terminationMessagePath: /dev/termination-log
37 terminationMessagePolicy: File
38 dnsPolicy: ClusterFirst
39 restartPolicy: Always
40 schedulerName: default-scheduler
41 securityContext: {}
42 terminationGracePeriodSeconds: 30
43
44---
45
46apiVersion: apps/v1
47kind: Deployment
48metadata:
49 labels:
50 app: apm-python-server
51 name: apm-python-server
52 namespace: apm-demo
53spec:
54 progressDeadlineSeconds: 600
55 replicas: 1
56 revisionHistoryLimit: 10
57 selector:
58 matchLabels:
59 app: apm-python-server
60 strategy:
61 rollingUpdate:
62 maxSurge: 25%
63 maxUnavailable: 25%
64 type: RollingUpdate
65 template:
66 metadata:
67 labels:
68 app: apm-python-server
69 baidubce.com/app-language: python # Python应用必填,表示此应用是Python应用。
70 cceOnepilotEnable: 'on'
71 apmServiceName: "apm-python-client" # 应用在APM中的展示名称。
72 spec:
73 containers:
74 - env:
75 - name: CLIENT_URL
76 value: 'http://apm-python-client-svc:8000'
77 image: registry.baidubce.com/cce-plugin-dev/tomcat:my-tomcat
78 imagePullPolicy: Always
79 name: server
80 resources:
81 requests:
82 cpu: 250m
83 memory: 300Mi
84 terminationMessagePath: /dev/termination-log
85 terminationMessagePolicy: File
86 dnsPolicy: ClusterFirst
87 restartPolicy: Always
88 schedulerName: default-scheduler
89 securityContext: {}
90 terminationGracePeriodSeconds: 30
91
92---
93
94apiVersion: v1
95kind: Service
96metadata:
97 labels:
98 app: apm-python-server
99 name: apm-python-server-svc
100 namespace: apm-demo
101spec:
102 internalTrafficPolicy: Cluster
103 ipFamilies:
104 - IPv4
105 ipFamilyPolicy: SingleStack
106 ports:
107 - name: http
108 port: 8000
109 protocol: TCP
110 targetPort: 8000
111 selector:
112 app: apm-python-server
113 sessionAffinity: None
114 type: ClusterIP
115---
116apiVersion: v1
117kind: Service
118metadata:
119 name: apm-python-client-svc
120 namespace: apm-demo
121spec:
122 internalTrafficPolicy: Cluster
123 ipFamilies:
124 - IPv4
125 ipFamilyPolicy: SingleStack
126 ports:
127 - name: http
128 port: 8000
129 protocol: TCP
130 targetPort: 8000
131 selector:
132 app: apm-python-client
133 sessionAffinity: None
134 type: ClusterIP
查看结果
在无状态页面上,目标应用的操作列将出现APM控制台按钮。
查看监控详情
完成上述步骤后,您就为部署在容器服务CCE中的Python应用开启了APM应用监控。
