Observabilidade é a capacidade de entender o comportamento interno de um sistema com base em suas saídas. Em outras palavras, é a capacidade de entender o que está acontecendo dentro de um sistema com base em suas saídas.
A observabilidade é importante porque permite que as equipes de operações e desenvolvimento entendam o comportamento interno de um sistema com base em suas saídas. Isso é importante porque permite que as equipes de operações e desenvolvimento entendam o comportamento interno de um sistema com base em suas saídas.
Podemos observar um sistema de várias maneiras, incluindo:
- Monitoramento
- Rastreamento
- Logs
- Métricas
Monitoramento é a prática de observar um sistema para garantir que ele esteja funcionando corretamente. Isso pode incluir a verificação de métricas, logs e rastreamentos para garantir que o sistema esteja funcionando corretamente.
Rastreamento é a prática de observar o comportamento de um sistema ao longo do tempo. Isso pode incluir a observação de métricas, logs e rastreamentos para entender como o sistema está se comportando.
Logs são registros de eventos que ocorrem em um sistema. Eles podem ser usados para entender o comportamento de um sistema ao longo do tempo.
Métricas são medidas quantitativas que podem ser usadas para entender o comportamento de um sistema. Elas podem incluir coisas como o tempo de resposta de um sistema, a taxa de erros e a utilização de recursos.
Prometheus é um sistema de monitoramento e alerta de código aberto. Ele coleta métricas de alvos configurados por meio de um modelo de coleta e armazenamento de séries temporais com um poderoso mecanismo de consulta.
Documentações Importantes
- Contadores
- Histogramas
- Sumários
- Temporais
Contadores são métricas que representam um valor que pode aumentar ou diminuir ao longo do tempo. Eles são usados para medir coisas como o número de solicitações recebidas por um servidor ou o número de erros que ocorrem em um sistema.
Histogramas são métricas que representam a distribuição de valores em um conjunto de dados. Eles são usados para medir coisas como o tempo de resposta de um servidor ou a utilização de recursos de um sistema.
Sumários são métricas que representam a distribuição de valores em um conjunto de dados. Eles são usados para medir coisas como o tempo de resposta de um servidor ou a utilização de recursos de um sistema.
Métricas temporais são métricas que representam um valor que muda ao longo do tempo. Elas são usadas para medir coisas como o tempo de resposta de um servidor ou a utilização de recursos de um sistema.
- Servidores
- Bancos de dados
- Aplicações
- Serviços
Servidores são alvos que podem ser monitorados para garantir que estejam funcionando corretamente. Isso pode incluir a verificação de métricas, logs e rastreamentos para garantir que o servidor esteja funcionando corretamente.
Bancos de dados são alvos que podem ser monitorados para garantir que estejam funcionando corretamente. Isso pode incluir a verificação de métricas, logs e rastreamentos para garantir que o banco de dados esteja funcionando corretamente.
Aplicações são alvos que podem ser monitorados para garantir que estejam funcionando corretamente. Isso pode incluir a verificação de métricas, logs e rastreamentos para garantir que a aplicação esteja funcionando corretamente.
Serviços são alvos que podem ser monitorados para garantir que estejam funcionando corretamente. Isso pode incluir a verificação de métricas, logs e rastreamentos para garantir que o serviço esteja funcionando corretamente.
- Alertas de limiar
- Alertas de anomalia
- Alertas de tendência
- Alertas de correlação
Alertas de limiar são alertas que são acionados quando uma métrica ultrapassa um determinado limite. Eles são usados para alertar as equipes de operações e desenvolvimento sobre problemas em um sistema.
Alertas de anomalia são alertas que são acionados quando uma métrica se desvia significativamente de seu comportamento normal. Eles são usados para alertar as equipes de operações e desenvolvimento sobre problemas em um sistema.
Alertas de tendência são alertas que são acionados quando uma métrica mostra uma tendência significativa ao longo do tempo. Eles são usados para alertar as equipes de operações e desenvolvimento sobre problemas em um sistema.
Alertas de correlação são alertas que são acionados quando duas ou mais métricas mostram um comportamento correlacionado. Eles são usados para alertar as equipes de operações e desenvolvimento sobre problemas em um sistema.
- Consultas de agregação
- Consultas de filtro
- Consultas de projeção
- Consultas de transformação
Consultas de agregação são consultas que são usadas para calcular estatísticas sobre um conjunto de dados. Elas são usadas para calcular coisas como a média, a mediana e o desvio padrão de um conjunto de dados.
Consultas de filtro são consultas que são usadas para filtrar um conjunto de dados com base em um critério específico. Elas são usadas para filtrar coisas como solicitações de um determinado tipo ou erros de um determinado tipo.
Consultas de projeção são consultas que são usadas para selecionar um subconjunto de colunas de um conjunto de dados. Elas são usadas para selecionar coisas como o tempo de resposta de um servidor ou a utilização de recursos de um sistema.
Consultas de transformação são consultas que são usadas para transformar um conjunto de dados em um formato diferente. Elas são usadas para transformar coisas como o tempo de resposta de um servidor ou a utilização de recursos de um sistema.
- Gráficos de linha
- Gráficos de barras
- Gráficos de pizza
- Gráficos de dispersão
Gráficos de linha são gráficos que são usados para mostrar a mudança de uma métrica ao longo do tempo. Eles são usados para mostrar coisas como o tempo de resposta de um servidor ou a utilização de recursos de um sistema.
Gráficos de barras são gráficos que são usados para mostrar a distribuição de uma métrica em um conjunto de dados. Eles são usados para mostrar coisas como o número de solicitações recebidas por um servidor ou o número de erros que ocorrem em um sistema.
Gráficos de pizza são gráficos que são usados para mostrar a distribuição de uma métrica em um conjunto de dados. Eles são usados para mostrar coisas como o número de solicitações recebidas por um servidor ou o número de erros que ocorrem em um sistema.
Gráficos de dispersão são gráficos que são usados para mostrar a relação entre duas métricas em um conjunto de dados. Eles são usados para mostrar coisas como a relação entre o tempo de resposta de um servidor e a utilização de recursos de um sistema.
- Métricas de contagem
- Métricas de tempo
- Métricas de porcentagem
- Métricas de proporção
Métricas de contagem são métricas que representam a contagem de algo. Elas são usadas para medir coisas como o número de solicitações recebidas por um servidor ou o número de erros que ocorrem em um sistema.
Métricas de tempo são métricas que representam a duração de algo. Elas são usadas para medir coisas como o tempo de resposta de um servidor ou o tempo que um sistema leva para processar uma solicitação.
Métricas de porcentagem são métricas que representam a proporção de algo em relação a um todo. Elas são usadas para medir coisas como a utilização de recursos de um sistema ou a taxa de erro de um sistema.
Métricas de proporção são métricas que representam a relação entre duas métricas. Elas são usadas para medir coisas como a relação entre o tempo de resposta de um servidor e a utilização de recursos de um sistema.
A escolha das métricas a serem utilizadas depende do tipo de aplicação que estamos monitorando. Abaixo, segue uma lista do que geralmente é monitorado em diferentes tipos de aplicações:
- REST (Transferência de Estado Representacional)
- SOAP (Protocolo Simples de Acesso a Objetos)
- GraphQL (Linguagem de Consulta e Manipulação de Dados)
- gRPC (Comunicação Remota Procedural)
- AWS Lambda
- Google Cloud Functions
- Azure Functions
- Processamento de Tarefas em Segundo Plano
- Exemplos: Workers do Node.js, Threads em Java
- Tarefas Agendadas
- Filas de Mensagens
- Exemplos: Cron Jobs, Azure WebJobs
- MySQL
- PostgreSQL
- MongoDB
- Oracle
- SQL Server
Aqui está uma tabela mostrando o que geralmente precisa ser monitorado em ordem de importância para diferentes tipos de aplicações:
Componente/Aspecto a ser Monitorado | API | Serverless | Worker | Jobs |
---|---|---|---|---|
Disponibilidade | Alta | Alta | Alta | Alta |
Latência | Baixa | Baixa | Baixa | Baixa |
Taxa de Erros | Baixa | Baixa | Baixa | Baixa |
Utilização de Recursos (CPU, Memória) | Moderada | Moderada | Variável | Moderada |
Número de Requisições | Moderado | Moderado | Baixo | Baixo |
Tempo de Resposta das Requisições | Baixo | Baixo | Moderado | Moderado |
Taxa de Sucesso das Requisições | Alta | Alta | Alta | Alta |
Monitoramento de Segurança | Sim | Sim | Sim | Sim |
Escalabilidade | Importante | Importante | Menos Import. | Menos Importante |
Integrações Externas (Ex: APIs de Terceiros) | Importante | Moderado | Moderado | Moderado |
Essas métricas e análises no Prometheus fornecem insights valiosos sobre o desempenho, a disponibilidade e o comportamento da API, permitindo uma monitoração eficaz e a identificação de possíveis problemas. As documentações de consulta fornecem detalhes adicionais sobre como utilizar as funções e expressões no Prometheus.
Métrica | Descrição | Cálculo/Análise no Prometheus | Justificativa | Documentação de Consulta |
---|---|---|---|---|
api_requests_total |
Total de solicitações recebidas pela API | sum(rate(api_requests_total[5m])) |
Monitorar o volume total de tráfego na API | Rate Function |
api_request_duration_seconds |
Duração das solicitações | histogram_quantile(0.95, sum(rate(api_request_duration_seconds_bucket[5m])) / sum(rate(api_request_duration_seconds_count[5m]))) |
Identificar o tempo médio de resposta das solicitações | Histograms and Summaries |
api_requests_by_method_total |
Número de solicitações por tipo de método HTTP | sum by (method) (rate(api_requests_by_method_total[5m])) |
Verificar a distribuição de solicitações por método HTTP | Grouping by |
api_response_size_bytes |
Tamanho das respostas enviadas pela API | avg(api_response_size_bytes) |
Monitorar o tamanho médio das respostas | Averaging Functions |
api_request_errors_total |
Número de erros de solicitação | sum(rate(api_request_errors_total[5m])) |
Identificar a taxa de erro de solicitação | Rate Function |
api_request_duration_seconds{endpoint="meu_endpoint"} |
Tempo de resposta por endpoint específico | histogram_quantile(0.95, sum(rate(api_request_duration_seconds_bucket{endpoint="meu_endpoint"}[5m])) / sum(rate(api_request_duration_seconds_count{endpoint="meu_endpoint"}[5m]))) |
Avaliar o tempo médio de resposta para endpoints específicos | Histograms and Summaries |
Um histograma é uma estrutura de dados estatística que organiza e resume a distribuição de valores de uma métrica em intervalos (buckets) fixos. Em Prometheus, os histogramas são comumente usados para medir a distribuição dos tempos de resposta de solicitações HTTP, por exemplo.
Percentil é uma medida estatística que indica o valor abaixo do qual um percentual específico de observações em um grupo cai. Por exemplo, o percentil 95 (abreviado como P95) indica o valor abaixo do qual 95% dos dados em um conjunto de dados cai.
A função histogram_quantile()
do Prometheus é usada para calcular os percentis de um histograma. A fórmula para calcular o percentil é um pouco complexa, mas pode ser compreendida da seguinte maneira:
-
Coleta de Dados: O Prometheus coleta dados de histograma em dois vetores: o vetor de contagens e o vetor de somas.
- O vetor de contagens (
_bucket
) contém o número de observações em cada intervalo (bucket) do histograma. - O vetor de somas (
_sum
) contém a soma total dos valores observados em cada intervalo.
- O vetor de contagens (
-
Calculando o Quantil: A função
histogram_quantile()
utiliza esses dados para calcular o valor do percentil desejado.- Primeiro, a função calcula a soma cumulativa das contagens de cada intervalo até o percentil desejado.
- Em seguida, ele encontra o intervalo onde a soma cumulativa ultrapassa o percentil desejado.
- Por fim, ele interpola linearmente entre os limites desse intervalo para calcular o valor do percentil.
No contexto do Prometheus, os "vetores" referem-se a conjuntos de séries temporais que representam dados coletados de métricas ao longo do tempo. Existem dois tipos principais de vetores usados no Prometheus: vetores instantâneos e vetores de intervalo.
- Vetores Instantâneos: Vetores instantâneos representam uma única amostra para cada série temporal em um momento específico no tempo. Eles são úteis para consultar o valor atual de uma métrica em um determinado ponto no tempo. Por exemplo,
cpu_usage{instance="example.com"}
é um vetor instantâneo que representa a utilização atual da CPU em um determinado servidor.
Imagine que temos um amigo chamado Alex, que é dono de uma loja online. Alex quer monitorar quantas pessoas estão visitando sua loja a cada minuto. Então, a cada minuto, ele olha para o número de visitantes e anota esse número. Esses números são como os "instantâneos" que nos mostram quantos visitantes estavam na loja naquele momento específico.
- Vetores de Intervalo: Vetores de intervalo representam uma série de amostras para cada série temporal dentro de um intervalo de tempo específico. Eles são usados para consultas que envolvem uma janela de tempo, como calcular médias ou taxas de mudança ao longo do tempo. Por exemplo,
rate(http_requests_total[5m])
é um vetor de intervalo que representa a taxa de solicitações HTTP por segundo nos últimos 5 minutos.
Agora, Alex quer entender como o número de visitantes mudou ao longo do dia. Ele olha para o número de visitantes a cada hora e anota esses números. Depois, ele junta esses números para ver como o número de visitantes mudou ao longo do dia. Esses são como os "vetores de intervalo" que nos mostram como o número de visitantes mudou ao longo do tempo.
A consulta para obter os instantâneos do número de visitantes a cada minuto seria algo assim:
rate(visitors_online[1m])
Esta consulta calcula a taxa de alteração da métrica visitors_online
ao longo do tempo, considerando uma janela de 1 minuto. Isso nos dará um instantâneo do número de visitantes por minuto.
Para tornar a consulta mais realista, podemos usar uma função de agregação, como sum()
ou avg()
, para agregar os dados de diferentes instâncias ou réplicas da loja online, se aplicável. Por exemplo:
sum(rate(visitors_online[1m])) by (instance)
Esta consulta calcula a taxa de alteração da métrica visitors_online
ao longo do tempo para cada instância da loja online e, em seguida, soma os resultados.
Assim, o resultado desta consulta nos fornecerá uma série temporal com os instantâneos do número de visitantes da loja online a cada minuto, permitindo-nos entender melhor o fluxo de visitantes ao longo do tempo.
Supondo que você queira recuperar o número absoluto de visitantes da loja online a cada minuto, você pode usar a função sum()
para agregar os valores instantâneos da métrica visitors_online
dentro de cada intervalo de tempo. Aqui está a consulta:
sum(visitors_online) by (time)
Esta consulta somará todos os valores instantâneos da métrica visitors_online
para cada intervalo de tempo (cada ponto de dados), fornecendo o número absoluto de visitantes em cada minuto.
Além disso, o Prometheus também coleta dados de histograma em vetores especiais conhecidos como vetores de histograma. Esses vetores são usados para métricas que estão agrupadas em intervalos (buckets) com base em valores específicos. Por exemplo, um vetor de histograma pode representar o número de solicitações HTTP que caíram em intervalos de tempo de resposta específicos.
Em resumo, os vetores no Prometheus são conjuntos de séries temporais que representam dados de métricas ao longo do tempo. Eles são fundamentais para consultas e análises de dados no Prometheus, permitindo monitoramento eficaz e visualização de métricas em sistemas e aplicações.
Assim como o Alex usa esses "vetores" para entender o comportamento dos visitantes de sua loja ao longo do tempo, nós usamos esses vetores mágicos no monitoramento de uma API REST para entender como ela está sendo usada, como seu desempenho está mudando e se há algum problema acontecendo.
Suponha que temos um histograma que mede o tempo de resposta das solicitações HTTP. Queremos calcular o tempo médio de resposta no percentil 95. Podemos usar a função histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])))
para calcular isso.
Essa expressão calcula o tempo médio de resposta no percentil 95 nos últimos 5 minutos usando os dados coletados dos buckets de duração das solicitações HTTP.
Em resumo, a função histogram_quantile()
do Prometheus é essencial para calcular percentis em histogramas e entender a distribuição dos dados. Ele nos permite obter insights valiosos sobre o desempenho de nossas aplicações e sistemas.
Ao calcular o tempo de resposta de uma API usando percentis, geralmente se coletam os tempos de resposta de cada solicitação feita à API ao longo do tempo. Esses tempos de resposta são organizados em uma série temporal e ordenados em ordem crescente.
Depois de coletar esses tempos de resposta, podemos usar percentis para entender melhor o desempenho da API. Por exemplo:
- Percentil 50 (p50): Este é o valor onde 50% das respostas foram mais rápidas e 50% foram mais lentas. É uma medida da tendência central dos tempos de resposta da API.
histogram_quantile(0.50, sum(rate(api_request_duration_seconds_bucket[5m])) by (le))
Esta consulta calcula o percentil 50 (p50) do tempo de resposta das solicitações da API nos últimos 5 minutos. Ele usa a métrica
api_request_duration_seconds_bucket
que contém os tempos de resposta agrupados em intervalos (buckets) erate()
para calcular a taxa de alteração ao longo do tempo.
- Percentil 95 (p95): Este é o valor onde 95% das respostas foram mais rápidas e apenas 5% foram mais lentas. Isso nos dá uma ideia do desempenho típico da API na maioria dos casos, excluindo os casos extremos.
histogram_quantile(0.50, sum(rate(api_request_duration_seconds_bucket[5m])) by (le))
Esta consulta calcula o percentil 95 (p95) do tempo de resposta das solicitações da API nos últimos 5 minutos.
- Percentil 99 (p99): Este é o valor onde 99% das respostas foram mais rápidas e apenas 1% foram mais lentas. Ele nos dá uma ideia do desempenho extremo da API em situações raras ou de pico.
histogram_quantile(0.50, sum(rate(api_request_duration_seconds_bucket[5m])) by (le))
Esta consulta calcula o percentil 99 (p99) do tempo de resposta das solicitações da API nos últimos 5 minutos. Essas consultas usam a função
histogram_quantile()
para calcular os valores dos percentis 50, 95 e 99 com base nos dados de tempo de resposta armazenados em um histograma. Esses percentis são úteis para entender a distribuição dos tempos de resposta da API e identificar os casos extremos ou típicos de desempenho. Vamos dar um exemplo para ilustrar:
Suponha que coletamos os tempos de resposta de uma API durante uma hora. Após organizar esses tempos de resposta em ordem crescente, podemos calcular os percentis:
- p50: 100 ms
- p95: 500 ms
- p99: 2000 ms
Isso significa que:
- Metade das solicitações (p50) foram respondidas em 100 ms ou menos.
- 95% das solicitações (p95) foram respondidas em 500 ms ou menos.
- 99% das solicitações (p99) foram respondidas em 2000 ms ou menos.
Esses percentis nos ajudam a entender o desempenho da API em diferentes situações e a identificar possíveis gargalos ou problemas de desempenho. Eles são uma ferramenta valiosa para avaliar a qualidade e a eficiência de uma API em ambientes de produção.
Os logs são registros de eventos ou atividades que ocorrem em um sistema, como uma aplicação ou infraestrutura. Eles fornecem uma maneira de acompanhar o que está acontecendo, permitindo a detecção de problemas, monitoramento de desempenho e investigação de incidentes. Aqui está uma visão geral simples de como funciona o processo de coleta, exposição e formatação dos logs até o processamento e indexação:
-
Coleta: Quando um aplicativo é executado, ele gera logs para registrar eventos relevantes, como erros, avisos ou informações sobre atividades do usuário.
-
Exposição: Os logs são geralmente escritos em arquivos de texto simples, onde podem ser facilmente acessados pela equipe de desenvolvimento ou operações.
-
Formatação: Os logs são formatados de forma estruturada ou não estruturada, dependendo das necessidades da aplicação. Isso pode incluir informações como timestamp, tipo de evento e detalhes adicionais.
-
Coleta: Os dispositivos de infraestrutura, como servidores, roteadores e switches, também geram logs para registrar eventos importantes, como falhas de hardware, congestionamento de rede ou problemas de segurança.
-
Exposição: Assim como os logs de aplicativos, os logs de infraestrutura são geralmente armazenados em arquivos de texto simples ou podem ser enviados para um servidor centralizado para processamento adicional.
-
Formatação: Os logs de infraestrutura podem conter informações específicas sobre o dispositivo, como endereço IP, nome do host e status do sistema.
-
Coleta: Os logs de segurança registram atividades relacionadas à segurança, como tentativas de login falhadas, acessos não autorizados ou atividades suspeitas.
-
Exposição: Eles são geralmente armazenados de forma segura e acessados apenas por equipes de segurança autorizadas.
-
Formatação: Os logs de segurança podem incluir informações detalhadas sobre o evento, como o endereço IP do usuário, o tipo de atividade e o resultado da ação.
-
Coleta: Os logs de auditoria registram eventos relacionados à conformidade regulatória, políticas internas ou auditorias externas.
-
Exposição: Eles são mantidos de forma segura e podem ser acessados por equipes de auditoria ou conformidade.
-
Formatação: Os logs de auditoria geralmente incluem informações detalhadas sobre as ações realizadas, os usuários envolvidos e o resultado da auditoria.
Depois que os logs são coletados, eles podem ser processados e indexados para facilitar a pesquisa, análise e visualização. Isso geralmente envolve o uso de ferramentas de análise de logs, como Elasticsearch, Logstash e Kibana (ELK Stack), que permitem pesquisar e analisar grandes volumes de logs de forma eficiente.
Em resumo, os logs são uma parte fundamental da observabilidade de sistemas, fornecendo insights valiosos sobre o funcionamento e o desempenho de uma aplicação, infraestrutura, segurança e conformidade. Entender como os logs são coletados, expostos, formatados, processados e indexados é essencial para garantir uma operação eficiente e segura dos sistemas de TI.
Existem várias maneiras de coletar logs de sistemas e aplicativos. Abaixo estão algumas das formas mais comuns:
- Descrição: Os logs são gravados diretamente em arquivos de texto locais no sistema onde a aplicação está sendo executada.
- Método de Coleta: Os logs são escritos em arquivos de log configurados localmente pela aplicação.
- Vantagens: Simples de configurar e implementar, baixo overhead de rede.
- Desvantagens: Difícil de gerenciar em escala, não centralizado, difícil de monitorar em tempo real.
- Descrição: Um agente de coleta é instalado em cada servidor ou máquina e é responsável por enviar os logs para um local centralizado.
- Método de Coleta: O agente coleta os logs localmente e os envia para um servidor central.
- Vantagens: Centralizado para fácil gerenciamento, possibilita a correlação de logs entre vários sistemas.
- Desvantagens: Requer configuração e gerenciamento dos agentes, potencial para overhead de rede.
- Descrição: Os logs são enviados diretamente para um serviço de coleta de logs via API ou protocolos remotos.
- Método de Coleta: As aplicações enviam os logs diretamente para um serviço de coleta de logs usando APIs ou protocolos como Syslog, Fluentd, ou Logstash.
- Vantagens: Elimina a necessidade de instalar e gerenciar agentes, escalável para ambientes em nuvem e distribuídos.
- Desvantagens: Pode exigir modificações nas aplicações para suportar a coleta via API, potencial para overhead de rede dependendo da implementação.
A escolha da melhor opção de coleta de logs depende dos requisitos específicos do seu ambiente, incluindo o tamanho e a complexidade da infraestrutura, o volume de logs gerados e os recursos disponíveis para gerenciar a coleta de logs.
- Para ambientes menores e menos complexos, a coleta local em arquivos pode ser suficiente e fácil de implementar.
- Para ambientes maiores e mais distribuídos, a centralização de logs com agentes ou a coleta via API pode ser mais escalável e fácil de gerenciar em longo prazo.
Em geral, é importante considerar fatores como escalabilidade, facilidade de gerenciamento, overhead de rede e integração com ferramentas de análise de logs ao escolher a melhor opção de coleta de logs para o seu ambiente.
Coletores de Logs | Descrição | Documentação | Exemplos de Casos de Uso |
---|---|---|---|
1. Fluentd | Coletor de logs unificado que permite coletar, filtrar e encaminhar logs para vários destinos. | Documentação | Integração com Kubernetes, coleta de logs de aplicativos e infraestrutura. |
2. Logstash | Pipeline de processamento de dados que coleta, transforma e envia logs para destinos como Elasticsearch ou outros sistemas. | Documentação | Centralização de logs, análise de segurança e monitoramento de infraestrutura. |
3. rsyslog | Servidor de logs robusto e altamente configurável, que suporta uma variedade de formatos de logs e protocolos de envio. | Documentação | Coleta de logs do sistema, logs de segurança e auditoria. |
4. Graylog | Plataforma de gerenciamento de logs e eventos que coleta, processa e armazena logs de várias fontes para análise e visualização. | Documentação | Monitoramento de segurança, análise de desempenho de aplicativos e registros de auditoria. |
5. Fluent Bit | Coletor de logs leve e rápido, projetado para coletar e enviar logs para sistemas de agregação, como Fluentd, Elasticsearch e outros. | Documentação | Coleta de logs de contêineres, monitoramento de Kubernetes e integração com plataformas de nuvem. |
6. NXLog | Coletor de logs multiplataforma que suporta vários formatos de logs e protocolos de envio, adequado para ambientes Windows e Linux. | Documentação | Monitoramento de logs do sistema, segurança de rede e análise forense. |
7. Apache Flume | Ferramenta de ingestão de dados distribuída que pode coletar, agregar e mover grandes volumes de dados de log para sistemas de armazenamento centralizado. | Documentação | Ingestão de logs de aplicativos web, análise de tráfego e monitoramento de servidores. |
8. Beats (Filebeat, Metricbeat, etc.) | Coleção de agentes leves de envio de dados, desenvolvidos pela Elastic, que coletam e enviam logs, métricas e outros dados para Elasticsearch. | Documentação | Monitoramento de contêineres, coleta de métricas de infraestrutura e logs de segurança. |
9. Syslog-ng | Implementação avançada do protocolo syslog que oferece recursos de filtragem, encaminhamento e processamento de logs em tempo real. | Documentação | Coleta de logs do sistema, logs de firewall e monitoramento de eventos de segurança. |
10. Logagent | Coletor de logs leve e rápido, com suporte a plugins, que permite coletar, enriquecer e enviar logs para várias saídas. | Documentação | Coleta de logs de aplicativos, monitoramento de contêineres e integração com sistemas de monitoramento. |
A exposição de logs é uma prática importante em desenvolvimento de software e administração de sistemas, pois permite monitorar e analisar o comportamento de um sistema, identificar problemas e tomar decisões informadas sobre manutenção e otimização. Abaixo estão algumas aplicações comuns para a exposição de logs, juntamente com uma lista em formato Markdown:
-
Monitoramento de Aplicações em Tempo Real: Exibir logs em tempo real ajuda a identificar problemas imediatos, como erros de aplicação, falhas de conexão ou atividades suspeitas.
-
Depuração de Código: Logs detalhados podem ajudar os desenvolvedores a identificar e corrigir bugs no código. A exposição de logs pode fornecer insights sobre o fluxo de execução e o estado das variáveis durante a execução do programa.
-
Análise de Desempenho: Monitorar logs de desempenho permite identificar gargalos de desempenho, tempos de resposta lentos e áreas do sistema que podem ser otimizadas.
-
Segurança da Informação: A exposição de logs é crucial para detectar atividades maliciosas, como tentativas de invasão, acesso não autorizado ou comportamento suspeito em sistemas de segurança.
-
Auditoria e Conformidade: Logs detalhados são frequentemente necessários para fins de auditoria e conformidade com regulamentações, como HIPAA (Health Insurance Portability and Accountability Act) ou GDPR (General Data Protection Regulation).
-
Resolução de Problemas de Produção: Quando ocorrem problemas em ambientes de produção, os logs podem ajudar a diagnosticar e resolver rapidamente os problemas, minimizando o tempo de inatividade do sistema.
-
Análise de Tendências e Padrões: Analisar logs ao longo do tempo pode revelar tendências e padrões de uso do sistema, ajudando a planejar futuras atualizações e melhorias.
Formato de Log | Descrição | Link de Referência |
---|---|---|
Syslog | Formato de log padrão usado principalmente em sistemas Unix e Linux. Os logs geralmente são texto simples com uma estrutura definida. | RFC 5424 - Syslog Protocol |
JSON | Formato de log estruturado no formato JSON (JavaScript Object Notation). Permite uma análise mais fácil dos logs e integração com ferramentas de análise de logs. | Introdução ao JSON |
CSV (Comma-Separated Values) | Formato de log no qual os valores são separados por vírgulas. É frequentemente usado para registros tabulares simples e é fácil de ser lido e manipulado por ferramentas de planilhas e bancos de dados. | Wikipedia - CSV |
Apache Log Format | Formato de log usado pelo servidor web Apache. Os logs seguem um formato padronizado que inclui informações sobre solicitações HTTP, como endereço IP, URL solicitada e código de status HTTP. | Apache Log Files |
Common Log Format (CLF) | Uma variante do formato de log do Apache que segue uma estrutura comum para logs de servidores web. Contém informações básicas sobre solicitações HTTP, como método, URL e código de status. | Common Log Format |
W3C Extended Log Format | Outra variante do formato de log do Apache que fornece mais detalhes sobre solicitações HTTP, como referenciador, agente do usuário e tempo de resposta do servidor. | W3C Extended Log File Format |
ECS (Elastic Common Schema) | Um conjunto de campos padronizados e uma estrutura de dados para logs e eventos. Foi projetado para facilitar a integração, análise e visualização de logs em uma variedade de ferramentas e plataformas. | Elastic Common Schema |
Protocolo | Descrição | Portas Usadas | Link de Referência |
---|---|---|---|
Syslog | Protocolo padrão para envio de mensagens de log em redes IP. Permite a coleta centralizada de logs de vários dispositivos e aplicativos. | UDP: 514 | RFC 5424 - Syslog Protocol |
SNMP (Simple Network Management Protocol) | Protocolo usado para gerenciamento e monitoramento de dispositivos de rede. Pode ser usado para coletar informações de status e logs de dispositivos de rede. | UDP: 161 | RFC 1157 - SNMP |
SNMP Trap | Uma forma de notificação assíncrona usada para informar a uma estação de gerenciamento de rede sobre eventos de interesse. Pode ser usado para enviar logs e alertas de dispositivos de rede. | UDP: 162 | RFC 1157 - SNMP |
Logstash Forwarder (Beats) | Protocolo usado pelo Logstash Forwarder (também conhecido como Beats) para enviar logs de clientes para o Logstash para processamento. Pode ser usado em combinação com o ELK Stack (Elasticsearch, Logstash, Kibana). | TCP: 5044 | Beats Protocol |
HTTP/S | Protocolo de transferência de hipertexto usado para comunicação entre clientes e servidores web. Pode ser usado para enviar logs para servidores remotos ou serviços de armazenamento em nuvem. | TCP: 80, 443 | RFC 7230 - HTTP/1.1 |
TCP/UDP | Protocolos de transporte usados para comunicação de rede. Podem ser usados para enviar logs entre dispositivos em uma rede local ou pela Internet. | TCP: 0-65535, UDP: 0-65535 | RFC 793 - TCP, RFC 768 - UDP |
AMQP (Advanced Message Queuing Protocol) | Protocolo de mensagens assíncronas usado para troca de mensagens entre aplicativos. Pode ser usado para enviar logs entre componentes de sistemas distribuídos. | TCP: 5672 | AMQP Specification |
GELF (Graylog Extended Log Format) | Formato de log usado pelo Graylog para envio de logs estruturados. É baseado em JSON e suporta compressão e transferência eficiente de logs. | UDP: 12201 | Graylog GELF Specification |
Subindo ambiente de estudos prometheus
Faça um clone do repositório:
git clone https://github.com/wiltoninfra/observability
Entre na pasta do projeto:
cd metric/prometheus
Execute o comando abaixo para subir o ambiente:
docker-compose up -d
Verifique se todos os serviços estão em execução:
docker-compose ps
Acesse no browser usando http://localhost:<porta de acesso>
Para visualizar as métricas que cada serviço esta expondo acesse: http://localhost:<porta de acesso>/metrics
Serviço | Porta de Acesso | Descrição |
---|---|---|
Prometheus | 9090 | Interface do Prometheus para visualização de métricas e configuração. |
Grafana | 3010 | Interface do Grafana para visualização de dashboards e métricas. |
Alertmanager | 9093 | Interface do Alertmanager para gerenciamento de alertas. |
Node Exporter | 9100 | Métricas do sistema operacional e hardware do host. |
cAdvisor | 8080 | Métricas do uso de recursos de contêineres Docker. |
Blackbox Exporter | 9115 | Exportador para realizar verificações de endpoints HTTP, HTTPS, TCP, ICMP e DNS. |
Redis Exporter | 9121 | Exportador de métricas do Redis. |
PostgreSQL Exporter | 9187 | Exportador de métricas do PostgreSQL. |
Frontend (Node.js) | 3000 | Aplicação Frontend em Node.js. |
Backend (Node.js) | 8080 | Aplicação Backend em Python. |
Worker (Node.js) | 3001 | Aplicação Worker em Node.js. |
Acesse os desafios propostos no laboratório e pratique seus conhecimentos.