OpenTelemetry 对 Instana Node.js 应用程序的监控
您可以使用基于代理或无服务器追踪的方式,通过 OpenTelemetry 和 Instana 对 Node.js 上的应用程序进行监控。
限制
- Instana 中的未接来电
- 重复的遥测数据
- 仪表故障
Node.js 使用 OpenTelemetry SDK进行监控的选项
使用 OpenTelemetry SDK时,您可以从以下跟踪选项中进行选择:
- 基于代理的追踪 :通过 OpenTelemetry SDK将追踪数据和指标发送至 Instana 代理端点
- 无服务器追踪:
- 使用 OpenTelemetry SDK以 OTLP 格式实现无服务器追踪 :通过 OpenTelemetry SDK( 推荐 )将追踪数据和指标发送至 Instana 的 OTLP 端点
- 使用 OpenTelemetry SDK以 Instana 格式实现无服务器追踪 :通过 OpenTelemetry SDK,将追踪数据和指标以 Instana 格式发送至 Instana
使用 OpenTelemetry SDK进行基于代理的追踪
您可以使用 OpenTelemetry SDK为 Node.js 应用程序启用基于代理的跟踪。
需求
安装软件包
要安装这些软件包,请运行以下命令:
npm i @opentelemetry/exporter-metrics-otlp-http @opentelemetry/exporter-trace-otlp-http @opentelemetry/propagator-instana @opentelemetry/resource-detector-instana @opentelemetry/resources @opentelemetry/sdk-metrics --save
激活软件包
如需查看完整的可运行示例,请参阅基于代理的 HTTP 示例。
...
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-http');
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
const { instanaAgentDetector } = require('@opentelemetry/resource-detector-instana');
const { processDetector, envDetector } = require('@opentelemetry/resources');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
const instanaAgentHost = 'http://127.0.0.1:4318';
const instanaReader = new PeriodicExportingMetricReader({
exportIntervalMillis: 1000 * 10,
exporter: new OTLPMetricExporter({
url: `${otlpEndpoint}/v1/metrics`
})
});
const sdk = new opentelemetry.NodeSDK({
resourceDetectors: [envDetector, processDetector, instanaAgentDetector],
traceExporter: new OTLPTraceExporter({
url: `${otlpEndpoint}/v1/traces`
}),
propagator: new InstanaPropagator(),
metricReader: instanaReader,
instrumentations: ...
});
使用 OpenTelemetry SDK以 OTLP 格式实现无服务器追踪
您可以通过使用 OpenTelemetry SDK(采用 OTLP 格式),将追踪数据和指标发送至 Instana ,从而为 Node.js 应用程序配置无服务器追踪。
需求
- 设置 OpenTelemetry SDK for Node.js
- 选择一个 OTLP 接受端无服务器端点 ,并将该端点设置
INSTANA_ENDPOINT_URL为 URL。 - 获取代理密钥 ,并将 设置
INSTANA_AGENT_KEY为该代理密钥。
安装软件包
要安装以下软件包,请运行以下命令:
npm i @opentelemetry/exporter-metrics-otlp-grpc @opentelemetry/exporter-trace-otlp-grpc @opentelemetry/propagator-instana @opentelemetry/sdk-metrics --save
激活软件包
如需查看完整的示例代码,请参阅《 Serverless OpenTelemetry OTLP 格式示例》。
...
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
const otlpEndpoint = process.env.INSTANA_ENDPOINT_URL;
const metadata = new grpc.Metadata();
metadata.set('x-instana-key', process.env.INSTANA_AGENT_KEY);
const instanaReader = new PeriodicExportingMetricReader({
exportIntervalMillis: 1000 * 10,
exporter: new OTLPMetricExporter({
url: otlpEndpoint,
metadata
})
});
const sdk = new opentelemetry.NodeSDK({
traceExporter: new OTLPTraceExporter({
url: otlpEndpoint,
metadata
}),
propagator: new InstanaPropagator(),
metricReader: instanaReader,
instrumentations: [...]
});
...
使用 OpenTelemetry SDK以 Instana 格式实现无服务器追踪
当由 OpenTelemetry 监控的应用程序运行时, Instana 导出器会将 OpenTelemetry 跨度转换为 Instana 跨度,并将其发送至后端端点。
OpenTelemetry 的跟踪信息会在 Instana 的用户界面中以常规的 Instana 跟踪跨度形式显示。
需求
- 安装 OpenTelemetry SDK for Node.js
- 选择一个 OTLP 接受端点 ,并将该端点设置
INSTANA_ENDPOINT_URL为 URL。 - 获取代理密钥 ,并将 设置
INSTANA_AGENT_KEY为该代理密钥。
正在安装
运行以下命令安装以下软件包:
npm i @instana/opentelemetry-exporter@ @opentelemetry/propagator-instana --save
正在激活
如需查看完整的示例代码,请参阅《 Serverless OpenTelemetry Instana 格式示例》。
...
const { InstanaExporter } = require('@instana/opentelemetry-exporter');
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
/*
* If you have not provided the agent key and the serverless endpoint URL via environment variables:
* const instanaTraceExporter = new InstanaExporter({ agentKey: 'agent_key', endpointUrl: 'endpoint_url' });
*/
const instanaTraceExporter = new InstanaExporter();
const sdk = new opentelemetry.NodeSDK({
...
traceExporter: instanaTraceExporter,
propagator: new InstanaPropagator(),
instrumentations: [...]
});
OpenTelemetry 插件概述
使用适用于 Node.js 的 Instana OpenTelemetry 插件,以管理追踪传播、采样和资源检测,从而提升遥测数据的相关性和上下文信息。
OpenTelemetry 繁殖者
OpenTelemetry 上下文传播器包 @opentelemetry/propagator-instana 将专有的 Instana 跟踪关联头转换为 OpenTelemetry 跟踪上下文,反之亦然。
有关 OpenTelemetry 上下文传播器的通用信息,请参阅 OpenTelemetry 中的“传播器”部分。
安装 OpenTelemetry 育苗箱
要安装 OpenTelemetry 培育器,请运行以下命令:
npm install --save @opentelemetry/propagator-instana@
激活 OpenTelemetry 传播器
要激活 OpenTelemetry 传播器,请运行以下命令:
...
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
// ...
new opentelemetry.NodeSDK({
...
propagator: new InstanaPropagator(),
...
});
OpenTelemetry 采样器
OpenTelemetry 采样器包 @instana/opentelemetry-sampler 覆盖了默认的 OpenTelemetry 采样行为,使得所有请求都会被采样,除非跟踪上下文中该 sampled 标志的值为 false。
安装 OpenTelemetry 采样器
要安装 OpenTelemetry 采样器,请运行以下命令:
npm install --save @instana/opentelemetry-sampler@
激活 OpenTelemetry 采样器
@opentelemetry/propagator-instana该采样器需要与该软件包配合使用。
const { InstanaPropagator } = require('@opentelemetry/propagator-instana');
const { InstanaAlwaysOnSampler } = require('@instana/opentelemetry-sampler');
const sdk = new opentelemetry.NodeSDK({
...
propagator: new InstanaPropagator(),
sampler: new InstanaAlwaysOnSampler()
...
});
...
OpenTelemetry 资源检测器
OpenTelemetry 资源检测器包 @opentelemetry/resource-detector-instana 通过添加额外的资源属性,丰富了 OpenTelemetry 的追踪信息。
安装 OpenTelemetry 资源检测器
要安装 OpenTelemetry 资源检测器,请运行以下命令:
npm install --save @opentelemetry/resource-detector-instana
激活 OpenTelemetry 资源检测器
import {
Resource,
processDetector,
envDetector,
} from "@opentelemetry/resources";
import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions";
import { NodeSDK } from "@opentelemetry/sdk-node";
import { instanaAgentDetector } from "@opentelemetry/resource-detector-instana";
const globalResource = new Resource({
[SemanticResourceAttributes.SERVICE_NAME]: "TestService",
});
const sdk = new NodeSDK({
resourceDetectors: [envDetector, processDetector, instanaAgentDetector]
resource: globalResource,
});
...
此外,您还可以设置以下环境变量:
INSTANA_RETRY_TIMEOUT_MS: 资源检测器将尝试重试三次,以连接到 Instana 代理。 该值表示两次重试之间的超时时间。1000(默认:)INSTANA_AGENT_TIMEOUT_MS: 连接到 Instana 代理时发生的客户端超时。3000(默认:)