A observabilidade de sistemas vai muito além do simples monitoramento de métricas e logs. Para extrair insights valiosos e identificar rapidamente as causas raízes de falhas e problemas de desempenho, é necessário um processo mais robusto, que envolva a análise, agregação e correlação de dados de diferentes fontes. Isso é especialmente importante em um contexto onde a automação e a modernização das operações estão cada vez mais dependentes de ferramentas avançadas, como AIOps e CMDB.

Ao se tratar de dados de observabilidade, é preciso ter em mente que a simples consulta a informações em tempo real via painéis de controle ou telas não é suficiente. A observabilidade é, em sua essência, um conjunto de dados temporais que possuem limitações naturais quando se trata de consultas complexas. As consultas a dados de séries temporais se restringem a operações simples, o que dificulta a análise aprofundada, a agregação e a combinação desses dados. Para realizar tais análises, é preciso configurar um ambiente adequado que permita a integração de dados de diversas fontes e que ultrapasse as limitações de armazenamento temporário típicas dos bancos de dados de séries temporais.

Em muitos casos, é necessário utilizar armazenamento de longo prazo, como data lakes, para consolidar os dados de observabilidade. Bancos de dados temporários, que retêm informações por apenas alguns meses, não são adequados para armazenar dados de observabilidade por períodos mais longos, o que é fundamental para análises mais detalhadas e consistentes.

Quando o objetivo vai além do simples monitoramento e envolve a construção de operações automatizadas ou modernizadas, o backend de observabilidade padrão não é suficiente. A coleta, transformação e armazenamento de dados estruturados tornam-se elementos essenciais para viabilizar a análise avançada. A implementação de pipelines de dados que organizam os dados brutos, como logs, métricas e traces, em formatos estruturados para consultas SQL, é uma das chaves para transformar os dados não estruturados em informações valiosas.

No contexto de observabilidade, é importante distinguir entre o uso de logs e traces. Embora os logs sejam frequentemente priorizados em análises de causa raiz devido à familiaridade dos desenvolvedores com essa abordagem, a dependência excessiva de logs pode retardar a adoção de novas práticas de observabilidade e dificultar o gerenciamento de mudanças. Traces, por outro lado, devem ser considerados o ponto de partida para as análises, com as correlações sendo construídas ao redor desses dados temporais.

A análise de dados de observabilidade deve focar em métricas e traces, e os logs devem ser usados apenas quando as demais fontes de dados não forem suficientes para processar determinadas restrições. A coleta de dados de logs não é trivial e envolve um desenvolvimento considerável, incluindo o pré-processamento desses dados, o que acaba tornando a análise mais dispendiosa e demorada. Além disso, a necessidade de configurar índices e alertas em logs limita a flexibilidade e a rapidez das análises de causa raiz. Nesse sentido, deve-se dar prioridade à construção de datasets estruturados que permitam a análise e agregação eficientes.

A análise avançada de dados de observabilidade, por meio de técnicas como AIOps e machine learning, requer a implementação de algoritmos de detecção de anomalias e a construção de correlações precisas a partir dos dados. A verdadeira utilidade dos dados de observabilidade vem quando conseguimos detectar padrões e anomalias antes que se tornem problemas críticos para os usuários. Isso envolve não apenas a visualização de dados em tempo real, mas também o uso de ferramentas analíticas que permitem identificar rapidamente as causas das falhas e prever problemas futuros.

A construção de dashboards operacionais deve considerar dois aspectos principais: um técnico, que mostre se os processos e pods da aplicação estão sendo executados corretamente, e outro de negócios, que analise se os pedidos ou transações dos clientes estão sendo processados de forma eficiente. Para dashboards técnicos, as métricas desempenham um papel central, enquanto que, para dashboards de negócios, o uso de traces, em vez de logs, pode reduzir significativamente o esforço de pré-processamento e o custo de desenvolvimento.

Uma abordagem eficiente de observabilidade, que inclua a análise e correlação de dados de múltiplas fontes, é fundamental para melhorar a confiabilidade e reduzir o tempo de recuperação (MTTR). Entretanto, isso só será possível se houver uma boa estratégia de gerenciamento e análise de dados, que permita transformar dados brutos em informações úteis, como forma de antecipar falhas e otimizar a performance dos sistemas.

Além disso, é imprescindível que equipes de SRE (Site Reliability Engineering) e engenheiros de dados colaborem para garantir que os dados de observabilidade sejam utilizados da melhor forma possível. Ferramentas de observabilidade comercial muitas vezes criam ambientes isolados e limitados, dificultando a reutilização dos dados e a integração com sistemas externos. Embora existam APIs que possibilitam exportação de dados, o modelo de AIOps das soluções comerciais muitas vezes torna difícil o uso efetivo desses dados para análise e automação.

Em um cenário ideal, a integração e análise de dados de observabilidade devem ser feitas de forma contínua, com uma visão holística do sistema, permitindo a detecção de problemas antes que eles se agravem. A chave para a eficácia desse processo está na utilização de dados estruturados, que possibilitam análises mais rápidas e precisas, e na colaboração entre as equipes para implementar e otimizar as ferramentas de coleta e análise.

Como Funciona a Consultoria e a Transformação de Métricas no Prometheus para Sistemas Personalizados

A interação com o Prometheus, uma ferramenta amplamente utilizada para monitoramento e coleta de métricas, exige uma compreensão detalhada de como as séries de métricas são consultadas e manipuladas. O campo seriesQuery define a consulta de séries, que é essencial para localizar um subconjunto de séries de Prometheus. A partir dessa consulta inicial, o adaptador remove os valores dos rótulos e, em seguida, usa a combinação resultante de metric-name e label-name para as etapas posteriores da manipulação. Na maioria das vezes, o seriesQuery é suficiente para limitar as séries de Prometheus. No entanto, em cenários mais complexos, como quando duas regras podem se sobrepor, torna-se necessário realizar filtragens adicionais nos nomes das métricas. Para isso, utilizamos o campo seriesFilters.

O campo seriesFilters pode aplicar filtros diretamente aos nomes das métricas para excluir ou incluir determinadas séries com base em padrões específicos. Por exemplo, ao filtrar todas as métricas do cAdvisor que não são medidas em segundos, poderíamos usar a consulta a seguir:

yaml
seriesQuery: '{__name__=~"^container_.*_total",container!="POD",namespace!="",pod!=""}' seriesFilters: - isNot: "^container_.*_seconds_total"

Este exemplo mostra como o uso do seriesQuery em conjunto com seriesFilters permite uma filtragem mais precisa das séries que serão utilizadas para análise. O seriesQuery retorna uma lista de séries que posteriormente é filtrada pelos filtros aplicados, como o isNot, que exclui as métricas de tempo.

Além da manipulação de séries, outro aspecto fundamental na transformação de métricas do Prometheus é o processo de Naming (nomeação). Essa parte do processo gerencia a conversão dos nomes das métricas do Prometheus para métricas de uma API personalizada e vice-versa. A transformação dos nomes das métricas é controlada pela especificação de um padrão para extrair o nome da API a partir do nome do campo do Prometheus. Esse padrão é definido através de expressões regulares no campo matches, que por padrão é definido como .*. Por exemplo, se quisermos converter qualquer métrica cujo nome termine com _total para uma métrica com o sufixo _per_second, usamos a seguinte configuração:

yaml
name:
matches: "^(.*)_total$" as: "${1}_per_second"

Essa transformação de nomes é útil para adaptar as métricas coletadas pelo Prometheus ao formato exigido por outras partes do sistema, como uma API personalizada ou um sistema de alerta que espera métricas com uma terminologia diferente.

Em relação à consulta das métricas, o campo metricsQuery é responsável pela obtenção real dos valores de uma métrica específica. Esse campo utiliza templates Go, que são transformados em consultas Prometheus para buscar as métricas necessárias através da Custom Metrics API. O resultado dessa consulta é retornado como um nome de métrica, um recurso de grupo e um ou mais objetos desse recurso. A estrutura do metricsQuery é fundamental para garantir que a consulta retorne exatamente as métricas desejadas para cada objeto solicitado. Ela pode ser configurada da seguinte maneira:

yaml
metricsQuery: "sum(rate(<<.Series>>{<<.LabelMatchers>>,container!='POD'}[2m])) by (<<.GroupBy>>)"

Esse exemplo converte as métricas cumulativas do cAdvisor em taxas calculadas ao longo de 2 minutos, agrupando os resultados conforme os rótulos especificados em GroupBy. O uso de Series, LabelMatchers e GroupBy nas consultas é recomendado para garantir que as métricas retornadas estejam corretamente associadas aos objetos solicitados, permitindo que o adaptador utilize os rótulos das séries retornadas para associá-las aos objetos correspondentes.

Por fim, ao realizar testes, pode-se definir um nome de métrica, como "http_requests", e criar um ambiente que inclui recursos como Deployment, Service, ServiceMonitor e HPA. Isso facilita a validação da configuração e o comportamento do sistema em um ambiente controlado.

Além do conteúdo essencial abordado, é importante que o leitor compreenda que a integração entre o Prometheus e sistemas personalizados exige não apenas o conhecimento de como realizar consultas e manipulações de métricas, mas também a atenção à performance e à consistência na conversão e transformação de nomes das métricas. A utilização de expressões regulares e filtros avançados pode ser útil para otimizar a consulta de dados, evitando sobrecarga de informações desnecessárias ou conflitantes.

Como Implementar um Modelo de Guardrails com OpenAI em Análises de Causas Raiz (RCA) em Sistemas de TI

A utilização de modelos de IA para análise de causas raiz (RCA) em operações de TI tem se tornado cada vez mais prevalente, pois oferece maneiras de automatizar processos complexos, tornando as operações mais eficientes e precisas. Um dos elementos chave nesse processo é o uso de guardrails, modelos desenvolvidos para filtrar entradas e saídas de sistemas, garantindo que os dados analisados sejam adequados e seguros. Neste contexto, exploraremos como integrar o modelo de guardrails da OpenAI, especificamente para filtrar dados relacionados a potenciais conteúdos nocivos, e sua implementação prática no processo de RCA.

Primeiramente, para integrar um modelo de guardrails com a OpenAI, é necessário criar um conector para o modelo, o que pode ser feito com uma simples requisição HTTP. O modelo, uma vez configurado, tem a capacidade de filtrar dados e validar se a entrada contém algum tipo de conteúdo ofensivo, político, violento, sexual ou odioso. Essa integração não só assegura que as entradas sejam seguras e adequadas, mas também possibilita que as respostas sejam de qualidade e relevantes para o processo de RCA.

A configuração do conector inclui parâmetros essenciais como o endpoint da API da OpenAI, a quantidade máxima de tokens e a temperatura do modelo, que influencia a aleatoriedade da resposta gerada. O prompt específico que orienta o modelo a julgar o conteúdo solicita uma análise rigorosa, em que a resposta deve ser "aceitar" ou "rejeitar", dependendo da adequação do conteúdo da entrada. Essa estrutura de validação é crucial para garantir que apenas dados que atendem aos padrões estabelecidos sejam utilizados no processo de RCA, evitando assim a incorporação de informações indesejadas ou errôneas.

Além disso, é importante entender o fluxo completo de integração do modelo, desde o registro do conector até o envio de dados para validação. Após o registro do modelo de guardrails e sua implementação no sistema, é possível testar a eficácia da validação enviando entradas tanto seguras quanto ofensivas. O retorno do modelo pode ser utilizado para ajustar e refinar os filtros e parâmetros de validação, melhorando a precisão e a segurança do processo.

No entanto, a automação do processo de RCA, mesmo com o uso de IA, não elimina a necessidade de compreensão profunda dos dados envolvidos. Em muitos casos, a análise de dados estruturados pode ser complexa, pois esses dados não são facilmente compreendidos sem o contexto adequado. A utilização de IA para automatizar a correspondência entre os atrasos detectados e as falhas específicas pode ser extremamente útil, mas exige uma base de conhecimento robusta que ajude a identificar corretamente as causas dos problemas.

As tabelas que compõem os modelos de RCA geralmente contêm diferentes tipos de dados, como UUIDs, números e texto, além de imagens ou outros tipos de dados mais complexos. Esses dados podem ser estruturados de formas variadas, como tabelas normalizadas ou com múltiplas colunas unidas. Nesse cenário, é fundamental compreender que vetores e gráficos são mais eficazes para dados não estruturados, como imagens e áudio, enquanto dados estruturados, como os de uma tabela, podem ser mais facilmente manipulados com bancos de dados convencionais.

A complexidade dos dados pode aumentar quando se trata de sistemas de TI distribuídos, como aqueles baseados em Kubernetes. Identificar a origem de um atraso ou falha pode ser desafiador, especialmente quando os dados não estão claramente definidos, como é o caso dos erros provenientes de núcleos de CPU ou de sistemas legados. Esses dados vagos exigem uma análise mais detalhada e, muitas vezes, uma organização das entidades envolvidas – como regiões, zonas de disponibilidade e pods – para entender completamente a origem do problema.

Para lidar com esses desafios, é recomendável que os dados sejam organizados de maneira sistemática, com as entidades e tags sendo configuradas manualmente quando necessário. Essa organização facilita a identificação precisa do local do erro, seja em sistemas de rede ou de computação. A automação do processo de RCA, especialmente em um ambiente de TI complexo, requer não apenas a implementação de IA, mas também o uso cuidadoso e preciso de dados estruturados e a configuração manual de elementos que não podem ser automaticamente detectados, como hosts legados ou núcleos de CPU.

Além da configuração inicial e da validação de dados com IA, outro aspecto crucial da análise de causa raiz em sistemas de TI é o pós-processamento. Uma vez que a IA tenha processado as entradas e identificado potenciais causas de falha, é necessário armazenar os resultados de forma organizada para que ações subsequentes possam ser tomadas. O armazenamento das respostas geradas por modelos de IA, como os da OpenAI, permite que as equipes de TI consultem os resultados, realizem análises adicionais e ajustem os parâmetros do sistema para melhorar a precisão e a eficácia do modelo.

Em uma implementação ideal, a automação do pós-processamento pode ser conduzida por ferramentas como LangGraph ou n8n, que permitem integrar diversas fontes de dados e processar ações subsequentes com base nas respostas obtidas dos modelos de IA. Essas ferramentas são capazes de chamar a IA, processar suas respostas e acionar outros sistemas para resolver os problemas identificados, garantindo um fluxo contínuo de ações que reduz a intervenção manual e melhora a eficiência geral.

Ao integrar a IA no processo de RCA, é importante garantir que a IA seja alimentada com dados consistentes e ininterruptos. Isso não apenas melhora a performance do modelo, mas também ajuda a reduzir custos ao evitar análises erradas ou imprecisas. A IA deve ser constantemente ajustada e refinada, com base nos dados mais recentes, para melhorar sua capacidade de identificar falhas e fornecer insights valiosos para as equipes de TI. A precisão da IA pode ser aprimorada com o tempo, tornando-se um elemento cada vez mais essencial na gestão de operações de TI.

Como a Observabilidade no Setor de Telecomunicações Impacta os Processos de Orquestração e Gestão de Ordens

No setor de telecomunicações, a complexidade das operações e dos sistemas envolvidos exige uma abordagem cuidadosa quando se trata de observabilidade. A equipe de Engenharia de Confiabilidade de Sites (SRE) desempenha um papel essencial, não apenas na análise de causas raiz de falhas, mas também na facilitação da comunicação entre diferentes departamentos da empresa. Esse processo exige a colaboração de desenvolvedores, equipes de negócios e outros setores, com o objetivo de convencer os demais sobre os benefícios da observabilidade. Em organizações maiores, esse processo de decisão pode se tornar bastante complexo, sendo necessário integrar diferentes áreas para garantir a eficiência do sistema.

A atuação do setor de telecomunicações pode ser dividida em dois grandes campos: os sistemas de suporte ao negócio (BSS) e os sistemas de suporte operacional (OSS). Esses sistemas são fundamentais para fornecer os serviços de telecomunicações, que abrangem desde os serviços fixos e móveis até as transmissões de dados. O OSS, por exemplo, está diretamente ligado à instalação e configuração das infraestruturas necessárias para o funcionamento desses serviços. Já os BSS são responsáveis pela gestão dos serviços de cobrança, faturamento e relacionamento com o cliente.

No setor de telecomunicações, as operações envolvem uma orquestração de processos mais complexa do que em outras indústrias. Por exemplo, em vez de apenas fazer o roteamento de requisições por meio de servidores de APIs, a orquestração de telecomunicações cria "componentes", processos complexos que precisam ser geridos e orquestrados ao longo de sua execução. Esses componentes são criados a partir de atributos de produtos e distribuídos por servidores de mensagens como o JMS, gerenciando as transações de forma distribuída.

Historicamente, as empresas de telecomunicações adquiriram soluções comerciais de observabilidade para personalizar seus sistemas de gerenciamento de ordens. Isso aconteceu devido à complexidade dos processos de negócios e às limitações técnicas de soluções de código aberto. Entre as principais ferramentas utilizadas nesse contexto, destacam-se o Oracle BRM para faturamento, o Oracle M6 para inventário de rede, o Siebel para gestão de clientes e o PeopleSoft para o gerenciamento de recursos humanos.

Embora a equipe SRE não precise lidar diretamente com os sistemas legados, é crucial que se familiarizem com os aplicativos legados essenciais para o processo de observabilidade. A interação entre esses sistemas legados e a orquestração é facilitada por servidores de integração de aplicativos empresariais (EAI), que desempenham papel fundamental na interface entre a orquestração e os sistemas antigos. A comunicação entre esses servidores e os processos de orquestração pode ser visualizada através de um fluxo de compensação, no qual o servidor de orquestração gerencia a execução sequencial das ordens e o status dos componentes, enquanto o servidor EAI cuida da interface com os sistemas legados.

A orquestração no contexto de telecomunicações envolve, essencialmente, dois processos principais: a execução do cumprimento de pedidos e a provisão de rede. Esses processos podem envolver a criação de novos componentes (como clientes e ciclos de faturamento), a ativação de serviços em dispositivos de rede e até mesmo a instalação de equipamentos. A complexidade aumenta quando há a necessidade de modificar pedidos existentes, como alterações ou cancelamentos, já que os dados de ativos dos clientes estão distribuídos entre vários sistemas legados e devem ser atualizados de maneira consistente.

A gestão de ordens, nesse contexto, não se limita à criação de pedidos novos, mas inclui uma série de transações distribuídas e processos de compensação em caso de falhas. Uma ordem pode envolver não apenas a criação de um novo produto ou serviço, mas também a alteração de um ativo existente, como no caso de alterações em pacotes de serviços ou mudanças nas preferências do cliente. Essas ordens precisam ser rastreadas em cada etapa do processo, utilizando spans, para monitorar o progresso e identificar falhas com precisão.

Os pedidos no setor de telecomunicações são frequentemente mais complexos do que em outros setores devido à natureza multifacetada dos produtos e serviços oferecidos. Muitas vezes, os produtos são vendidos em pacotes, com diferentes atributos, preços e políticas de descontos aplicados. Além disso, a dinâmica de grupos de clientes, como famílias, que podem adicionar ou remover membros de forma dinâmica, requer regras complexas para o registro e processamento das ordens. O processo de alteração de um pedido, por exemplo, pode envolver múltiplas revisões e cancelamentos, o que torna a gestão do ciclo de vida do pedido uma tarefa desafiadora e propensa a falhas.

É importante que, ao lidar com essas ordens complexas, a observabilidade seja configurada de forma a permitir a visão end-to-end (E2E) dos processos. A capacidade de rastrear o ciclo completo da ordem, desde a criação até a entrega do serviço ou produto, é essencial para garantir que qualquer falha ou erro seja detectado de forma eficiente e resolvido rapidamente. Em telecomunicações, onde as ordens podem envolver múltiplos sistemas legados e processos orquestrados, a observabilidade precisa ser adaptada para lidar com a complexidade e a interdependência desses componentes.