Separe instrumentação, transporte e análise
OpenTelemetry fornece APIs, SDKs e convenções para gerar traces, métricas e logs. OTLP é um protocolo para transportar telemetria a um collector ou backend. Dynatrace pode receber e analisar dados de OpenTelemetry; o endpoint, protocolo, autenticação e suporte variam conforme o ambiente e devem seguir a configuração atual da plataforma.
Instrumentação consistente reduz dependência de um fornecedor, mas não elimina decisões sobre amostragem, retenção, custo, acesso e responsabilidade operacional. Para os conceitos de cada sinal, veja observabilidade em sistemas distribuídos.
Instrumente as fronteiras de entrada e saída
Em ASP.NET Core, instrumentações para servidor e cliente HTTP capturam requisições e chamadas externas. Adicione spans manuais somente quando o contexto de negócio não estiver visível de outra forma. Defina um nome de serviço estável, ambiente e versão de release para distinguir instâncias e comparar implantações.
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter())
.WithMetrics(metrics => metrics
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter());O exemplo pressupõe os pacotes de instrumentação e exportação correspondentes, e que o endpoint OTLP seja configurado para o ambiente. Em produção, use o endpoint e o protocolo suportados pelo seu tenant ou collector, mantenha tokens em armazenamento de segredos e confirme conectividade TLS. Evite embutir credenciais no código.
Logs estruturados com Serilog
Serilog facilita a emissão de eventos estruturados em .NET. Preserve propriedades como nome da operação, ambiente e identificador de correlação, em vez de concatenar tudo numa mensagem textual. Integre o contexto de log com traces quando o pipeline escolhido suportar essa correlação:
builder.Host.UseSerilog((context, services, configuration) =>
configuration
.ReadFrom.Configuration(context.Configuration)
.ReadFrom.Services(services)
.Enrich.FromLogContext());Escolha conscientemente como os logs chegam ao Dynatrace — por agente, collector ou exportador/sink compatível com a configuração adotada. Evite enviar o mesmo evento por vários caminhos sem necessidade, pois isso duplica ingestão e custo. Não registre tokens, dados pessoais sem justificativa, cabeçalhos completos ou payloads financeiros.
Cardinalidade, sampling e custos
Não use identificadores de usuário, pedido ou trace como labels de métricas: cada valor único aumenta séries e custo. Identificadores podem fazer sentido em logs ou traces sob política de acesso e retenção. Em alto volume, defina amostragem alinhada ao objetivo e preserve sinais de erros e latência conforme as capacidades do pipeline, reconhecendo que sampling pode omitir eventos.
Estabeleça limites de retenção e acesso por ambiente, aplique filtros antes da exportação quando necessário e valide que dados sensíveis não saem do perímetro aprovado. Instrumentação não deve degradar a aplicação quando o backend de telemetria fica indisponível.
Investigue com uma pergunta concreta
Comece pelo impacto: endpoint afetado, período, versão implantada e percentis de latência. Use métricas para localizar a mudança, trace para seguir a jornada entre serviços e logs para examinar eventos contextuais. Confirme se amostragem, relógios e propagação de contexto permitem relacionar os sinais; um correlation ID de negócio não substitui autenticação nem autorização.
Para chamadas instáveis, correlacione falhas e tentativas com as políticas Polly. Acompanhe também o pipeline e o rollout Kubernetes associados à versão investigada.