Sobes.tech
Middle+

Kako biste podesili nadzor za 200 servera? Koje pristupe i alate biste koristili, i kako biste projektovali sistem nadzora?

sobes.tech АИ

Одговор од АИ

За мониторинг 200 сервера, развио бих скалабилан и поуздан систем који укључује прикупљање, чување, анализу и визуелизацију метрика и логова.

Приступи:

  1. Agent-based vs Agentless: Користио бих комбинацију. Agent-based за дубоко прикупљање системских метрика (CPU, RAM, диск, мрежа), agentless за проверу доступности сервиса и портова (ping, curl).
  2. Централизовано мониторинг: Сви подаци се прикупљају и обрађују у централизованом систему.
  3. Аутоматизација: Користио бих алате за аутоматизацију за распоређивање агената, конфигурацију и креирање dashboard-ова.
  4. Стратегија обавештавања: Подесио бих систем обавештења са јасним правилима, ескалацијом и интеграцијом са алатима за обавештења (Slack, PagerDuty).
  5. Логовање: Централизовано прикупљање логова за анализу и решавање проблема.
  6. Визуелизација: Информативни dashboard-ови за брзи преглед стања система.

Алатке:

  • Прикупљање метрика: Prometheus (са exporters-има: node_exporter за хостове, blackbox_exporter за проверу доступности).
  • Складиштење метрика: Prometheus (локално) и Thanos или VictoriaMetrics за дугорочно складиштење и скалабилност.
  • Прикупљање логова: Fluentd или Filebeat за прикупљање, Kafka или RabbitMQ (опционо) за буферирање.
  • Складиштење логова: Elasticsearch.
  • Визуелизација: Grafana за метрике и логове.
  • Обавештења: Alertmanager (интегрисан са Prometheus-ом), интегрисан са Slack, PagerDuty.
  • Аутоматизација: Ansible или Puppet за распоређивање агената и конфигурацију.
  • Оркестрација (опционо, али препоручљиво): Kubernetes за распоређивање мониторинг стека.

Пројектовање система за мониторинг:

  1. Архитектура:

    • Множина инстанци node_exporter на серверима.
    • Један или више репликационих Prometheus сервера (коришћењем Thanos Receiver или VictoriaMetrics VMAgent) за прикупљање података.
    • Thanos / VictoriaMetrics за агрегирање, дугорочно складиштење и упите преко Prometheus.
    • Јединствени Elasticsearch кластер за складиштење логова.
    • Кластер Grafana за визуализацију.
    • Један или више инстанци Alertmanager.
    • Fluentd / Filebeat агенти на серверима за прикупљање логова.
    graph TD
        A[200 сервера] -- node_exporter --> B(Prometheus сервер)
        A -- Fluentd/Filebeat --> C(Kafka/RabbitMQ - опционално)
        C -- Fluentd/Logstash --> D(Elasticsearch кластер)
        B -- Remote Write --> E(Thanos/VictoriaMetrics)
        E -- Query --> F(Grafana)
        D -- Query --> F
        B -- Alert --> G(Alertmanager)
        G -- Notify --> H(Slack/PagerDuty)
    
  2. Конфигурација прикупљања метрика (Prometheus):

    • Динамичко откривање циљева (сервера) преко service discovery (нпр. са Consul или Kubernetes) или статичке конфигурације (управљане преко Ansible).
    • Подешавање интервала прикупљања (scrape_interval).
    • Примењивање правила за запис (recording rules) за агрегирање често тражених метрика.
    # Пример scrape конфигурације за Prometheus
    scrape_configs:
      - job_name: 'node_exporter'
        # Динамичко откривање или static_configs
        static_configs:
          - targets: ['server1:9100', 'server2:9100', ...]
        # metrics_path: /metrics # подразумевана вредност
    
  3. Конфигурација прикупљања логова:

    • Подешавање агената (Fluentd/Filebeat) за мониторинг лог фајлова и њихово слање на централни чвор.
    • Парсирање логова на нивоу агента или пре слања у Elasticsearch за структурирање података.
    # Пример конфигурације Filebeat (filebeat.yml)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/*.log
        - /var/log/syslog
    #-------------------------- Elasticsearch излаз ---------------------------
    output.elasticsearch:
      hosts: ["elasticsearch:9200"]
    
  4. Подешавање Grafana:

    • Додавање извора података (Prometheus, Elasticsearch).
    • Креирање dashboard-ова:
      • Прегледни dashboard-ови (Health Overview).
      • Dashboard-ови по категоријама (CPU, меморија, диск, мрежа).
      • Dashboard-ови за конкретне сервисе/апликације.
      • Dashboard-ови за логове.
    • Коришћење променљивих шаблона за динамички избор сервера/сервиса.
  5. Подешавање обавештења:

    • Одређивање праговних вредности на основу метрика.
    • Креирање правила за обавештења у Prometheus-у (или Alertmanager-у).
    • Конфигурисање прималаца у Alertmanager-у (интеграције).
    • Одређивање политика ескалације (нпр. прво обавештење у Slack, потом позив преко PagerDuty).
    # Пример правила за запис и обавештења у Prometheus-у (rules.yml)
    # Правило за запис: проценат оптерећења CPU за 5 минута
    - record: instance:node_cpu_user_percent:rate5m
      expr: 100 - avg without (cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)
    
    # Правило за обавештење: Висока оптерећеност CPU (> 80%)
    - alert: HighCPULoad
      expr: instance:node_cpu_user_percent:rate5m > 80
      for: 5m # Чекати 5 минута пре активирања
      labels:
        severity: warning
      annotations:
        summary: "Висока оптерећеност CPU на {{ $labels.instance }}"
        description: "CPU оптерећење на {{ $labels.instance }} је {{ $value }}%."
    
  6. Аутоматизација:

    • Коришћење Ansible playbook-ова за:
      • Инсталацију и конфигурацију node_exporter, Fluentd/Filebeat.
      • Распоређивање stack-а Prometheus/Alertmanager/Grafana/Elasticsearch.
      • Управљање конфигурационим фајловима (scrape configs, rules, dashboards).

Ово би био комплексни, скалабилан и флексибилан приступ мониторингу великог броја сервера.