Sobes.tech
Middle+

Hoe zou je de monitoring voor 200 servers instellen? Welke benaderingen en tools zou je gebruiken, en hoe zou je het monitoringsysteem ontwerpen?

sobes.tech AI

Antwoord van AI

Voor het monitoren van 200 servers zou ik een schaalbaar en betrouwbaar systeem ontwikkelen dat het verzamelen, opslaan, analyseren en visualiseren van metrics en logs omvat.

Benaderingen:

  1. Agent-based vs Agentless: Ik zou een combinatie gebruiken. Agent-based voor diepgaande verzameling van systeemsmetriek (CPU, RAM, schijf, netwerk), agentless voor het controleren van de beschikbaarheid van services en poorten (ping, curl).
  2. Gecentraliseerde monitoring: Alle gegevens worden verzameld en verwerkt in een gecentraliseerd systeem.
  3. Automatisering: Ik zou automatiseringstools gebruiken voor het uitrollen van agents, configuratie en het maken van dashboards.
  4. Waarschuwingsstrategie: Ik zou een waarschuwingssysteem instellen met duidelijke regels, escalaties en integratie met notificatietools (Slack, PagerDuty).
  5. Logging: Gecentraliseerde verzameling van logs voor analyse en troubleshooting.
  6. Visualisatie: Informatieve dashboards voor een snelle overzicht van de systeemstatus.

Tools:

  • Metrics verzamelen: Prometheus (met exporters: node_exporter voor hosts, blackbox_exporter voor beschikbaarheid).
  • Metrics opslag: Prometheus (lokaal) en Thanos of VictoriaMetrics voor langdurige opslag en schaalbaarheid.
  • Logs verzamelen: Fluentd of Filebeat voor het verzamelen, Kafka of RabbitMQ (optioneel) voor buffering.
  • Logs opslag: Elasticsearch.
  • Visualisatie: Grafana voor metrics en logs.
  • Notificaties: Alertmanager (geïntegreerd met Prometheus), gekoppeld aan Slack, PagerDuty.
  • Automatisering: Ansible of Puppet voor het uitrollen van agents en configuratie.
  • Orkestratie (optioneel, maar aanbevolen): Kubernetes voor het uitrollen van de monitoring stack.

Ontwerp van het monitoringsysteem:

  1. Architectuur:

    • Meerdere instanties van node_exporter op de servers.
    • Eén of meerdere gerepliceerde Prometheus-servers (met Thanos Receiver of VictoriaMetrics VMAgent) voor gegevensverzameling.
    • Thanos / VictoriaMetrics voor aggregatie, langdurige opslag en query's boven Prometheus.
    • Eén cluster Elasticsearch voor logsopslag.
    • Eén Grafana cluster voor visualisatie.
    • Eén of meerdere instanties van Alertmanager.
    • Fluentd / Filebeat agents op de servers voor logverzameling.
    graph TD
        A[200 Servers] -- node_exporter --> B(Prometheus Server)
        A -- Fluentd/Filebeat --> C(Kafka/RabbitMQ - Optioneel)
        C -- Fluentd/Logstash --> D(Elasticsearch Cluster)
        B -- Remote Write --> E(Thanos/VictoriaMetrics)
        E -- Query --> F(Grafana)
        D -- Query --> F
        B -- Alert --> G(Alertmanager)
        G -- Notify --> H(Slack/PagerDuty)
    
  2. Metrics verzameling configuratie (Prometheus):

    • Dynamisch doelherkenning (servers) via service-discovery (bijvoorbeeld met Consul of Kubernetes) of statische configuraties (beheer via Ansible).
    • Instellen van scrape-intervallen (scrape_interval).
    • Toepassen van recording rules voor het aggregeren van veelgevraagde metrics.
    # Voorbeeld scrape-configuratie voor Prometheus
    scrape_configs:
      - job_name: 'node_exporter'
        # Dynamisch ontdekken of static_configs
        static_configs:
          - targets: ['server1:9100', 'server2:9100', ...]
        # metrics_path: /metrics # Standaardwaarde
    
  3. Logs verzameling configuratie:

    • Agents (Fluentd/Filebeat) configureren voor het monitoren van logbestanden en het verzenden naar de centrale knoop.
    • Log parsing op agentniveau of vóór verzending naar Elasticsearch voor structurering.
    # Voorbeeld Filebeat-configuratie (filebeat.yml)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/*.log
        - /var/log/syslog
    #-------------------------- Elasticsearch output ---------------------------
    output.elasticsearch:
      hosts: ["elasticsearch:9200"]
    
  4. Grafana configuratie:

    • Toevoegen van data bronnen (Prometheus, Elasticsearch).
    • Dashboard maken:
      • Overzichtsdashboards (Health Overview).
      • Dashboards per categorie (CPU, Memory, Disk, Network).
      • Dashboards voor specifieke services/applicaties.
      • Dashboards voor logs.
    • Gebruik van variabelensjablonen voor dynamische selectie van servers/services.
  5. Waarschuwingsinstellingen:

    • Bepalen van drempels op basis van metrics.
    • Regels voor waarschuwingen maken in Prometheus (of Alertmanager).
    • Ontvangers configureren in Alertmanager (integraties).
    • Escalatiebeleid bepalen (bijvoorbeeld eerst melding in Slack, daarna bellen via PagerDuty).
    # Voorbeeld van een record- en waarschuwingsregel in Prometheus (rules.yml)
    # Recordregel: CPU-belastingpercentage over 5 minuten
    - record: instance:node_cpu_user_percent:rate5m
      expr: 100 - avg without (cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)
    
    # Waarschuwingsregel: Hoge CPU-belasting (> 80%)
    - alert: HighCPULoad
      expr: instance:node_cpu_user_percent:rate5m > 80
      for: 5m # Wacht 5 minuten
      labels:
        severity: warning
      annotations:
        summary: "Hoge CPU-belasting op {{ $labels.instance }}"
        description: "CPU-belasting op {{ $labels.instance }} is {{ $value }}%."
    
  6. Automatisering:

    • Gebruik van Ansible-playbooks voor:
      • Installatie en configuratie van node_exporter, Fluentd/Filebeat.
      • Uitrollen van de Prometheus/Alertmanager/Grafana/Elasticsearch stack.
      • Beheer van configuratiebestanden (scrape configs, regels, dashboards).

Dit zou een uitgebreide, schaalbare en flexibele aanpak zijn voor het monitoren van een groot aantal servers.