searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

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

2023-11-06 01:29:18
22
0

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

  1. 引入依赖包
"dependencies": {
"@hapi/hapi": "^19.2.0",
"@opentelemetry/api": "^1.0.2",
"@opentelemetry/exporter-jaeger": "^0.25.0",
"@opentelemetry/exporter-zipkin": "^0.25.0",
"@opentelemetry/instrumentation": "^0.25.0",
"@opentelemetry/instrumentation-hapi": "^0.23.0",
"@opentelemetry/instrumentation-http": "^0.25.0",
"@opentelemetry/sdk-trace-node": "^0.25.0",
"@opentelemetry/sdk-trace-base": "^0.25.0",
"axios": "^0.21.1"
}
  1. 初始化nodejs Provider
const { Resource } = require("@opentelemetry/resources");
const {
    OTLPTraceExporter,
  } = require("@opentelemetry/exporter-trace-otlp-proto");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const {
  SemanticResourceAttributes,
} = require("@opentelemetry/semantic-conventions");
const {
    SimpleSpanProcessor,
    ConsoleSpanExporter,
    BatchSpanProcessor
  } = require("@opentelemetry/sdk-trace-base");

const provider = new NodeTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(), // 主机名
    [SemanticResourceAttributes.SERVICE_NAME]: "service-name", 
  }),
});

registerInstrumentations({
  tracerProvider: provider,
  instrumentations: [new HttpInstrumentation()],
});


const exporter = new OTLPTraceExporter({ url: "", headers: {},});
// 
provider.addSpanProcessor(new BatchSpanProcessor(exporter)); // 通过HTTP上报Trace数据
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter())); // 可选,Trace数据打印到终端
provider.register();
  1. client 上报demo
const api = require('@opentelemetry/api');
const { Span } = require('@opentelemetry/sdk-trace-base');
const axios = require('axios').default;
const tracer = api.trace.getTracer('hapi-example');

function makeRequest() {
const span = tracer.startSpan('client.makeRequest()', {
    kind: api.SpanKind.CLIENT,
});

  api.context.with(api.trace.setSpan(api.ROOT_CONTEXT, span), async () => {
try {
const res = await axios.get('addr');
      span.setStatus({ code: api.SpanStatusCode.OK });
console.log(res.statusText);
} catch (e) {
      span.setStatus({ code: api.SpanStatusCode.ERROR, message: e.message });
}
    span.end();
console.log('Sleeping 5 seconds before shutdown to ensure all records are flushed.');
setTimeout(() => { console.log('Completed.'); }, 5000);
});
}
makeRequest();
  1. 服务端上报demo
const api = require('@opentelemetry/api');
function runTest(_, h) {
  const currentSpan = api.trace.getSpan(api.context.active());
  const { traceId } = currentSpan.spanContext();
  console.log(`traceid: ${traceId}`);
}
  1. 通过上面步骤就可以在控制台查看nodejs 产生的链路数据了。更详细的接入demo请参考

 

0条评论
0 / 1000
李****涛
13文章数
0粉丝数
李****涛
13 文章 | 0 粉丝
原创

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

2023-11-06 01:29:18
22
0

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

  1. 引入依赖包
"dependencies": {
"@hapi/hapi": "^19.2.0",
"@opentelemetry/api": "^1.0.2",
"@opentelemetry/exporter-jaeger": "^0.25.0",
"@opentelemetry/exporter-zipkin": "^0.25.0",
"@opentelemetry/instrumentation": "^0.25.0",
"@opentelemetry/instrumentation-hapi": "^0.23.0",
"@opentelemetry/instrumentation-http": "^0.25.0",
"@opentelemetry/sdk-trace-node": "^0.25.0",
"@opentelemetry/sdk-trace-base": "^0.25.0",
"axios": "^0.21.1"
}
  1. 初始化nodejs Provider
const { Resource } = require("@opentelemetry/resources");
const {
    OTLPTraceExporter,
  } = require("@opentelemetry/exporter-trace-otlp-proto");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { registerInstrumentations } = require("@opentelemetry/instrumentation");
const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
const {
  SemanticResourceAttributes,
} = require("@opentelemetry/semantic-conventions");
const {
    SimpleSpanProcessor,
    ConsoleSpanExporter,
    BatchSpanProcessor
  } = require("@opentelemetry/sdk-trace-base");

const provider = new NodeTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.HOST_NAME]: require("os").hostname(), // 主机名
    [SemanticResourceAttributes.SERVICE_NAME]: "service-name", 
  }),
});

registerInstrumentations({
  tracerProvider: provider,
  instrumentations: [new HttpInstrumentation()],
});


const exporter = new OTLPTraceExporter({ url: "", headers: {},});
// 
provider.addSpanProcessor(new BatchSpanProcessor(exporter)); // 通过HTTP上报Trace数据
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter())); // 可选,Trace数据打印到终端
provider.register();
  1. client 上报demo
const api = require('@opentelemetry/api');
const { Span } = require('@opentelemetry/sdk-trace-base');
const axios = require('axios').default;
const tracer = api.trace.getTracer('hapi-example');

function makeRequest() {
const span = tracer.startSpan('client.makeRequest()', {
    kind: api.SpanKind.CLIENT,
});

  api.context.with(api.trace.setSpan(api.ROOT_CONTEXT, span), async () => {
try {
const res = await axios.get('addr');
      span.setStatus({ code: api.SpanStatusCode.OK });
console.log(res.statusText);
} catch (e) {
      span.setStatus({ code: api.SpanStatusCode.ERROR, message: e.message });
}
    span.end();
console.log('Sleeping 5 seconds before shutdown to ensure all records are flushed.');
setTimeout(() => { console.log('Completed.'); }, 5000);
});
}
makeRequest();
  1. 服务端上报demo
const api = require('@opentelemetry/api');
function runTest(_, h) {
  const currentSpan = api.trace.getSpan(api.context.active());
  const { traceId } = currentSpan.spanContext();
  console.log(`traceid: ${traceId}`);
}
  1. 通过上面步骤就可以在控制台查看nodejs 产生的链路数据了。更详细的接入demo请参考

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0