Dez 23, 2024: [PT-BR] Construindo um Sistema de Monitoramento de Produção de Presentes com Elastic Stack

Este post também está disponível em inglês.

O Desafio no Polo Norte

"Ho ho… oh não!" exclamou o Papai Noel numa fria manhã. "Faltam apenas dois dias para o Natal! Como acompanhar os desejos de bilhões de crianças sem um monitoramento adequado?"

Por séculos, a fábrica do Papai Noel se apoiou em pó mágico e na intuição dos elfos para acompanhar a produção de brinquedos. Mas em 2024, até mesmo o Polo Norte precisa de uma atualização tecnológica! Hoje, vamos ajudar o Papai Noel a modernizar sua fábrica, implementando uma solução de monitoramento em tempo real com o Elastic Stack.

Requisitos

A Mamãe Noel foi clara sobre o que precisamos:

  • Acompanhar a produção de brinquedos em todas as linhas da fábrica
  • Monitorar o desempenho dos elfos (mantendo o espírito natalino em alta!)
  • Garantir o controle de qualidade (nenhuma criança deve receber brinquedos quebrados!)
  • Monitorar as condições da fábrica (elfos precisam de temperatura ideal para seu chocolate quente!)

Pré-requisitos Mágicos

Antes de começarmos a encantar a fábrica, certifique-se de ter:

  • Python 3.8+ (testado por elfos, aprovado pelo Papai Noel)
  • Acesso ao Elastic Cloud (ou Elastic Stack 8.16 local)

Estrutura da Fábrica

Primeiro, vamos organizar nossa fábrica como o Papai Noel organiza sua lista de presentes. Faça o clone do repositório no GitHub:

git clone https://github.com/salgado/santa_advent_monitoring.git 
cd santa_advent_monitoring

Ao final, a estrutura de pastas será:

santa_advent_monitoring/
├── manage_simulation.sh
├── toy_workshop_simulator.py
│   
├── var/
│   └── log/                      
│       └── workshop/
│           └── production/
└── README.md

O Exemplo da Fábrica

Criamos um script em Python que simula a oficina do Papai Noel, gerando logs em JSON com métricas de produção de brinquedos. O gerenciamento da simulação é feito por um script Bash, responsável por iniciar, parar e monitorar a produção.

O código Python gera dados realistas sobre tipos de brinquedos, taxas de produção, pontuações de qualidade e condições ambientais. Já o script Bash gerencia o ciclo de vida da simulação, rotaciona logs e fornece status. Pense nisso como uma miniatura de uma linha de produção real, porém, em vez de brinquedos físicos, produzimos dados estruturados para alimentar o Elastic Stack em tempo real.

Exemplo de JSON da Fábrica

{
  "@timestamp": "2024-12-11T16:54:36.980882",
  "toy_type": "robot",
  "production_line": "line1",
  "production_rate": 101,
  "quality_score": 95,
  "elf_id": "elf_20",
  "errors_detected": 0,
  "temperature": 22.8,
  "humidity": 47.3,
  "shift": "evening",
  "machine_status": "normal",
  "toys_completed": 25,
  "version": "8.16.1"
}

Esse log contém informações sobre a produção: tipo de brinquedo, linha de produção, taxa, qualidade, condições ambientais e muito mais.

Descrição dos Campos

Campo Descrição Exemplos Importância
toy_type Tipo de brinquedo produzido robot, doll, car, puzzle, board_game Define a complexidade e taxa de produção
production_line Linha de produção line1, line2, line3 Localiza a origem da produção
quality_score Pontuação de qualidade 0-100 Crítico: deve ser ≥ 90
elf_id Identificador do elfo elf_1 a elf_20 Rastreamento do desempenho
errors_detected Erros encontrados 0-5 Crítico se > 3
machine_status Status da máquina normal, error Indica saúde da produção
toys_completed Unidades concluídas 15-50 Mede a produtividade

Configuração Inicial da Fábrica

configs/simulator/production_config.yml:

toy_types:
  robot:
    base_rate: 100
    complexity: 0.8
    min_quality: 85
    components: ["circuit_board", "motors", "sensors"]
  doll:
    base_rate: 150
    complexity: 0.6
    min_quality: 88
    components: ["fabric", "stuffing", "clothes"]
  # ... mais tipos de brinquedos ...

production_lines:
  line1:
    efficiency: 0.95
    error_rate: 0.02
    maintenance_schedule: "0 */4 * * *"
  # ... mais linhas de produção ...

Implementação do Simulador da Fábrica

Vamos colocar a fábrica do Papai Noel em funcionamento! :santa:

O Simulador de Produção

Certifique-se de estar no diretório correto:

cd santa_advent_monitoring

Script de Gerenciamento

manage_simulation.sh

Iniciando a Simulação

Para começar a produção de brinquedos:

./manage_simulation.sh start

Isso inicia o simulador em segundo plano, cria a estrutura de diretórios de logs e executa o toy_workshop_simulator.py, que gera eventos JSON simulando a produção. O PID do processo é salvo em simulator.pid para gestão futura, e todos os logs vão para toys.log. Estamos ligando nossa fábrica virtual! :santa::factory:

Conectando Nossa Fábrica à Nuvem :cloud:

Com o simulador funcionando, vamos conectá-lo ao Elastic Cloud usando o Elastic Agent.

Instalação do Elastic Agent

Siga as instruções no Kibana, em Fleet → Agents, para instalar o Elastic Agent de acordo com seu ambiente.

Configure o caminho dos logs da fábrica:

/seu-caminho-completo/santa_advent_monitoring/var/log/workshop/production/toys.log

Observação: Ao final da instalação e selecionando a opção "Enroll in Fleet", você também configurará o Fleet Server.

Configurando a Coleta de Logs da Fábrica :christmas_tree:

Com os logs sendo gerados, precisamos configurar o Elastic Agent para coletá-los. Vamos ajustar a integração "Custom Logs".

Navegando até a Configuração

  1. No Kibana, acesse Fleet
  2. Em Agent policies, selecione Agent policy 1
  3. Clique em Add integration
  4. Pesquise por "Custom logs" e selecione-a

Ajustando a Integração

1. Configurações Básicas

  • Integration name: santa_workshop_logs
  • Description: Santa's Workshop Pro

2. Caminho dos Logs

/Users/usuario/seu_caminho/santa_advent_monitoring/var/log/workshop/production/toys.log

3. Configurações Avançadas (Advanced options)

Em "Custom configurations":

json:
  keys_under_root: true
  add_error_key: true
  overwrite_keys: true
  decode_json_fields:
    fields: ["message"]
    target: ""
    process_array: false

Principais pontos:

  • json.keys_under_root: Permite que campos como @timestamp, toy_type, production_rate fiquem no nível raiz, facilitando buscas.
  • json.add_error_key: Adiciona um campo error se houver problemas de parsing, ajudando a identificar entradas malformadas.
  • json.overwrite_keys: Em caso de chaves duplicadas, a última vence. Mantém a consistência dos dados.

4. Dataset

  • Dataset name: "generic" (ou "santa_workshop", se preferir)
  • Namespace: "default"

5. Finalizando

  • Em "Where to add this integration?", confirme que Agent policy 1 está selecionada
  • Clique em Save integration

Verificando a Configuração

Após salvar, espere alguns instantes. No Kibana, vá até Discover e procure pelo índice logs-*. Você deverá ver os eventos chegando, mostrando tipos de brinquedos, taxas de produção, qualidade e muito mais.

Construindo o Centro de Comando do Papai Noel :christmas_tree:

Vamos criar um dashboard que deixará até o elfo mais técnico impressionado.

Configuração Inicial do Data View

  1. Em Stack Management → Data Views → Create data view:
    • Nome: fabrica-noel
    • Padrão de índice: logs-*
    • Campo de timestamp: @timestamp

Criando o Dashboard

  1. No Kibana, vá até Dashboards
  2. Clique em Create dashboard

Criando as Visualizações

Use Create visualization para cada uma:

1. Total de Brinquedos Produzidos (Metric)

  • Métrica: Sum of toys_completed
  • Título: "Total Toys Produced"

2. Score de Qualidade (Metric)

  • Métrica: Average of quality_score
  • Título: "Quality Score"
  • Formato: Percentual

3. Taxa Média de Produção (Metric)

  • Métrica: Average of production_rate
  • Título: "Average Production Rate (per hour)"

4. Distribuição por Tipo de Brinquedo (Pie)

  • Métrica: Count
  • Divisão (Split slices): toy_type
  • Título: "Production by Toy Type"

5. Performance das Linhas (Bar Vertical)

  • Eixo Y: production_rate
  • Eixo X: production_line
  • Título: "Production Line Performance"

6. Condições Ambientais (Line)

  • Eixo Y: temperature e humidity
  • Eixo X: @timestamp
  • Título: "Workshop Environmental Conditions"

Layout do Dashboard

Organize as visualizações:

  • Primeira linha: Métricas principais (Totais, Qualidade, Taxa)
  • Segunda linha: Distribuição por tipo de brinquedo e Performance das linhas
  • Terceira linha: Condições ambientais

Redimensione conforme necessário. O objetivo é tornar o painel fácil de interpretar rapidamente.

Monitoramento Proativo com SLOs e Alertas

Ho ho ho! Vamos garantir que a qualidade se mantenha! Configuremos um SLO (Service Level Objective).

Criando um SLO de Qualidade

  1. Em Observability → SLOs:

    • Clique em Create SLO
  2. Definição do SLI:

    • SLI type: Custom Query
    • Data view: logs-*
    • Timestamp field: @timestamp
    • Query filter: machine_status:"normal"
    • Good query: quality_score >= 90
    • Total query: quality_score:*
    • Group by: production_line
  3. Objetivos:

    • Time window: Rolling
    • Duration: 30 days
    • Budgeting method: Occurrences
    • Target / SLO (%): 94
  4. Descrição:

    • Nome: "Quality Control SLO"
    • Descrição: "Monitoramento da qualidade da produção (meta: 94% com score ≥ 90)"
    • Tags: quality, production, christmas-2024

Configurando Alertas

Definiremos metas claras:

  • SLO de Qualidade dos Presentes:

    • Meta: 99% ≥ 90 na qualidade
    • Janela de 24 horas
    • Avaliação em 30 dias
  • SLO de Eficiência da Produção:

    • Meta: ≥ 95% do planejado
    • Monitoramento em tempo real

Criando uma Regra de Alerta

  1. Observability → Alerts → Create rule

  2. Tipo: "SLO burn rate"

  3. Configuração do Alerta:

    • Nome: "Alerta de Qualidade Baixa"
    • SLO: selecione o SLO criado
    • Alertar se cair abaixo da meta
    • Frequência: a cada 5 minutos
    • Notificações: Email para o Elfo-Chefe, canal Slack da produção, ou webhook para tickets
  4. Mensagem do Alerta:

    • Título: ":christmas_tree: Alerta de Qualidade na Produção"
    • Mensagem: "Atenção, elfos! A linha {{production_line}} está abaixo da meta de qualidade ({{current_value}}%). Verifiquem imediatamente!"

Exemplo de Alerta em Ação

{
  "@timestamp": "2024-12-11T16:54:40.999778",
  "toy_type": "puzzle",
  "production_line": "line1",
  "production_rate": 103,
  "quality_score": 69,
  "elf_id": "elf_4",
  "errors_detected": 5,
  "temperature": 20.8,
  "humidity": 50.9,
  "shift": "evening",
  "machine_status": "error",
  "toys_completed": 25,
  "version": "8.16.1"
}

Neste caso, a qualidade caiu. O alerta ajudará a corrigir o problema rapidamente.

Configurando Alertas via Elasticsearch Query

  1. Stack Management → Rules → Create rule
  2. Tipo: "Elasticsearch query"
  3. Query:
    {
      "bool": {
        "must": [
          {
            "range": {
              "quality_score": {
                "lt": 90
              }
            }
          }
        ]
      }
    }
    
  4. Parâmetros:
    • Nome: "Alerta de Qualidade dos Presentes"
    • Índices: logs-*
    • Agendamento: A cada 5 minutos
    • Ações: Notificação aos supervisores (email/Slack)

Painel de SLOs

Nosso painel de SLOs mostrará tendências de qualidade, mantendo o espírito natalino e a satisfação das crianças.

Conclusão: Uma Oficina Moderna e Mágica! :christmas_tree::sparkles:

Nossa solução completa oferece:

  1. Coleta de dados de produção :white_check_mark:
  2. Configuração do Elastic Agent :white_check_mark:
  3. Dashboard de visualização :white_check_mark:
  4. SLOs e alertas proativos :white_check_mark:

A oficina do Papai Noel agora une magia e tecnologia! "Esse sistema transformou a produção de presentes," comemora Bernard, Elfo-Chefe de Operações. "Agora garantimos que cada criança receba seu presente perfeito e no prazo!"

Recursos Adicionais

Lembre-se: Os melhores presentes chegam no momento certo, e o melhor sistema de monitoramento é aquele que ajuda a tornar isso possível! :gift::sparkles:

#ElasticAdvent #PapaiNoelModerno #MagiaDeObservabilidade #ElasticsearchParaElfos #Elastic

1 Like