应用性能监控

接入Node.js应用

2024-07-16 03:23:58

通过OpenTelemetry上报Node.js应用数据

在监控Node.js应用之前,您需要通过客户端将应用数据上报至APM服务端。本文介绍了如何通过OpenTelemetry将Node.js Express应用接入APM。

前提条件

完成vpce接入。

接入步骤

1.  引入opentelemetry相关依赖。

npm install --save @opentelemetry/api
 npm install --save @opentelemetry/auto-instrumentations-node
 npm install --save @opentelemetry/sdk-node

2.  查看接入点信息。

应用列表的接入指引会根据您所在资源池提供“通过 HTTP 上报数据”和“通过 gRPC 上报数据”的ENDPOINT(天翼云vpc网络接入点)、鉴权TOKEN信息。

3.  初始化Node.js Provider。

 请将<url>和<token>替换成相应地域的接入点信息。

const opentelemetry = require('@opentelemetry/sdk-node');
 const { Resource } = require('@opentelemetry/resources');
 const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions');
 const {
   getNodeAutoInstrumentations,
 } = require('@opentelemetry/auto-instrumentations-node');
 const {
   OTLPTraceExporter,
 } = require('@opentelemetry/exporter-trace-otlp-proto');
 const {
   OTLPMetricExporter,
 } = require('@opentelemetry/exporter-metrics-otlp-proto');
 const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
 const { diag, DiagConsoleLogger, DiagLogLevel } = require('@opentelemetry/api');
 
 // 打印日志
 diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO);
 
 const resource = new Resource({
   [SemanticResourceAttributes.SERVICE_NAME]: 'nodejs-demo', // 在这里设置您的服务名称
 });
 
 const sdk = new opentelemetry.NodeSDK({
   resource: resource, // 添加resource配置
   traceExporter: new OTLPTraceExporter({
     url: '<url>', // 通过otel http 方式上报的地址
     headers: {'x-ctg-authorization': '<token>'},//上鉴权token 
   }),
   instrumentations: [getNodeAutoInstrumentations()],
 });
 
 sdk.start();

4.  client上报demo。

// 引入OpenTelemetry SDK和自动instrumentation
 require('./tracing'); // 确保在代码最顶部引入
 
 const fetch = require('node-fetch');
 
 async function makeRequest() {
   const response = await fetch('http://localhost:3001/test');
   const data = await response.text();
   console.log(data);
 }
 
 makeRequest();

5.  服务端上报demo。

// 引入OpenTelemetry SDK和自动instrumentation
 require('./tracing'); // 确保在代码最顶部引入
 
 const express = require('express');
 const app = express();
 const port = 3001;
 
 app.get('/test', (req, res) => {
   res.send('Hello from the server!');
 });
 
 app.listen(port, () => {
   console.log(`Server listening at http://localhost:${port}`);
 });

6.  通过上面步骤就可以在控制台查看node.js产生的监控数据了。更详细的接入demo请参考示例


sY1._XF_ZhwA