Observabilidade

Observabilidade, simplificadamente, é a capacidade de compreender os estados internos de um sistema em tempo real pela análise de suas saídas, utilizando informações externamente acessíveis.

Oriunda da Teoria do Controle [1], a observabilidade tornou-se crucial com o avanço das arquiteturas de sistemas, especialmente devido à adoção de sistemas distribuídos, containers e microsserviços.

É por meio da observabilidade que engenheiros e desenvolvedores obtém uma visão abrangente e detalhada do que está acontecendo dentro de sistemas, o que facilita a identificação de problemas, diagnóstico de falhas e otimização de desempenho. Para isso, são utilizados diversos tipos de dados, como:

  • Métricas: Números medidos ao longo do tempo, oferecendo uma visão estruturada do desempenho do sistema;

  • Logs: Registros detalhados de eventos, fornecendo contexto sobre as atividades do sistema; e

  • Rastreamentos: Percursos de solicitações através dos componentes de um sistema distribuído.

Observabilidade
Figure 1. Tipos de dados utilizadas para observabilidade

Monitoramento vs Observabilidade

Monitoramento e observabilidade, apesar de relacionados, são conceitos distintos. O monitoramento diz respeito à coleta, análise e alerta de dados de desempenho do sistema, enquanto a observabilidade, em um conceito mais amplo e estratégico, utiliza esses dados para compreender o estado interno do sistema e suas complexas interações. A observabilidade, diferentemente do monitoramento, permite identificar problemas emergentes pela análise de padrões no comportamento do sistema ao longo do tempo.

Pilares da Observabilidade

  • Coleta de dados: Captura de informações relevantes, como logs de eventos, métricas de desempenho, rastreamento de solicitações.

  • Armazenamento e processamento: Os dados coletados são armazenados em local acessível para posterior análise e podem ser processados para gerar métricas e indicadores úteis.

  • Visualização: A apresentação dos dados é clara e intuitiva e essencial para que profissionais possam interpretá-los.

  • Monitoramento proativo: Permite detectar e solucionar problemas antes que se tornem criticos, reduzindo impactos em operações para os usuários.

  • Rastreamento e diagnóstico: Capacidade de rastrear o fluxo de uma solicitação ou operação, possibilitando a identificação de gargalos e problemas de desempenho.

  • Correlação de dados: Possibilita a observação de eventos aparentemente desconectados e o entendimento de como as partes de um sistema interagem.

Explorando a Observabilidade

A observabilidade é muito importante em ambientes de tecnologia modernos, uma vez que possibilita a garantia de que sistemas estejam funcionando adequadamente:

  • Infraestrutura: É amplamente utilizada para monitorar a saúde e desempenho de servidores, redes, recursos de infraestrutura, coletando métricas como memória, espaço em disco, tráfego em rede, entre outros.

  • Sistemas Distribuídos: A observabilidade é crucial para diagnosticar e resolver problemas em sistemas distribuídos, possibilitando o entendimento de como os diferentes componentes interagem e afetam o desempenho geral do sistema, assim como fornecendo informações para a otimização e garantia da estabilidade.

  • Containers e Microsserviços: Permite uma abordagem holística para observação, por meio de práticas de logging, coleta de métricas específicas e uso de rastreamentos distribuídos.

  • Bancos de Dados: Auxilia na detecção precoce de gargalos e operações ineficientes, permitindo otimizações e melhorias no acesso aos dados por aplicações.

  • Análise de Comportamentos: Pode ser usada para rastrear o comportamento de usuários, incluindo a análise de registro de eventos para compreender como é feita a interação com o sistema, quais recursos são mais utilizados e quais problemas são enfrentados.

  • Segurança: É útil para identificar atividades suspeitas, tentativas de ataques cibernéticos, ajudando a garantir a integridade e proteção de sistemas.

Observabilidade no PostgreSYS

O serviço de observabilidade implementado no PostgreSYS foi projetado para fornecer logs, métricas e rastreamentos de todos os componentes da plataforma, permitindo uma visão abrangente e detalhada do ambiente de banco de dados PostgreSQL.

O PostgreSYS fornece, toltamente integrados, os componentes Prometheus e Grafana, soluções de código aberto amplamente utilizadas pelo mercado. A integração destes componentes representa uma parceria eficaz na observabilidade de sistemas. Enquanto o Prometheus foca na coleta e no armazenamento de métricas, o Grafana fornece a representação gráfica desses dados, facilitando a identificação de tendências, padrões e anomalias.

Além disso, o Alertmanager e o Karma complementam o serviço de observabilidade da plataforma, permitindo o gerenciamento e a visualização de alertas.

Arquitetura da Observabilidade no PostgreSYS
Figure 2. Observabilidade no PostgreSYS

Prometheus

Iniciativa de código aberto desenvolvida originalmente pela SoundCloud e, posteriormente doada à Cloud Native Computing Foundation (CNCF), o Prometheus é uma poderosa ferramenta de monitoramento e observabilidade - um sistema completo de monitoramento e tendências que inclui scraping incorporado e ativo, armazenamento, consulta, gráficos e alertas com base em séries temporais.

O Prometheus surgiu da necessidade de um sistema de monitoramento mais flexível e adaptável do que soluções tradicionais e foi projetado com princípios fundamentais de simplicidade e confiabilidade.

Oferece vários benefícios para desenvolvedores, engenheiros e administradores de sistemas:

  • Modelo de dados dimensional: Prometheus utiliza um modelo de dados dimensional que permite aos usuários definirem métricas com múltiplas dimensões. Isso facilita a segmentação e análise dos dados, permitindo uma observabilidade mais granular e personalizada do sistema;

  • Coleta flexível e eficiente: Prometheus é altamente flexível na coleta de métricas, suportando diversos protocolos de coleta, como HTTP, DNS, SNMP, e outros. Além disso, ele possui um modelo de coleta baseado em "pull", no qual os servidores de monitoramento recuperam métricas de diferentes alvos, o que torna a coleta eficiente e escalável;

  • Armazenamento de séries temporais robusto: A arquitetura de armazenamento de séries temporais do Prometheus é otimizada para lidar com grandes volumes de dados de métricas. Isso permite retenção de dados de longo prazo e consulta eficiente, possibilitando análises históricas e tendências ao longo do tempo;

  • Alertas e notificações integradas: Prometheus possui um mecanismo de regras de alerta flexível que permite aos usuários definirem condições para acionar alertas com base em métricas específicas. Ele também oferece integração com ferramentas de notificação, como o Alertmanager, para enviar alertas via e-mail, Slack, PagerDuty, entre outros, facilitando a detecção e resposta a problemas; e

  • Ecossistema e integrações: Prometheus faz parte de um ecossistema rico de ferramentas e integrações que ampliam suas capacidades de observabilidade. Por exemplo, ele pode ser facilmente integrado com ferramentas de visualização, como Grafana, para criar painéis de monitoramento personalizados. Além disso, existem exporters disponíveis para coletar métricas de uma ampla variedade de sistemas e serviços, aumentando a cobertura de monitoramento do Prometheus.

Grafana

Grafana é um componente de visualização de dados altamente versátil, de código aberto, projetado para consultar diversas fontes de dados e permitir a visualização e manipulação de informações. Permite criar dashboards personalizados e interativos.

O Grafana surgiu em 2014, desenvolvido pelo sueco Torkel Ôdegaard. Inicialmente focado em integração com o Graphite, evoluiu e expandiu suas funcionalidades e integrações, tornando-se uma ferramenta essencial para monitoramento e observabilidade em uma ampla gama de cenários.

Pela sua capacidade de conexão com uma variada fonte de dados, incluindo bancos de dados, sistemas de monitoramento, serviços de nuvens e muito mais, o Grafana tornou-se uma escolha popular.

Destacam-se, entre suas vantagens:

  • Visualização de dados rica e personalizável com interface intuitiva e flexível: Baseada em painéis configuráveis, apresenta variados tipos de gráficos [2], dashboards customizáveis e visualizações especializadas [3].

  • Suporte a múltiplas fontes de dados: Integra-se a diversas fontes, como o Prometheus, facilitando a agregação de dados [4].

  • Alertas integrados: Permite a definição de alertas diretamente nos painéis.

  • Acessibilidade e compartilhamento de painéis: Facilita o compartilhamento de dashboards, promovendo transparência e colaboração.

  • Flexibilidade e extensibilidade: Suporta plugins para novos tipos de dados e painéis personalizados.

  • Consultas SQL e NoSQL diretamente em seus painéis: Aproveita todo o poder da linguagem SQL para recuperar, filtrar e processar dados e, para bancos de dados NoSQL, o uso de linguagens especificas de recuperação e manipulação. Além disso, suporta variáveis e painéis dinâmicos com recursos para interação e ajuste de consultas e filtros em tempo real.

O Grafana não apenas apresenta métricas, mas também rastreamentos e logs, oferecendo uma visão holística e detalhada do sistema. Seus painéis dinâmicos fomentam uma cultura de dados abrangente, possibilitando o compartilhamento e discussão de informações.

Grafana - Modelo

AlertManager

O AlertManager é uma ferramenta integrada ao Prometheus e responsável pelo gerenciamento de alertas.

Ao detectar uma situação que atende a um critério de alerta predefinido, o Prometheus envia esses alertas para o Alertmanager que, em seguida, decidirá o que fazer com eles.

Entre as principais vantagens do AlertManager, destacam-se:

  • Agrupamento: Agrupa alertas semelhantes, reduzindo o ruído e facilitando a gestão e resolução de incidentes;

  • Inibição: Alertas relacionados podem ser suprimidos com base em critérios definidos, evitando uma avalanche de notificações;

  • Silenciamento: Permite que alertas específicos sejam silenciados (por exemplo, quando já se tem ciência de um problema e este está em processo de correção); e

  • Roteamento: Dependendo da gravidade e tipo, o alerta pode ser roteado para distintas equipes via e-mail, Slack ou PagerDuty.

O AlertManager auxilia os administradores a focar nos alertas importantes, reduzindo os ruídos e colaborando assim para a resolução eficiente de incidentes, melhorando a confiabilidade e a disponibilidade dos sistemas.

A arquitetura do AlertManager é composta por:

  • Servidor: Componente central, responsável por receber, processar e encaminhar alertas conforme as regras configuradas;

  • Integradores de Notificação: Responsáveis por enviar as notificações para os canais de comunicação definidos (e-mail, SMS, Slack, etc.);

  • Regras de Roteamento: Definem como os alertas devem ser roteados e notificados com base em critérios específicos, como severidade, tipo de alerta e equipe responsável; e

  • Persistência de Dados: Possibilita a persistência de alertas em um banco de dados, possibilitando consultas históricas e análise de tendências.

AlertManager na arquitetura de observabilidade
Figure 3. AlertManager

Karma

O Karma é uma Interface Gráfica de Usuário (GUI) para o Alertmanager, que apresenta os alertas definidos no Prometheus em um dashboard, de forma a permitir que sejam facilmente visualizados e gerenciados.

De forma simplificada, o Karma preenche uma lacuna do Alertmanager, simplificando o gerenciamento dos alertas através de um painel de navegação.

O Karma exibe alertas agrupados, preservando a opção de configuração "group by" do Alertmanager. Permite filtragem por tags e adição ou remoção da configuração de silenciamento de alertas.

Dashboard do Karma
Figure 4. Karma - Interface Gráfica para o Alertmanager

1. Trata do comportamento de sistemas dinâmicos, no qual a saída desejada de um sistema é chamada de referência. Quando uma ou mais variáveis de saída necessitam seguir um certa referência ao longo do tempo, um controlador manipula as entradas do sistema para obter o efeito desejado nas saídas do mesmo sistema
2. Gráficos de linha, Gráficos de barra, Gráficos de Pizza, Medidores, Mapas de calor, Gráficos de Dispersão, Histogramas, Gráficos de Velocimetro, Gráficos de Funil, Gráficos de Sankey, Gráficos de Árvore, Radar, etc.
3. Heatmaps - usados para mostrar dados em formato de áreas de calor, Sankey diagrams - usados para mostrar fluxos de dados, Bullet Charts - usados para mostrar dados em formato de lista, Treemaps - usados para mostrar dados em formato de árvore, Word Clouds - usados para mostrar dados em formato de nuvens de palavras
4. Bancos de Dados Relacionais, NoSQL, Ferramentas ETL,APIs REST e HTTP, Logs e Telemetria