A maneira de desenvolver software mudou
Com o surgimento da arquitetura baseada em microsserviços, agora como padrão para a maioria dos aplicativos web, a forma de desenvolvimento de software passou por grandes mudanças. Nesta arquitetura temos aplicações distribuídas e levemente acopladas para que mudanças não prejudiquem o todo.
Quais as vantagens da mudança?
A arquitetura de microsserviços permite que as empresas estruturem suas equipes em torno dos problemas do negócio para que trabalhem de forma independente, em diferentes plataformas.
O que é monitoramento?
Monitoramento consiste em acompanhar uma aplicação, recurso ou ambiente para entender o motivo de algo estar quebrando. Deve abordar duas questões: o que e por que está quebrado?
É crucial para analisar tendências de longo prazo, que combinadas com alertas permitem saber como seus aplicativos funcionam, como estão crescendo, como estão sendo utilizados e o principal: se estão quebrados ou prestes a quebrar.
Um bom exemplo é o monitoramento de problemas conhecidos como espaço em disco.
O monitoramento traz uma limitação: saber o que é normal. Mas falhas em produção não são lineares e não podem ser previstas o tempo todo.
O que é observabilidade?
Pode ser entendida como uma ajuda ao monitoramento, permitindo que possamos navegar dos defeitos a causa de um problema e entender o quê, onde e porquê.
Sem um nível mínimo de observabilidade seria impossível monitorar.
O observabilidade nos permite responder algumas perguntas:
Por quais serviços uma solicitação passou?
Quais foram os gargalos de desempenho?
Porque a solicitação falhou?
Como a solicitação foi processada?
O pilares da observabilidade
O que é um log?
Um log é um registro imutável que demonstra eventos discretos identificados por data e hora do acontecimento.
O que é uma métrica?
Métricas são as bases do monitoramento. Normalmente são contagens ou medidas agregadas ao longo do tempo.
São exemplos de métricas a quantidade de memória utilizada ou o número de conexões em um banco de dados.
O que é rastreamento?
O rastreamento descreve o caminho percorrido por uma solicitação, mostrando o seu rastro e efeitos nos serviços de uma aplicação.
Por onde começar?
O que é
Datadog?
O Datadog é uma a plataforma de monitoramento e segurança para aplicativos em nuvem.
Reúne rastreamentos, métricas e logs de ponta a ponta para tornar aplicativos, infraestrutura e serviços de terceiros totalmente observáveis. Esses recursos ajudam as empresas a proteger seus sistemas, evitar o tempo de inatividade e garantir que os clientes obtenham a melhor experiência do usuário.
Criando uma conta
Datadog Agent
O agente do Datadog é um software que roda nos hosts coletando eventos e métricas que são enviadas para o Datadog onde podemos analisá-las.
Métricas
[ 17.82, 22:11:01 ]
[ 6.38, 22:11:12 ]
[ 2.87, 22:11:38 ]
[ 7.06, 22:12:00 ]
Metric Explorer
É uma interface básica para que as métricas disponíveis no Datadog sejam exploradas.
Metric Summary
É uma interface que exibe uma lista das métricas reportadas ao Datadog. Você pode buscá-las e examinar detalhes de cada métrica.
Metric Units
Métricas podem ser exibidas em gráficos, listas e query value widgets. Cada métrica possui uma unidade de medida de acordo com o seu tipo.
Filtrando Métricas
# Boolean
!
,
NOT, not
AND, and
OR, or
IN, in
NOT IN, not in
# Wildcard
pod_name: web-*
cluster:*-trace
Hora de Práticar:
Por meio do metric explorer, usar as métricas disponíveis para exibir os seguintes gráficos de área:
Memória total (verde);
Memória livre ou disponível (azul);
Percentual de memória utilizada (amarelo);
As métricas devem ser nomeadas de acordo com as descrições e cores acima.
Hora de Práticar:
Por meio do metric explorer, usar as métricas disponíveis para exibir um gráfico de linhas com os dados a seguir:
Percentual de memória utilizada;
Percentual de CPU utilizado;
As métricas devem ser nomeadas de acordo com as descrições acima. Utilizar o esquema de cores blue.
Hora de Práticar:
Por meio do metric explorer, usar as métricas disponíveis para exibir um gráfico de barras com os dados a seguir:
Percentual de disco utilizado;
A métrica deve ser nomeada de acordo com a descrição acima e deve estar agrupada por nome do dispositivo de armazenamento. Utilizar o esquema de cores warm.
Hora de Práticar:
Por meio do metric explorer, usar as métricas disponíveis para exibir um gráfico de linhas com os dados a seguir:
Bytes enviados;
Bytes recebidos;
As métricas deve ser nomeadas de acordo com as descrições acima. Bytes recebidos devem ser transformados em números negativos para facilitar a visualização. Utilizar o esquema de cores Cool.
Configurações
As configurações do agente são realizadas por meio de arquivos YAML
O arquivo datadog.yaml possui as principais configurações do agente, já as configurações adicionais ficam na pasta conf.d
Os logs são armazenados na pasta logs
Hora de Práticar:
No arquivo de configurações gerais do agente, habilitar e configurar os seguintes parâmetros:
env: development
hostname: curso-devops-local
Verificar se as alterações tiveram efeito e estão sendo exibidas nas métricas.
Hora de Práticar:
Nas configurações da organização, gerar uma nova API Key e em seguida, substituir a chave atual pela nova nas configurações gerais do agente.
Verificar nos logs se a chave foi atualizada e se o agente continua coletando as métricas normalmente.
Integrações
As integrações reúnem métricas separadamente, podendo serem utilizadas para reunir métricas e logs para obter informações sobre um sistema como um todo. O Datadog detectará automaticamente algumas tecnologias que possam ser monitoradas.
Processos
A checagem de processos coleta métricas específicas de processos rodando em um host: CPU, memória, threads, etc.
Hora de Práticar:
Localizar os processos de algum navegador em execução utilizando o monitor de processos. Feito isso, utilizar o metric explorer a partir de processos para exibir gráficos de áreas para os dados a seguir:
Percentual de CPU utilizado;
Percentual de Memória utilizada;
As métricas deve ser nomeadas de acordo com as descrições acima. Limitar a 10 os resultados exibidos.
create user datadog with password 'datadog';
grant pg_monitor to datadog;
grant SELECT ON pg_stat_database to datadog;
init_config:
instances:
- host: localhost
port: 5432
username: datadog
password: datadog
Criar usuário no console do postgres
Configurar o arquivos postgres.d/conf.yaml
Hora de Práticar:
Habilitar a integração com o postgres, seguindo os passos
descritos anteriormente, com base na documentação e versão do postgres instalada;
https://docs.datadoghq.com/integrations/postgres/?tab=host#setup
Hora de Práticar:
Por meio do metric explorer, usar as métricas da integração com o postgres para exibir um gráfico de linhas com o dado a seguir:
Número de conexões;
A métrica deve ser nomeada de acordo com a descrição acima.
Hora de Práticar:
Por meio do metric explorer, usar as métricas da integração com o postgres para exibir um gráfico de linhas com os dados a seguir:
Número de linhas inseridas;
Número de linhas atualizadas;
Número de linhas removidas;
As métricas devem ser nomeadas de acordo com as descrições acima.
Hora de Práticar:
No arquivo de configurações da integração com o postgres, alterar o parâmetro que nomeia o serviço para postgres-curso-devops.
Verificar se as alterações tiveram efeito e se o agente está coletando as métricas.
Database Monitoring
Permite uma visibilidade profunda nos bancos de dados por meio de métricas históricas de performance de queries e planos de execução.
shared_preload_libraries= pg_stat_statements
track_activity_query_size= 4096
track_io_timing= on
Configurar o postgres.conf
CREATE SCHEMA datadog;
GRANT USAGE ON SCHEMA datadog TO datadog;
GRANT USAGE ON SCHEMA public TO datadog;
GRANT pg_monitor TO datadog;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
init_config:
instances:
- host: localhost
port: 5432
username: datadog
password: datadog
dbm: true
Criar usuário no console do postgres, em todos os databases a serem monitorados
Configurar o arquivos postgres.d/conf.yaml
CREATE OR REPLACE FUNCTION datadog.explain_statement(
l_query TEXT,
OUT explain JSON
)
RETURNS SETOF JSON AS
$$
DECLARE
curs REFCURSOR;
plan JSON;
BEGIN
OPEN curs FOR EXECUTE pg_catalog.concat('EXPLAIN (FORMAT JSON) ', l_query);
FETCH curs INTO plan;
CLOSE curs;
RETURN QUERY SELECT plan;
END;
$$
LANGUAGE 'plpgsql'
RETURNS NULL ON NULL INPUT
SECURITY DEFINER;
Criar usuário no console do postgres, em todos os databases a serem monitorados
Hora de Práticar:
Habilitar o monitoramento do postgres, seguindo os passos descritos anteriormente, com base na documentação e versão do postgres instalada;
https://docs.datadoghq.com/database_monitoring/setup_postgres/selfhosted/?tab=postgres10#configure-postgres-settings
Verificar no Monitor de Banco de Dados se as métricas estão sendo coletadas.
Coleta de Logs
Registrar logs de operações importantes é crucial. Infraestruturas modernas tem a capacidade de gerar milhares de eventos de log por minuto.
Para isso é necessário escolher quais logs enviar para manter o gerenciamento e arquivamento otimizado, sempre se preocupando em não gerar lacunas e remoções acidentais.
O Datadog Log Management, permite que você colete, processe, arquive, explore e monitore todos os seus logs sem limitações, sua marca registrada.
logs_enabled: true
Configurar o datadog.yaml
logs:
- type: file
path: C:\Program Files\PostgreSQL\15\data\log\postgres.log
service: postgres
source: postgresql
log_processing_rules:
- type: multi_line
pattern: \d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])
name: new_log_start_with_date
Arquivo de configuração da integração postgres.d/conf.yaml
logging_collector = on
log_filename = 'postgresql.log'
log_statement = 'all'
log_file_mode = 0644
Arquivo de configuração do postgres postgresql.conf
Verificar se o log do agente apresenta falhas de acesso ao arquivo de logs. Caso encontre, utilize a documentação para resolução do problema:
https://docs.datadoghq.com/logs/guide/log-collection-troubleshooting-guide/?tab=linuxandmacos#permission-issues-tailing-log-files
Hora de Práticar:
Com base nos passos anteriores, realizar a configuração para coletar os logs de postgres.
Configurações em postgres.conf;
Configurações no arquivo de integração;
Verificar no Log Explorer se existem erros no agente e se os logs vindos do postgres estão sendo coletados.
Hora de Práticar:
Utilizando o log explorer, criar uma gráfico de barras contendo as seguintes informações referente ao serviço postgres:
Número total de logs;
Número total de logs contendo a palavra SELECT;
Cada coluna deve representar o período de 1 minuto.
Coleta customizada de Logs
Além das integrações já existentes, podemos criar nossas próprias coletas de logs, podendo assim enviar logs de qualquer arquivo.
logs:
- type: file
path: C:/ProgramData/Datadog/logs/agent.log
service: datadog
source: agent
Criar o arquivo de configuração conf.d/datadog.d/conf.yaml
Hora de Práticar:
Utilizando o log explorer, criar uma top list dos logs agrupados por serviço.
logs:
- type: file
path: C:/ProgramData/Datadog/logs/process-agent.log
service: datadog
source: process-agent
Criar o arquivo de configuração conf.d/datadog.d/conf.yaml
Hora de Práticar:
Utilizando o log explorer, criar uma gráfico de barras contendo as seguintes informações:
Número total de logs, agrupado por source;
Número total de logs contendo a palavra warn;
Cada coluna deve representar o período de 1 minuto.
Alertas
Os alertas permitem que você possa criar monitores para checar métricas e enviar notificações baseadas em seus valores, por meio de condições.
Os monitores podem ser baseados em diversas fontes de informação, como métricas, processos em tempo real, logs, integrações, etc.
Hora de Práticar:
Por meio do recurso de monitoramento, criar um monitor baseado em métricas do sistema para alertar sobre o uso de memória, obedecendo os seguintes critérios:
- Avisar caso a média do percentual de memória utilizada ultrapasse 90% últimos 10 minutos
- Alertar caso a média do percentual de memória utilizada ultrapasse 95% nos últimos 10 minutos
A prioridade deste monitor deve ser P2
Hora de Práticar:
Por meio do recurso de monitoramento, criar um monitor baseado em métricas do sistema para alertar sobre o uso de CPU, obedecendo os seguintes critérios:
- Avisar caso a média do percentual de CPU Total (System + User) utilizado ultrapasse 85% últimos 5 minutos
- Alertar caso a média do percentual de CPU Total (System + User) utilizado ultrapasse 90% nos últimos 5 minutos
No corpo da notificação, informar qual o host e o valor que ativaram o alerta. A prioridade deste monitor deve ser P1
Hora de Práticar:
Por meio do recurso de monitoramento, criar um monitor baseado em métricas do sistema para alertar sobre o uso de disco, obedecendo os seguintes critérios:
- Avisar caso a média do percentual de Disco (por dispositivo) utilizado ultrapasse 80% últimos 15 minutos
- Alertar caso a média do percentual de Disco (por dispositivo) utilizado ultrapasse 90% nos últimos 15 minutos
No corpo da notificação, exibir uma mensagem personalizada caso não existam dados coletados para o monitor. A prioridade deste monitor deve ser P3.
Hora de Práticar:
Por meio do recurso de monitoramento, criar um monitor baseado em processo em tempo real para alertar sobre o número de processos de um dos navegadores instalados no host.
- Avisar caso mais de processos 6 processos estejam rodando nos últimos 5 minutos
- Alertar caso mais de processos 10 processos estejam rodando nos últimos 5 minutos
Enviar mensagens personalizadas diferentes para alertas e avisos. A prioridade deste monitor deve ser P4
Hora de Práticar:
Por meio do recurso de monitoramento, criar um monitor baseado na integração com o postgres para alertar sobre a conectividade no banco de dados.
- Alertar caso o monitor atinja 3 status críticos consecutivos;
- Resolver o alerta caso o monitor atinja 3 status OK consecutivos;
- Notificar caso dados sejam perdidos por mais de 2 minutos.
Enviar uma mensagem personalizada quando o monitor se recuperar de um alerta. A prioridade deste monitor deve ser P2.
Dashboards
Dashboard é um painel visual que contém informações, métricas e indicadores.
É uma ferramenta de gestão visual que, deve apresentar de forma clara e objetiva, tudo o que precisamos monitorar, garantindo o atingimento dos objetivos do monitoramento.
As Dashboards do Datadog permitem que sua infraestrutura e integrações sejam monitoradas exibindo e mapeando métricas.
Layouts
Dashboards são baseadas em um layout de grade, podendo incluir uma variedade de elementos, imagens, gráficos e logs. São comumente usadas como quadros de status ou exibições de narrativa, que são atualizadas em tempo real e podem representar pontos fixos no passado. Eles também funcionam bem para depuração.
Timeboards tem layout automático e representam um único ponto no tempo, fixo ou em tempo real. Eles são comumente usados para solução de problemas, correlação e exploração geral de dados
Screenboards são painéis com layouts de formato livre que podem incluir uma variedade de objetos, como imagens, gráficos e logs. Eles são comumente usados como quadros de status ou exibições de narrativa que são atualizadas em tempo real ou representam pontos fixos no passado.
Widgets
Generic Widgets são usados para representar graficamente dados dos produtos Datadog, como Log Stream, Pie Chart, Event Stream, Treemap.
Summary Widgets são usados para exibir informações de monitoramento sintético, como Alert Graph, Monitor Summary, Check Status.
Decoratoration Widgets são utilizados para estruturar e anotar painéis visualmente. Free Text, Group, Image.
Powerpacks
São grupos de widgets modelos que reúnem gráficos reutilizáveis. Usando Powerpacks, você pode capacitar os criadores de painéis a incorporar conhecimento em todas as áreas de tecnologia em seus painéis existentes sem treinamento adicional.
Hora de Práticar:
Criar uma Dashboard e adicionar os seguintes widgets:
- 1 Check Status para o status de conexão do agente;
- 1 Timeseries para para representar CPU e Memória e uma linha fixa em 100% tracejada na cor vermelha;
- 1 Timeseries para para representar o espaço utilizado em disco e uma linha fixa em 100% tracejada na cor vermelha;
- 1 Top List para exibir os 50 processos que estão consumindo mais memória nos últimos 5 minutos;
Hora de Práticar:
Na mesma Dashboard adicionar os seguintes widgets:
- 1 Query Value para exibir o percentual de disco utilizado. Caso o disco esteja com capacidade inferior a 20%, exibir a cor de fundo laranja. Caso a capacidade esteja inferior a 10%, exibir a cor de fundo vermelha. A cor de fundo padrão deve ser o verde.
Hora de Práticar:
Na mesma Dashboard adicionar os seguintes widgets:
- 1 Log Stream para exibir os logs do serviço datadog, exibindo as colunas Date, Source e Content.
Hora de Práticar:
Na mesma Dashboard adicionar 1 Empty Group contendo os seguintes gráficos do Postgres:
- 1 Check Status para informar se o Postgres está acessível;
- 1 Timeseries para exibir o número de conexões;
- 1 Log Stream para exibir os logs do Postgres;
- 1 Query Value para exibir o percentual de conexões disponíveis usadas. O fundo deve variar de verde a vermelho quando o número de conexões ultrapassar 50%.
Hora de Práticar:
Na mesma Dashboard adicionar nas parte superior os seguintes widgets:
- Monitor summary com a cor de status exibida como cor de fundo;
- Powepack Host Overview;
Synthetics
Permite que você observa suas aplicações simulando requisições e ações em navegador a partir de qualquer local do mundo.
Os Testes de API permitem que você faça solicitações únicas ou encadeadas para executar verificações em seus principais sistemas em vários níveis de rede: teste HTTP, teste SSL, teste DNS, teste WebSocket, teste TCP, teste UDP, etc.
Os testes Synthetic Browser podemos monitorar a experência do cliente em páginas da web com testes E2E.
Hora de Práticar:
Criar um teste sintético que valide o processo de cálculo do frete de algum produto no e-commerce da Gazin.
APM
O Datadog Application Performance Monitoring (APM) oferece visibilidade profunda de seus aplicativos com painéis de desempenho prontos para uso em serviços web, filas e bancos de dados para monitorar solicitações, erros e latência.
Os rastreamentos distribuídos se correlacionam perfeitamente com sessões de navegador, logs, perfis, verificações sintéticas, rede, processos e métricas de infraestrutura em hosts, contêineres, proxies e funções sem servidor.
Podemos navegar diretamente da investigação de um rastreamento lento para identificar a linha específica de código que causa gargalos de desempenho com pontos de acesso de código.
Datadog
By Alan Ferreira dos Santos
Datadog
- 185