Novos recursos de métricas para OpenTelemetry no Azure Monitor

Microsoft lançado em pré-visualização uma série de atualizações aos pacotes do Azure Monitor OpenTelemetry Exporter para .RELATÓRIO, Node.jse Pitão aplicativos. Os novos recursos incluem: exportação OpenTelemetry métricas para Insights de aplicativos do Azure Monitor (AMAI), controle de amostragem aprimorado para rastreamentos e escopos, bem como cache e novas tentativas de entrega de dados de telemetria durante desconexões temporárias para Azure Monitor Application Insights.

Monitor Azure é um conjunto de ferramentas para coletar, analisar e responder a dados de telemetria de aplicativos e infraestrutura de nuvem e ambientes locais. AMAI é uma das ferramentas do Azure Monitor e fornece monitoramento de desempenho de aplicativos (APM) para seus usuários. Além disso, o Azure Monitor Application Insights dá suporte ao rastreamento distribuído, um dos pilares do paradigma da observabilidadeem vários aplicativos.

OpenTelemetry é uma estrutura que fornece APIs, SDKs e ferramentas independentes de fornecedor para consumir, transformar e exportar dados de telemetria para back-ends de observabilidade. Em uma postagem de blog em 2021, a Microsoft delineou seu roteiro para integrar o OpenTelemetry em seu ecossistema mais amplo do Azure Monitor. O objetivo imediato era criar exportadores diretos de aplicativos baseados em OpenTelemetry para AMAI, em oposição à rota OpenTelemetry de fato de um exportador OTLP para Azure Monitor por meio do OpenTelemetry Collector.


Fonte:

Um exemplo de um exportador direto em um aplicativo Node.js com rastreamento OpenTelemetry seria:

const { AzureMonitorTraceExporter } = require("@azure/monitor-opentelemetry-exporter");
const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
const { BatchSpanProcessor } = require("@opentelemetry/sdk-trace-base");


const provider = new NodeTracerProvider({
  resource: new Resource({
    [SemanticResourceAttributes.SERVICE_NAME]: "basic-service",
  }),
});
provider.register();

// Create an exporter instance
const exporter = new AzureMonitorTraceExporter({
  connectionString:
    process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"] || ""
});

// Add the exporter to the provider
provider.addSpanProcessor(
  new BatchSpanProcessor(exporter, {
    bufferTimeout: 15000,
    bufferSize: 1000
  })
);

Com o lançamento de novas atualizações para os pacotes do Azure Monitor OpenTelemetry Exporter, a exportação de métricas para AMAI agora seria possível conforme mostrado abaixo:

const { MeterProvider, PeriodicExportingMetricReader } = require("@opentelemetry/sdk-metrics");
const { Resource } = require("@opentelemetry/resources");
const { AzureMonitorMetricExporter } = require("@azure/monitor-opentelemetry-exporter");

// Add the exporter into the MetricReader and register it with the MeterProvider
const provider = new MeterProvider();
const exporter = new AzureMonitorMetricExporter({
  connectionString:
    process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"] || "",
});
const metricReaderOptions = {
  exporter: exporter,
};
const metricReader = new PeriodicExportingMetricReader(metricReaderOptions);
provider.addMetricReader(metricReader);
);

Para gerenciar a quantidade de dados de telemetria enviados para Application Insights, os pacotes agora incluem um amostrador que controla a porcentagem de rastreamentos enviados. Para o exemplo de rastreamento Node.js anterior, isso seria semelhante a:

import { ApplicationInsightsSampler, AzureMonitorTraceExporter } from "@azure/monitor-opentelemetry-exporter";

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

Por fim, no caso de uma falha de conexão com AMAI, os exportadores diretos gravam suas cargas no armazenamento local e tentam redistribuir periodicamente em um período de 48 horas. Esses parâmetros podem ser configurados ao instanciar um exportador, conforme a figura abaixo:

const exporter = new AzureMonitorTraceExporter({
    connectionString:
        process.env["APPLICATIONINSIGHTS_CONNECTION_STRING"],
    storageDirectory: "C:\SomeDirectory",     // your desired location
    disableOfflineStorage: false               // enabled by default, set to disable
});