当您需要监控部署在容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)和容器计算服务ACS中的Python应用时,通过安装ARMS应用监控组件ack-onepilot并修改对应的Dockerfile,即可在应用实时监控服务ARMS中查看对应应用的应用拓扑、接口调用、调用链分析等相关监控数据。本文将介绍如何为部署在容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)和容器计算服务ACS中的Python应用安装探针。
容器服务 Kubernetes 版ACK和容器计算服务ACS安装探针的操作相同,本文以容器服务 Kubernetes 版ACK为例演示安装探针的操作。
如果您在使用Python探针过程中有任何问题,可以查阅Python探针使用常见问题文档,如果文档无法解决您的疑问,欢迎通过钉钉答疑群(群号:35568145)与我们联系。
前提条件
创建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)
登录容器服务管理控制台,在集群列表页面单击目标集群名称。
在左侧导航栏单击组件管理,然后在右上角通过关键字搜索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
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏选择
页面,单击ack-onepilot组件右侧的更新。将
accessKey
和accessKeySecret
替换为当前账号的AccessKey,然后单击确定。说明获取AccessKey的操作,请参见创建AccessKey。
为降低AccessKey泄露的风险,阿里云账号(主账号)的AccessKey Secret只在创建时显示,后续不支持查看,请妥善保管。
重启应用Deployment。
方式二:通过K8s Secret引入AK/SK
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏选择
。选择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测试阶段,如果您在使用该完全无侵入注入能力时有任何问题,欢迎通过钉钉答疑群(群号:35568145)与我们联系。
创建无状态(Deployment)应用并开启ARMS应用监控的完整YAML示例模板如下:
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面的目标应用右侧选择
。如需创建一个新应用,单击使用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应用监控接入体验。如果您不希望使用该能力,可以通过以下label来关闭Python的完全无侵入注入能力:
labels: aliyun.com/app-language: python # Python应用必填,标明此应用是Python应用。 armsPilotAutoEnable: 'on' armsPilotCreateAppName: "deployment-name" # 应用在ARMS中的展示名称 armsAutoInstrumentationEnable: "off" # 关闭Python应用的完全无侵入注入能力
单击更新。
执行结果
约一分钟后,若Python应用出现在ARMS控制台的 页面中且有数据上报,则说明接入成功。