OpenTelemetry 对 Instana Node.js 应用程序的监控

您可以使用基于代理或无服务器追踪的方式,通过 OpenTelemetry 和 Instana 对 Node.js 上的应用程序进行监控。

限制

注意: 请避免在同一个 Node.js 应用程序中同时使用 OpenTelemetry SDK 和 Instana Node.js Tracer。 同时使用这两种方法可能会导致以下问题:
  • Instana 中的未接来电
  • 重复的遥测数据
  • 仪表故障

Node.js 使用 OpenTelemetry SDK进行监控的选项

使用 OpenTelemetry SDK时,您可以从以下跟踪选项中进行选择:

注意: 您必须发送至少一个指标,才能解析主机、进程和服务之间的基础设施关联关系。

使用 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 应用程序配置无服务器追踪。

安装软件包

要安装以下软件包,请运行以下命令:

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 跟踪跨度形式显示。

正在安装

运行以下命令安装以下软件包:

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 资源检测器

注意:Instana OpenTelemetry 资源检测器始终要求在同一主机上部署并运行 Instana 代理。

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(默认:)