快速接入Agent
前提条件
- 部署APM Agent时,必须确保接入APM的机器与APM服务网络连通,Agent才能正常工作。可使用“curl -kv”命令测试目标机器与APM服务器网络是否连通。例如,以检查华北-北京四区域,且接入方式选择“增强型探针”的连通性为例,请登录应用所部署的机器,并输入命令curl -kv 100.125.12.108:41333,其他区域地址请参考探针接入地址。
- Node.js语言,支持增强型探针、Skywalking和OpenTelemetry。
操作步骤
- 登录APM控制台。
- 单击左侧
,选择“管理与监管 > 应用性能管理 APM”,进入APM服务页面。
- 在左侧导航栏中选择“应用监控 > 应用列表”。
- 单击“接入应用”,进入接入应用页面。
图1 接入应用
- 选择“区域”和“应用”。单击“创建应用”,弹出“创建应用”弹窗,可以具体操作参见创建应用。
图2 基础信息
- “接入方式”选择增强型探针、Skywalking或者OpenTelemetry。
- “服务端语言”选择Node.js。
图3 接入方式
- 使用PuTTY等远程登录工具,登录待安装Agent的Linux操作系统主机,并以root权限执行相关命令。
- 根据应用类型选择接入对应的接入方式,按照步骤接入。
- 增强型探针
如果接入方式选择“增强型探针”,则数据接入方式选择“无修改接入”;
如果接入方式选择其他类型的探针,则数据接入方式选择“自定义接入”。
表1 支持的环境参数列表 环境变量
入参
描述
选项
APM_APP_NAME
appName
组件名称,一个组件可以包含多个环境。不能重复,如果要重复,使用APM_INSTANCE_NAME区分。
必填
APM_AK
AK
APM访问密钥ID(AK)。
必填
APM_SK
SK
APM秘密访问密钥(SK)。
必填
APM_MASTER_ADDRESS
masterAddress
APM探针的接入地址。
必填
APM_BUSINESS
business
应用:代表一个逻辑单元,是一个全局概念,各个region都可以看到相同的应用信息,比如一个租户下面比较独立的功能模块可以定义为一个应用。如果填写,则必须提前创建该应用。如果为空,则代表默认应用。
选填
APM_SUB_BUSINESS
subBusiness
子应用:在一个应用下面可以创建多个子应用,主要起文件夹和管理的功能,子应用为全局概念,当前最多支持三层子应用,子应用格式为:sub1/sub2/sub3
选填
APM_ENV
env
环境:一个组件由于部署不同的配置参数,会形成的多个环境。
选填
APM_ENV_TAG
envTag
环境标签:是在环境上的一个属性,多个环境可能具有相同的标签,可以通过标签对环境进行过滤。
选填
APM_INSTANCE_NAME
instanceName
实例:是环境下的一个进程,名称由主机名+ip+实例名称组成。
选填
- 无修改接入
- 请到“系统管理 > 访问密钥”界面,获取JavaAgent所需的AK、SK。获取“访问密钥”的方法,请参见访问密钥。
- 使用PuTTY等远程登录工具,登录待安装Agent的Linux操作系统主机,并以root或service权限执行相关命令。执行安装命令的用户需要和启动应用的用户保持一致。
- 接入命令如下:
npm install -S apm-nodejs-agent && APM_APP_NAME=apm-nodejs-demo APM_AK=*** APM_SK=*** APM_MASTER_ADDRESS=https://**.**.**.**:*** node -r apm-nodejs-agent/tracing app.js; history -cw; history -r
- 自定义接入
- 使用PuTTY等远程登录工具,登录待安装Agent的Linux操作系统主机,并以root或service权限执行相关命令。执行安装命令的用户需要和启动应用的用户保持一致。
- 安装apm-nodejs-agent,命令如下:
npm install -S apm-nodejs-agent
- 添加agent启动和配置项,示例如下:
const process = require('process'); const agent = require('apm-nodejs-agent'); agent.start({ appName: 'apm-nodejs-demo', masterAddress: 'https://**.**.**.**:***', AK: '***', SK: '***' }).then(()=>{ console.log('Agent trace start'); }).catch((error)=>{ console.log('Error agent trace',error); }) process.on('SIGTERM',()=>{ agent.stop(); })
- 无修改接入
- OpenTelemetry
- 侵入式接入
- 添加依赖。
npm install --save @grpc/grpc-js @opentelemetry/exporter-trace-otlp-grpc @opentelemetry/instrumentation-express @opentelemetry/instrumentation-http @opentelemetry/resources @opentelemetry/sdk-node @opentelemetry/sdk-trace-base @opentelemetry/semantic-conventions
- 对接OpenTelemetry,在 express入口文件业务代码前面加上如下内容。
const { NodeSDK } = require("@opentelemetry/sdk-node"); const { Resource } = require("@opentelemetry/resources"); const { OTLPTraceExporter } = require("@opentelemetry/exporter-trace-otlp-grpc"); const { ExpressInstrumentation } = require("@opentelemetry/instrumentation-express"); const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http"); const { SemanticResourceAttributes } = require("@opentelemetry/semantic-conventions"); const { BatchSpanProcessor } = require("@opentelemetry/sdk-trace-base"); const grpc = require("@grpc/grpc-js"); const service_name = "应用名称.组件名称.环境名称"; const endpoint = "http://**.**.**.***:****"; const authentication = "********"; const metadata = new grpc.Metadata(); metadata.set("Authentication", authentication); const exporter = new OTLPTraceExporter({url: endpoint, metadata}); const sdk = new NodeSDK({ spanProcessor: new BatchSpanProcessor(exporter), resource: new Resource({ [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(), // your host name [SemanticResourceAttributes.SERVICE_NAME]: service_name, }), instrumentations: [HttpInstrumentation, ExpressInstrumentation], }); sdk.start();
- 添加依赖。
- 非侵入式接入
参考 官方网站。
- 侵入式接入
- Skywalking
- 下载Skywalking。使用官方推荐的新库来接入,原来的模块为:SkyAPM-nodejs,版本要求NodeJS >= 10,控制台输入如下命令:
npm i skywalking-backend-js
- 接入Agent。接入Agent需要配置 接入点、令牌Token、应用名称三个必填参数,在您的启动文件中配置如下参数:
const { default: agent } = require('skywalking-backend-js'); agent.start({ serviceName: '应用名称.组件名称.环境名称', collectorAddress: '**.**.**.**:****', authorization: 'ZvL3****qe' });
- 重启应用。按照正常命令启动项目,无报错,数据正常上报即启动成功。如出现报错,请检查配置与版本;如无上报数据,请检查token与应用名称是否正确。
- 下载Skywalking。使用官方推荐的新库来接入,原来的模块为:SkyAPM-nodejs,版本要求NodeJS >= 10,控制台输入如下命令:
- 增强型探针