容器服务 Kubernetes 版 ACK 或容器计算服务 ACS 集群内运行的 Node.js 应用,可通过 ack-onepilot 组件自动安装探针,无需把探针包安装到业务镜像,也无需修改应用启动命令,即可通过云监控 2.0 查看应用拓扑、接口调用和调用链等监控数据。本文介绍如何安装 ack-onepilot 组件,并通过配置应用标签为 Node.js 应用开启应用监控。
ack-onepilot 负责在应用启动前准备探针及其接入配置,对于 Node.js 应用通过环境变量自动加载探针,具体工作机制请参见 ack-onepilot 组件基本原理说明。
本文以 ACK 集群为例介绍操作流程。ACS 集群可按相同流程配置应用,组件授权方式请参见步骤二:授予 ARMS 资源的访问权限。
前提条件
已创建 ACK 或 ACS 集群。具体操作,请参见创建 ACK 托管集群或创建 ACS 集群。
已创建应用所在的命名空间。本文使用
default命名空间。有关命名空间的操作,请参见管理命名空间与配额。已确认应用使用的 Node.js 版本及依赖受探针支持。具体支持范围,请参见 ARMS 应用监控支持的 Node.js 组件和框架。
ack-onepilot 版本为 5.3.3 及以上。集群未安装该组件或已安装版本低于 5.3.3 时,请先完成步骤一:安装探针接入助手(ack-onepilot)。
当前账号具备完成本文操作所需的集群与 RAM 权限,包括安装或升级集群组件、修改 Worker RAM 角色的权限策略、编辑组件的 Helm 配置与 Deployment、创建 Secret。
应用未通过代码或启动参数手动加载 Node.js 探针。如已手动加载,请先移除原有加载配置,避免重复初始化。
生效时机与部署建议
接入配置在新建 Pod 时生效。更新应用标签会触发工作负载重新部署,请合理安排变更时间。
一个 Pod 包含多个容器时,组件会向 Pod 中的各普通容器注入 Node.js 加载参数。对于包含不同语言或不同模块类型的 Pod,建议将 Node.js 应用单独部署。
步骤一:安装探针接入助手(ack-onepilot)
打开容器服务管理控制台,从集群列表进入需要接入应用的集群。
在左侧导航栏选择组件管理,搜索
ack-onepilot。根据组件的安装情况执行对应操作。
未安装 ack-onepilot:从搜索结果安装 ack-onepilot,按集群环境配置安装参数,确认后完成安装。安装完成后,确认组件版本为 5.3.3 及以上。
已安装 ack-onepilot:检查组件版本。版本需为 5.3.3 及以上,低于该版本时先升级组件再继续后续步骤。
说明ACS 集群需通过组件安装参数配置
accessKey和accessKeySecret,凭据的权限要求与配置方式请参见步骤二:授予 ARMS 资源的访问权限。
步骤二:授予 ARMS 资源的访问权限
ack-onepilot 需要访问 ARMS 资源,请按集群类型完成授权。已完成相应授权的集群,可直接为应用开启监控。应用监控数据统一在云监控 2.0 控制台查看。各集群类型的授权方式与所需权限策略如下。
集群类型 | 授权方式 | 所需权限策略 |
ACK 托管集群 | 使用集群的 ARMS Addon Token;集群无该 Token 时,为 Worker RAM 角色添加权限策略 |
|
ACK 专有集群和 ACK One 注册集群 | 为组件配置 AccessKey,支持 Helm 配置和 Secret 配置两种方式 |
|
ACK Serverless 和 ECI 场景 | 在云资源访问授权页面完成授权 | — |
ACS 集群 | 通过 ack-onepilot 组件安装参数配置 |
|
ACK 托管集群
先确认集群是否具有 ARMS Addon Token。
进入目标集群的配置管理 > 保密字典。
将命名空间切换为
kube-system,查找addon.arms.token。根据查找结果执行对应操作。
存在该 Secret:集群可使用 Addon Token 授权,无需额外配置,可直接执行步骤三。
未找到该 Secret:为集群角色补充权限。
进入集群信息 > 基本信息,打开集群资源区域中的 Worker RAM 角色。
在角色权限页面添加
AliyunTracingAnalysisFullAccess和AliyunARMSFullAccess策略。保存授权配置。
ACK 专有集群和 ACK One 注册集群
为组件配置具有 AliyunARMSFullAccess、AliyunSTSAssumeRoleAccess 权限的 AccessKey。以下两种方式任选一种即可,无需同时配置。
配置方式 | 凭据存放位置 | 操作范围 |
通过 Helm 配置 | 组件 Helm 配置的 | 仅编辑组件的 Helm 配置 |
通过 Secret 配置 | 名为 | 创建 Secret 并编辑 ack-onepilot Deployment |
通过 Helm 配置
进入集群的应用 > Helm 页面,编辑 ack-onepilot 的配置。
在
controller配置下填写accessKey和accessKeySecret。保存配置,待组件更新完成后重新部署业务应用。
通过 Secret 配置
在 ack-onepilot 所在命名空间创建 Opaque 类型的 Secret,命名为
ack-onepilot-aksk。添加
ak、sk两个键,分别保存 AccessKey ID 和 AccessKey Secret。编辑 ack-onepilot Deployment,将以下环境变量设置为 Secret 引用。
环境变量
Secret
键
ONE_PILOT_ACCESSKEYack-onepilot-akskakONE_PILOT_ACCESSKEY_SECRETack-onepilot-aksksk保存 Deployment 配置,待组件更新完成后重新部署业务应用。
ACK Serverless 和 ECI 场景
打开云资源访问授权页面,完成授权后重启 ack-onepilot 的 Pod。
ACS 集群
步骤一安装 ack-onepilot 时,通过组件安装参数配置 accessKey 和 accessKeySecret,对应凭据应具有 AliyunARMSFullAccess 和 AliyunSTSAssumeRoleAccess 权限。凭据的获取方式请参见创建 AccessKey,授权方式请参见为 RAM 用户授权。
步骤三:为 Node.js 应用开启应用监控
在容器服务管理控制台打开目标集群。
进入工作负载 > 无状态,找到目标 Node.js 应用。
打开应用的 YAML 配置页面。
已有应用:打开应用的 YAML 编辑页面。
新建应用:选择使用 YAML 创建资源。
在
spec.template.metadata.labels下添加以下标签。labels: aliyun.com/app-language: nodejs armsPilotAutoEnable: "on" armsPilotCreateAppName: "nodejs-demo" armsPilotAppWorkspace: "workspace"标签
说明
aliyun.com/app-language应用语言,Node.js 应用填写
nodejs。armsPilotAutoEnable应用监控开关,填写
"on"。armsPilotCreateAppName应用在云监控 2.0 控制台显示的名称,请替换为实际应用名称。
armsPilotAppWorkspace应用监控数据所属的目标工作空间,取值为接入配置中的 Workspace 值,请替换为实际的工作空间名称。不配置该标签时使用默认工作空间。
重要标签需添加到 Pod 模板的
spec.template.metadata.labels下。仅向 Deployment 的metadata.labels添加标签不会使应用接入监控。如果应用已配置
armsAutoInstrumentationEnable: "off",请删除该标签或将其改为"on",否则不会自动加载探针。
如果应用使用 ECMAScript Modules(ESM),在同一位置的
labels下补充以下标签,缩进层级与其他接入标签一致。CommonJS 应用无需配置。labels: aliyun.com/nodejs-module-type: "esm"说明aliyun.com/nodejs-module-type支持commonjs和esm,默认按 CommonJS 方式加载探针。ESM 应用需设置为esm,由组件同时配置探针初始化和 ESM 模块加载。确认容器环境变量与启动参数的配置方式不影响探针注入。
应用启动脚本需保留
NODE_OPTIONS环境变量,避免覆盖组件注入的探针加载参数。如果通过
valueFrom设置NODE_OPTIONS,组件会跳过该容器的探针加载参数注入,此时需将需要保留的非敏感启动参数直接配置到容器的env[].value。通过镜像
ENV或envFrom设置的启动参数,也需显式填写到env[].value,以便组件保留原有参数并追加探针配置。
保存配置并等待新 Pod 启动。已有应用单击更新;新建应用在 YAML 配置完成后创建资源。
以下为 CommonJS 应用的完整 Deployment 配置示例。使用前请替换 image、应用名称(armsPilotCreateAppName)及工作空间(armsPilotAppWorkspace)等占位值。已有应用请保留原有的资源、存储和健康检查等配置,仅添加接入标签。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-demo
namespace: default
labels:
app: nodejs-demo
spec:
replicas: 1
selector:
matchLabels:
app: nodejs-demo
template:
metadata:
labels:
app: nodejs-demo
aliyun.com/app-language: nodejs
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "nodejs-demo"
armsPilotAppWorkspace: "workspace"
spec:
containers:
- name: nodejs-demo
image: your-registry/your-nodejs-app:your-tag
imagePullPolicy: IfNotPresentESM 应用需向上例的 spec.template.metadata.labels 追加 aliyun.com/nodejs-module-type: "esm",其他接入标签保持不变。
查看监控详情
待应用启动后,访问应用接口,使应用产生请求数据。
打开云监控 2.0 控制台,进入配置的工作空间,即
armsPilotAppWorkspace指定的工作空间;未配置该标签时进入默认工作空间。选择所有功能 > 应用可观测 > 应用监控。
从应用列表找到
armsPilotCreateAppName指定的应用,单击应用名称,查看实例、接口和调用链等监控数据。
如果应用列表中未出现该应用,请依次确认:标签变更后是否已重新部署并生成新 Pod、ack-onepilot 版本是否为 5.3.3 及以上、是否已按集群类型完成 ARMS 授权、Pod 模板中是否仍配置 armsAutoInstrumentationEnable: "off"、NODE_OPTIONS 是否通过 valueFrom 设置导致组件跳过注入。