O que é OpenTelemetry

OpenTelemetry é um projeto open-source criado pela Cloud Native Computing Foundation (CNCF) que fornece uma coleção de ferramentas, APIs e SDKs para a geração, coleta e exportação de telemetria, ou seja, dados de monitoramento, de aplicações e sistemas. O objetivo principal do OpenTelemetry é padronizar a forma como esses dados são coletados e transmitidos, facilitando a observação e o diagnóstico de problemas em sistemas distribuídos.

Como funciona?

Instrumentação:

Instrumentar uma aplicação significa adicionar pontos de coleta de dados de telemetria (métricas, logs, rastreamentos) no código da aplicação. Isso pode ser feito manualmente ou utilizando bibliotecas que já fornecem essa instrumentação.

Manual: Adiciona código para capturar dados de telemetria diretamente nas partes importantes do código da aplicação.

				
					/*instrumentation.js*/
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node');
const {
  PeriodicExportingMetricReader,
  ConsoleMetricExporter,
} = require('@opentelemetry/sdk-metrics');
const { Resource } = require('@opentelemetry/resources');
const {
  SEMRESATTRS_SERVICE_NAME,
  SEMRESATTRS_SERVICE_VERSION,
} = require('@opentelemetry/semantic-conventions');

const sdk = new NodeSDK({
  resource: new Resource({
    [SEMRESATTRS_SERVICE_NAME]: 'dice-server',
    [SEMRESATTRS_SERVICE_VERSION]: '0.1.0',
  }),
  traceExporter: new ConsoleSpanExporter(),
  metricReader: new PeriodicExportingMetricReader({
    exporter: new ConsoleMetricExporter(),
  }),
});

sdk.start();

				
			

Automática: Utiliza bibliotecas que automaticamente instrumentam frameworks e bibliotecas populares.

				
					npm install --save @opentelemetry/api
npm install --save @opentelemetry/auto-instrumentations-node

export OTEL_TRACES_EXPORTER="otlp"
export OTEL_EXPORTER_OTLP_ENDPOINT="your-endpoint"
export OTEL_NODE_RESOURCE_DETECTORS="env,host,os"
export OTEL_SERVICE_NAME="your-service-name"
export NODE_OPTIONS="--require @opentelemetry/auto-instrumentations-node/register"
node app.js

				
			

Collector:

Os dados de telemetria coletados pela instrumentação são enviados para um coletor do OpenTelemetry. O coletor é um componente que age como um intermediário, recebendo dados de várias fontes, processando-os e enviando-os para sistemas de backend.

  • receivers: O coletor pode receber dados via vários protocolos (HTTP, gRPC, etc.).
    • Exemplo: Dados de métricas, logs e rastreamentos são enviados para o coletor através de pontos finais configurados.
  • processors: Modificam os dados conforme necessário. Por exemplo, podem adicionar metadados, filtrar dados irrelevantes ou agregar métricas.
    • Exemplo: Um processador pode ser configurado para adicionar informações de contexto, como o ID do usuário ou o nome do serviço.
  • exporters: São responsáveis por enviar os dados para sistemas de backend como Prometheus (para métricas), Jaeger (para rastreamentos) ou Elasticsearch (para logs).
    • Exemplo: Configurar um exportador para enviar rastreamentos para o Jaeger ou elastic.

Fluxo CompletoOpenTelemetry Reference Architecture

Casos de Uso com OpenTelemetry

1. Envio de Dados para CloudWatch, Firehose e Prometheus

Fluxo de Dados:

Transmissão via Firehose: O CloudWatch stream pode ser configurado para transmitir os dados para o Data Firehose.

Processamento no Firehose: O Data Firehose processa os dados de telemetria e os envia para um coletor OpenTelemetry configurado para receber dados de Firehose.

Armazenamento no Prometheus: O coletor OpenTelemetry processa os dados recebidos e os exporta para Prometheus, onde as métricas são armazenadas e podem ser consultadas.

Benefícios:

Redução de custos: Utilizando o cloudwatch stream o custo é bem menor do que fazer requests na API do Cloudwatch

Flexibilidade: Usar Firehose como intermediário permite processamento de dados em tempo real e escalabilidade.

Centralização: Prometheus centraliza as métricas, facilitando a consulta e monitoramento.

2. Envio de Dados para Elastic APM

Fluxo de Dados:

  1. Aplicação Instrumentada com OpenTelemetry: A aplicação captura rastreamentos e logs.
  2. Exportador Elastic APM: Os dados são enviados para o Elastic APM usando o exportador específico.
  3. Análise e Visualização: Elastic APM armazena e processa esses dados, permitindo análises detalhadas, visualizações e correlações entre diferentes tipos de telemetria (rastreamentos, logs, métricas).

Benefícios:

  • Análise Abrangente: Elastic APM oferece um conjunto robusto de ferramentas para análise e visualização.
  • Correlação de Dados: Permite correlacionar diferentes tipos de dados (logs, rastreamentos, métricas) para uma visão completa do desempenho da aplicação.
Compartilhe esse conteúdo

Posts Relacionados

O que é Terrascan?

Recursos, casos de uso e políticas personalizadas Neste artigo, vamos analisar o Terrascan. Vamos perguntar o que é, por que

LER MAIS