Azure Monitor OpenTelemetry Exporter biblioteca cliente para JavaScript - versão 1.0.0-beta.45

Versão npm

Como começar

Este pacote de exportação pressupõe que seu aplicativo já esteja instrumentado com o SDK do OpenTelemetry. Quando estiver pronto para exportar dados do OpenTelemetry, você poderá adicionar esse exportador ao seu aplicativo.

Instalar o pacote

npm install @azure/monitor-opentelemetry-exporter

Ambientes com suporte no momento

Consulte nossa política de suporte para obter mais detalhes.

Aviso: Este SDK só funciona para ambientes Node.js. Use o SDK do JavaScript do Application Insights para ambientes de navegador.

Pré-requisitos

Rastreamento distribuído

Adicionar o exportador ao seu provedor de rastreamento OpenTelemetry existente (NodeTracerProvider / BasicTracerProvider)

import { AzureMonitorTraceExporter } from "@azure/monitor-opentelemetry-exporter";
import { NodeTracerProvider, BatchSpanProcessor } from "@opentelemetry/sdk-trace-node";
import { resourceFromAttributes } from "@opentelemetry/resources";
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";

// Create an exporter instance
const exporter = new AzureMonitorTraceExporter({
  connectionString: "<connection string>",
});

// Create and configure the Node Tracer provider
const tracerProvider = new NodeTracerProvider({
  resource: resourceFromAttributes({
    [ATTR_SERVICE_NAME]: "basic-service",
  }),
  spanProcessors: [
    new BatchSpanProcessor(exporter, {
      exportTimeoutMillis: 15000,
      maxQueueSize: 1000,
    }),
  ],
});

// Register Tracer Provider as global
tracerProvider.register();

Métricas

Adicionar o exportador ao seu provedor de medidor OpenTelemetry existente (MeterProvider)

import { AzureMonitorMetricExporter } from "@azure/monitor-opentelemetry-exporter";
import { PeriodicExportingMetricReader, MeterProvider } from "@opentelemetry/sdk-metrics";
import { metrics } from "@opentelemetry/api";

// Add the exporter into the MetricReader and register it with the MeterProvider
const exporter = new AzureMonitorMetricExporter({
  connectionString: "<connection string>",
});

const metricReaderOptions = {
  exporter: exporter,
};
const metricReader = new PeriodicExportingMetricReader(metricReaderOptions);
const meterProvider = new MeterProvider({
  readers: [metricReader],
});

// Register Meter Provider as global
metrics.setGlobalMeterProvider(meterProvider);

Registros

Adicionar o Exportador de Log ao seu provedor de agente de log OpenTelemetry existente (LoggerProvider)

import { AzureMonitorLogExporter } from "@azure/monitor-opentelemetry-exporter";
import { BatchLogRecordProcessor, LoggerProvider } from "@opentelemetry/sdk-logs";
import { logs } from "@opentelemetry/api-logs";

// Add the Log exporter into the logRecordProcessor and register it with the LoggerProvider
const exporter = new AzureMonitorLogExporter({
  connectionString: "<connection string>",
});

const logRecordProcessor = new BatchLogRecordProcessor({ exporter });
const loggerProvider = new LoggerProvider({
  processors: [logRecordProcessor],
});

// Register logger Provider as global
logs.setGlobalLoggerProvider(loggerProvider);

Resultados de disponibilidade

Após registrar o provedor do logger, emita um registro de log do OpenTelemetry com os atributos de disponibilidade abaixo. O exportador converte o registro em telemetria de disponibilidade do Application Insights.

import { logs } from "@opentelemetry/api-logs";

const logger = logs.getLogger("availability");
logger.emit({
  body: "Homepage availability test completed.",
  attributes: {
    "microsoft.availability.id": "availability-test-run-123",
    "microsoft.availability.name": "Homepage",
    "microsoft.availability.duration": "00:00:00.250",
    "microsoft.availability.success": true,
    "microsoft.availability.runLocation": "westus2",
    "microsoft.availability.message": "HTTP 200",
  },
});

Os atributos a seguir são obrigatórios:

Attribute Descrição
microsoft.availability.id Identificador para este teste.
microsoft.availability.name Nome do teste de disponibilidade.
microsoft.availability.duration Duração do teste, por 00:00:00.250exemplo.
microsoft.availability.success Se o teste foi bem-sucedido.

microsoft.availability.runLocation e microsoft.availability.message são opcionais. Se o atributo da mensagem for omitido, o corpo do log é usado como a mensagem de disponibilidade. O carimbo de tempo do resultado de disponibilidade vem do registro de log do OpenTelemetry.

Registros de disponibilidade usam o mesmo contexto de correlação que outros logs do OpenTelemetry. Quando um registro é emitido com um espaço ativo (ou um contexto explícito do OpenTelemetry), o ID do traço de span e o ID do span preenchem o ID da operação e o ID pai do Application Insight. Esses valores são autoritativos e não podem ser anulados por atributos logarítmicos. O ID de disponibilidade para execução de teste permanece separado do ID de operação.

Se algum atributo necessário estiver ausente ou vazio, o exportador envia o registro como telemetria de mensagem regular. Atributos de exceção e eventos personalizados têm precedência sobre atributos de disponibilidade.

Amostragem

Você pode habilitar a amostragem para limitar a quantidade de registros de telemetria recebidos. Para habilitar a amostragem correta no Application Insights, use o ApplicationInsightsSampler conforme mostrado abaixo.

import { ApplicationInsightsSampler } from "@azure/monitor-opentelemetry-exporter";
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
import { resourceFromAttributes } from "@opentelemetry/resources";
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";

// Sampler expects a sample rate of between 0 and 1 inclusive
// A rate of 0.75 means approximately 75 % of your traces will be sent
const aiSampler = new ApplicationInsightsSampler(0.75);
const provider = new NodeTracerProvider({
  sampler: aiSampler,
  resource: resourceFromAttributes({
    [ATTR_SERVICE_NAME]: "basic-service",
  }),
});

provider.register();

Exemplos

Para obter exemplos completos de alguns cenários de campeões, consulte a samples/ pasta.

Conceitos principais

Para obter mais informações sobre o projeto OpenTelemetry, examine as Especificações do OpenTelemetry.

Limite de Tamanho de Dimensões Personalizadas

Por padrão, os valores das dimensões personalizadas são truncados para 64KB. Isso protege contra cargas úteis inesperadamente grandes.

Resolução de problemas

Habilitar o log de depuração

Você pode habilitar o log de depuração alterando o nível de log do seu provedor.

import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api";

const provider = new NodeTracerProvider();
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ALL);
provider.register();

Registro

Habilitar o log do Azure também pode ajudar a descobrir informações úteis sobre falhas. Para ver um log de solicitações e respostas HTTP, defina a variável de ambiente AZURE_LOG_LEVEL como info. Como alternativa, o registro em log pode ser habilitado em runtime chamando setLogLevel no @azure/logger:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Para obter instruções mais detalhadas sobre como habilitar logs, você pode examinar os documentos do pacote @azure/agente.

Próximas etapas

Esse exportador foi feito para ser usado com o OpenTelemetry JS.

Registro de plug-ins

Para ver se um plug-in já foi criado para uma biblioteca que você está usando, consulte o OpenTelemetry Registry.

Se você não puder colocar sua biblioteca no registro, sinta-se à vontade para sugerir uma nova solicitação de plug-in em opentelemetry-js-contrib.

Contribuindo

Se você quiser contribuir com essa biblioteca, leia o guia de contribuição para saber mais sobre como criar e testar o código.