A responsabilidade do desenvolvedor em manter a consistência do MDC (Mapped Diagnostic Context) surge quando o MDC passa por múltiplas threads de execução em processos não bloqueantes. Caso ocorram problemas com os valores injetados pelo OpenTelemetry, como o trace_id, a equipe de SRE (Site Reliability Engineering) deve ser capaz de identificar e solucionar as questões. A propagação entre threads internas, especialmente em sistemas não bloqueantes, é mais eficaz quando registrada em logs. Contudo, quando se comparam os resultados de rastreamento entre o OpenTelemetry e agentes comerciais de observabilidade, surgem diferenças significativas que precisam ser compreendidas para evitar falhas operacionais.

As discrepâncias nos resultados de rastreamento, tanto em logs quanto nas métricas geradas por diferentes agentes de observabilidade, podem ser complexas. É essencial entender as limitações e diferenças entre as abordagens. Por exemplo, se os resultados do MDC gerados pelo OpenTelemetry diferirem dos gerados por um agente comercial de observabilidade, a responsabilidade de explicar essas diferenças recai sobre a equipe de SRE. O desenvolvedor, que configurou o MDC para propagação através de múltiplas threads, pode se deparar com o problema de que o trace context (como o trace_id) não é registrado corretamente no log. Nesses casos, o agente pode injetar um valor vazio no MDC devido a falhas na instrumentação da thread, resultando na falta de propagação do contexto.

O OpenTelemetry oferece suporte robusto para frameworks como Spring Scheduling, Spring WebFlux, Reactor, Netty HTTP Codec, Reactor Netty e Kotlin Coroutines, proporcionando bons resultados em sistemas não bloqueantes. No entanto, quando se utiliza um agente de observabilidade comercial, a instrumentação do framework Spring pode falhar. Isso se torna ainda mais evidente quando se configura rastreamento e logs com base na observabilidade, uma vez que a propagação de contexto nem sempre ocorre corretamente. O problema surge quando o OpenTelemetry funciona bem, mas os agentes comerciais falham, o que pode gerar frustração entre os desenvolvedores, especialmente quando a propagação de contexto falha apenas com os caros agentes comerciais. Nesse contexto, é fundamental que os SREs tratem essas falhas com cuidado e precisão.

A introdução de novas ferramentas de observabilidade frequentemente gera resistência por parte dos desenvolvedores, que estão mais acostumados com a monitoração centrada em logs. Contudo, é essencial compreender que, no paradigma da observabilidade, os logs não devem ser o elemento central, mas sim uma ferramenta complementar que enriquece outros sinais de monitoramento. Em sistemas legados ou em black boxes, onde a configuração de rastreamento é desafiadora, o uso de logs é uma alternativa mais eficaz para configurar a observabilidade. Ao configurar a instrumentação automatizada, é fundamental garantir que as mensagens de erro e depuração sejam detalhadas, pois isso adiciona contexto aos logs e facilita a solução de problemas.

Em processos não bloqueantes mais complexos, como WebFlux e threads virtuais, o uso de logs torna-se imprescindível para preencher lacunas e analisar problemas. Embora as métricas e rastreamentos sejam limitados quando se trata de adicionar atributos, os logs oferecem maior flexibilidade, permitindo a adição de atributos, o que facilita a configuração de alertas e painéis de monitoramento.

Considerando dois exemplos práticos, um dos problemas mais frequentes é a dificuldade de registrar o trace context nos logs. Quando um serviço, como o Scheduling-1 em Service A, está realizando processos críticos, a necessidade de monitoramento se torna evidente. No entanto, como o rastreamento não suporta as threads do Scheduling-1, a única opção viável é usar logs. Embora seja possível buscar threads Scheduling-1 nos logs por meio dos IDs de span do OpenTelemetry, essa abordagem não é possível ao utilizar IDs de span e trace ID de agentes comerciais de observabilidade. Isso reflete a discrepância nas saídas de rastreamento, como ilustrado nas tabelas comparativas entre os resultados instrumentados pelo OpenTelemetry e pelos agentes comerciais.

Outro cenário envolve o uso de logs para diferentes finalidades, com foco na precisão do registro. Antes da adoção do OpenTelemetry, muitos sistemas não seguiam uma convenção clara de nomenclatura nos logs, o que frequentemente resultava em conflitos ao usar palavras reservadas como trace_id. Esse conflito se torna mais problemático quando múltiplos agentes são utilizados simultaneamente. Nestes casos, o comportamento de cada agente pode ser distinto e, por vezes, apresentar falhas, fazendo com que o contexto de rastreamento não seja registrado corretamente nos logs ou sequer apareça na busca. A solução para esse tipo de problema envolve a modificação das configurações de log em todos os microsserviços e o redeployment do sistema, o que é um desafio significativo em sistemas com centenas de milhares de linhas de código. Identificar e corrigir o problema nas configurações de log pode ser difícil, mas uma análise cuidadosa, como a realizada no código do logback, pode permitir ajustes precisos, como a modificação do nome da chave do MDC para o trace ID, prevenindo conflitos.

Por fim, a solução para essas falhas depende da compreensão do processo pelo qual o agente do OpenTelemetry injeta o contexto de rastreamento no MDC. O processo passa por uma sequência de etapas que inclui a criação do contexto, a leitura do contexto pelo agente Java, a cópia do contexto para o MDC, a leitura do MDC pela biblioteca de logs e a utilização dessa informação no código em tempo de execução para gerar os logs. Esse processo pode ser alterado para evitar conflitos nos logs, mas em sistemas em produção com centenas de microsserviços, alterar diretamente o código se torna impraticável. Nesse caso, a solução passa por uma análise profunda do código do agente e ajustes nos pipelines de logs.

Além disso, é importante que os SREs estejam cientes de que a implementação de agentes comerciais de observabilidade pode trazer desafios únicos, especialmente ao integrar OpenTelemetry com outras ferramentas de rastreamento. Isso pode resultar em problemas de consistência no MDC, o que exige soluções específicas para garantir a correta propagação do contexto de rastreamento em sistemas distribuídos.

Como a Integração de Servidores EAI e MFT Otimiza Processos Bancários e Financeiros

O servidor EAI (Enterprise Application Integration), em conjunto com o servidor MFT (Managed File Transfer), desempenha um papel crucial na automação e otimização dos processos de transferência de arquivos no setor financeiro. O servidor MFT, com suas APIs, possibilita a gestão eficiente da transferência de arquivos, permitindo que partes externas utilizem a API REST para iniciar o processo de transferência e monitorar seu status. Essa integração entre EAI e MFT é vital para garantir que as trocas de dados entre diferentes sistemas sejam realizadas de forma segura e eficiente, atendendo a uma demanda crescente por agilidade e confiabilidade.

A comunicação interbancária, especialmente no contexto internacional, depende fortemente do sistema SWIFT (Society for Worldwide Interbank Financial Telecommunication), uma rede que permite a troca de mensagens bancárias de maneira rápida e segura. Os bancos utilizam o SWIFT para realizar transações tanto nacionais quanto internacionais, conectando-se à rede SWIFT e adotando o formato de mensagens MT para enviar e receber dados. Cada usuário da rede SWIFT é identificado por um código único, conhecido como BIC (Bank Identifier Code), que permite a troca de mensagens entre instituições financeiras ao redor do mundo.

O sistema SWIFT tem evoluído com o tempo, substituindo antigas tecnologias como a rede X.25 por uma rede mais moderna e eficiente, o SWIFTNet. O Gateway da Aliança SWIFT (SAG) serve como a interface para acessar essa nova rede, oferecendo uma variedade de recursos de conectividade para seus usuários. O servidor CASmf (Common Application Server for SWIFT) é um middleware essencial que facilita a comunicação entre o servidor SWIFT Alliance (SAA) e outras aplicações. Utilizando o MAPID (Message Application ID), o CASmf estabelece a comunicação entre a aplicação do usuário e o SAA, permitindo o envio e recebimento de mensagens MT em tempo real.

A integração de sistemas bancários por meio do EAI com o SWIFT exige alta confiabilidade, pois qualquer falha nesse processo pode resultar em grandes perdas financeiras. Em sistemas bancários corporativos, onde transações de grande volume são comuns, a necessidade de um sistema robusto de interface SWIFT é ainda mais crítica. O processo de integração do servidor EAI com o servidor SWIFT via o adaptador CASmf envolve várias etapas, incluindo o envio, resposta e transformação de dados, além da observabilidade dessas etapas por meio de ferramentas como o OpenTelemetry. O uso de ferramentas de desenvolvimento, como drag-and-drop, facilita a criação de processos de integração, aumentando a produtividade e simplificando a gestão dos sistemas.

Além da integração com o SWIFT, o ambiente financeiro frequentemente requer a troca de dados com outros sistemas, como o Lotus Notes e o IBM MQSeries. O Lotus Notes, embora menos popular atualmente devido ao domínio do Microsoft Outlook, continua a ser uma ferramenta importante para a colaboração empresarial e exige integração com outros aplicativos corporativos como ERP, CRM e SCM. Para essa integração, o servidor EAI utiliza adaptadores específicos que permitem a comunicação entre o Lotus Notes e o sistema central, facilitando o fluxo de dados dentro da organização.

Por outro lado, o IBM MQSeries, utilizado para comunicação assíncrona entre diferentes aplicações, permanece amplamente presente em sistemas bancários e financeiros, especialmente nas infraestruturas legadas. Com a capacidade de enviar e receber mensagens através de filas, o MQ permite uma troca de dados eficiente entre diferentes sistemas, sendo integrado ao servidor EAI através de um adaptador MQ. A observabilidade das transações que passam por essa arquitetura é igualmente essencial para garantir que os processos sejam rastreados e possam ser revertidos em caso de falha, evitando impactos negativos nas operações financeiras.

A necessidade de estabelecer um sistema altamente observável e resiliente é uma constante em qualquer infraestrutura bancária moderna. A utilização de soluções como EAI, adaptadores específicos para protocolos como SWIFT, Lotus Notes e MQSeries, e o suporte a APIs para monitoramento em tempo real, são essenciais para garantir a integridade e a continuidade das transações financeiras. A transformação digital no setor bancário exige que cada camada da infraestrutura, desde a transferência de arquivos até a comunicação interbancária, seja tratada com o máximo de confiabilidade e transparência.

É importante ressaltar que, embora a automação e a integração de sistemas sejam fundamentais, a complexidade dessas infraestruturas exige uma gestão contínua e uma abordagem de manutenção preventiva para garantir a performance ideal. A falha em monitorar corretamente as transações e a ausência de ferramentas adequadas de rollback podem resultar em sérios prejuízos, especialmente em um contexto corporativo onde as transações envolvem grandes quantias de dinheiro. A integração de sistemas deve ser acompanhada de perto, com foco na segurança, rastreabilidade e escalabilidade, para garantir que o sistema permaneça robusto mesmo diante de um aumento significativo no volume de transações ou na complexidade das integrações.