Sobes.tech
Middle+

Como configuraria a monitorização para 200 servidores? Que abordagens e ferramentas usaria, e como projetaria o sistema de monitorização?

sobes.tech IA

Resposta da IA

Para monitorizar 200 servidores, desenvolveria um sistema escalável e fiável que incluísse a recolha, armazenamento, análise e visualização de métricas e logs.

Abordagens:

  1. Baseado em agentes vs sem agentes: Utilizaria uma combinação. Agent-based para recolha aprofundada de métricas do sistema (CPU, RAM, disco, rede), sem agentes para verificar a disponibilidade de serviços e portas (ping, curl).
  2. Monitorização centralizada: Todos os dados são recolhidos e processados num sistema centralizado.
  3. Automatização: Utilizaria ferramentas de automatização para implementar agentes, configurar e criar painéis.
  4. Estratégia de alertas: Configuraria um sistema de alertas com regras claras, escalonamento e integração com ferramentas de notificação (Slack, PagerDuty).
  5. Logging: Recolha centralizada de logs para análise e resolução de problemas.
  6. Visualização: Painéis informativos para uma rápida visão geral do estado do sistema.

Ferramentas:

  • Recolha de métricas: Prometheus (com exporters: node_exporter para hosts, blackbox_exporter para verificar disponibilidade).
  • Armazenamento de métricas: Prometheus (localmente) e Thanos ou VictoriaMetrics para armazenamento a longo prazo e escalabilidade.
  • Recolha de logs: Fluentd ou Filebeat para recolha, Kafka ou RabbitMQ (opcional) para buffering.
  • Armazenamento de logs: Elasticsearch.
  • Visualização: Grafana para métricas e logs.
  • Alertas: Alertmanager (integrado com Prometheus), com integração no Slack, PagerDuty.
  • Automatização: Ansible ou Puppet para implementar agentes e configurações.
  • Orquestração (opcional mas recomendada): Kubernetes para implementar a pilha de monitorização.

Design do sistema de monitorização:

  1. Arquitetura:

    • Múltiplas instâncias de node_exporter nos servidores.
    • Um ou vários servidores Prometheus replicados (usando Thanos Receiver ou VictoriaMetrics VMAgent) para recolha de dados.
    • Thanos / VictoriaMetrics para agregação, armazenamento a longo prazo e consultas sobre Prometheus.
    • Um cluster Elasticsearch único para armazenamento de logs.
    • Cluster de Grafana para visualização.
    • Uma ou várias instâncias de Alertmanager.
    • Agentes Fluentd / Filebeat nos servidores para recolha de logs.
    graph TD
        A[200 Servers] -- node_exporter --> B(Prometheus Server)
        A -- Fluentd/Filebeat --> C(Kafka/RabbitMQ - Opcional)
        C -- Fluentd/Logstash --> D(Elasticsearch Cluster)
        B -- Escrita remota --> E(Thanos/VictoriaMetrics)
        E -- Consulta --> F(Grafana)
        D -- Consulta --> F
        B -- Alerta --> G(Alertmanager)
        G -- Notificar --> H(Slack/PagerDuty)
    
  2. Configuração de recolha de métricas (Prometheus):

    • Descoberta dinâmica de objetivos (servidores) através de service discovery (se houver infraestrutura como Consul ou Kubernetes) ou configurações estáticas (gestão via Ansible).
    • Configuração de intervalos de recolha (scrape_interval).
    • Uso de regras de gravação (recording rules) para agregar métricas frequentemente solicitadas.
    # Exemplo de configuração de scrape para Prometheus
    scrape_configs:
      - job_name: 'node_exporter'
        # Descoberta dinâmica ou static_configs
        static_configs:
          - targets: ['server1:9100', 'server2:9100', ...]
        # metrics_path: /metrics # Valor padrão
    
  3. Configuração de recolha de logs:

    • Configuração de agentes (Fluentd/Filebeat) para monitorizar ficheiros de logs e enviá-los a um nó central.
    • Análise de logs ao nível do agente ou antes de os enviar para Elasticsearch para estruturação.
    # Exemplo de configuração do Filebeat (filebeat.yml)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/*.log
        - /var/log/syslog
    #-------------------------- Saída Elasticsearch ---------------------------
    output.elasticsearch:
      hosts: ["elasticsearch:9200"]
    
  4. Configuração do Grafana:

    • Adicionar fontes de dados (Prometheus, Elasticsearch).
    • Criar painéis:
      • Painéis de visão geral (Health Overview).
      • Painéis por categorias (CPU, Memória, Disco, Rede).
      • Painéis para serviços/aplicações específicos.
      • Painéis para logs.
    • Uso de modelos de variáveis para seleção dinâmica de servidores/serviços.
  5. Configuração de alertas:

    • Definição de limites com base em métricas.
    • Criação de regras de alerta no Prometheus (ou Alertmanager).
    • Configuração de destinatários no Alertmanager (integrações).
    • Definição de políticas de escalonamento (por exemplo, notificação no Slack primeiro, depois chamada via PagerDuty).
    # Exemplo de regra de gravação e alerta no Prometheus (rules.yml)
    # Regra de gravação: porcentagem de carga de CPU do usuário em 5 minutos
    - record: instance:node_cpu_user_percent:rate5m
      expr: 100 - avg without (cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)
    
    # Regra de alerta: Alta carga de CPU (> 80%)
    - alert: HighCPULoad
      expr: instance:node_cpu_user_percent:rate5m > 80
      for: 5m # Esperar 5 minutos antes de ativar
      labels:
        severity: warning
      annotations:
        summary: "Carga de CPU elevada em {{ $labels.instance }}"
        description: "A carga de CPU em {{ $labels.instance }} é de {{ $value }}%."
    
  6. Automatização:

    • Uso de playbooks Ansible para:
      • Instalar e configurar node_exporter, Fluentd/Filebeat.
      • Desdobrar a pilha de Prometheus/Alertmanager/Grafana/Elasticsearch.
      • Gerir ficheiros de configuração (scrape configs, regras, dashboards).

Este seria um abordagem abrangente, escalável e flexível para monitorar um grande número de servidores.