OpenTelemetry-Ext-JS 使用教程
1、项目介绍
OpenTelemetry-Ext-JS 是 OpenTelemetry 项目的一个扩展库,专门为 JavaScript 和 Node.js 应用程序设计。它集成了多种常用库的自动追踪功能,包括 KafkaJS、TypeORM、Sequelize 等,帮助开发者轻松实现分布式追踪,从而提升应用性能和稳定性。该项目由 Aspecto 提供并维护,严格遵循 OpenTelemetry 的语义约定,确保了数据的一致性和互操作性。
2、项目快速启动
安装
首先,你需要安装 OpenTelemetry-Ext-JS 及其依赖:
npm install @opentelemetry/sdk-node @opentelemetry/api @aspecto/opentelemetry-ext-js
初始化
在你的应用程序入口文件中,添加以下代码以初始化 OpenTelemetry:
const { NodeTracerProvider } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@aspecto/opentelemetry-ext-js');
const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base');
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
const provider = new NodeTracerProvider({
instrumentations: [
getNodeAutoInstrumentations()
]
});
provider.addSpanProcessor(new SimpleSpanProcessor(new JaegerExporter()));
provider.register();
console.log('Tracing initialized');
运行
启动你的应用程序,现在你应该能够看到追踪数据被发送到 Jaeger。
3、应用案例和最佳实践
案例一:Web 应用监控
假设你有一个使用 Express 构建的 Web 应用,你可以通过 OpenTelemetry-Ext-JS 轻松实现监控:
const express = require('express');
const { ExpressInstrumentation } = require('@aspecto/opentelemetry-ext-js');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const app = express();
registerInstrumentations({
instrumentations: [
new ExpressInstrumentation()
]
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
最佳实践
- 自动化追踪:尽可能使用自动追踪功能,减少手动设置的工作量。
- 选择合适的 exporter:根据你的需求选择合适的 exporter,如 Jaeger、Zipkin 等。
- 监控关键路径:确保监控应用程序的关键路径,如数据库操作、外部服务调用等。
4、典型生态项目
KafkaJS 集成
OpenTelemetry-Ext-JS 提供了对 KafkaJS 的集成,帮助你追踪消息传递的过程:
const { Kafka } = require('kafkajs');
const { KafkaJsInstrumentation } = require('@aspecto/opentelemetry-ext-js');
const kafka = new Kafka({
clientId: 'my-app',
brokers: ['localhost:9092']
});
registerInstrumentations({
instrumentations: [
new KafkaJsInstrumentation()
]
});
const producer = kafka.producer();
const consumer = kafka.consumer({ groupId: 'test-group' });
// 生产者发送消息
await producer.connect();
await producer.send({
topic: 'test-topic',
messages: [
{ value: 'Hello Kafka!' }
]
});
// 消费者接收消息
await consumer.connect();
await consumer.subscribe({ topic: 'test-topic', fromBeginning: true });
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log({
value: message.value.toString(),
});
},
});
通过以上步骤,你可以轻松地将 OpenTelemetry-Ext-JS 集成到你的 JavaScript 和 Node.js 项目中,实现高效的分布式追踪和监控。