Sobes.tech
Middle+

200 server üçün monitorinqi necə qurardınız? Hansı yanaşmalar və alətlər istifadə edərdiniz və monitorinq sistemini necə dizayn edərdiniz?

sobes.tech Süni İntellekt

AI-dan cavab

200 serverin monitorinqi üçün mən miqyaslana bilən və etibarlı bir sistem hazırlayardım ki, bu sistem metriklərin və logların toplanması, saxlanması, analizi və vizuallaşdırılmasını əhatə etsin.

Yanaşmalar:

  1. Agent-based və Agentless: Kombinasiyadan istifadə edərdim. Agent-based sistem metriklərinin (CPU, RAM, disk, şəbəkə) dərindən toplanması üçün, agentless isə xidmətlərin və portların əlçatanlığını yoxlamaq üçün (ping, curl).
  2. Mərkəzləşdirilmiş Monitorinq: Bütün məlumatlar mərkəzləşdirilmiş sistemdə toplanır və işlənir.
  3. Avtomatlaşdırma: Agentlərin yerləşdirilməsi, konfiqurasiyanın tənzimlənməsi və dashboardların yaradılması üçün avtomatlaşdırma alətlərindən istifadə edərdim.
  4. Xəbərdarlıq Strategiyası: Aydın qaydalar, eskalasiya və bildiriş alətləri ilə inteqrasiya olunmuş xəbərdarlıq sistemi qurardım (Slack, PagerDuty).
  5. Logların Yığılması: Logların mərkəzləşdirilmiş yığılması və təhlili.
  6. Vizualizasiya: Sistem vəziyyətinə sürətli baxış üçün məlumatlandırıcı dashboardlar.

Alətlər:

  • Metriklərin Yığılması: Prometheus (exporterlar ilə: node_exporter hostlar üçün, blackbox_exporter əlçatanlığı yoxlamaq üçün).
  • Metriklərin Saxlanması: Prometheus (yerli) və Thanos və ya VictoriaMetrics uzunmüddətli saxlama və miqyaslandırma üçün.
  • Logların Yığılması: Fluentd və ya Filebeat log fayllarını toplamaq üçün, Kafka və ya RabbitMQ (ixtiyari) buffer üçün.
  • Logların Saxlanması: Elasticsearch.
  • Vizualizasiya: Grafana metrik və loglar üçün.
  • Xəbərdarlıqlar: Alertmanager (Prometheus ilə inteqrasiya olunmuş), Slack və PagerDuty ilə.
  • Avtomatlaşdırma: Ansible və ya Puppet agentlərin yerləşdirilməsi və konfiqurasiyasını idarə etmək üçün.
  • Orkestrasiya (ixtiyari, amma tövsiyə olunur): Kubernetes monitorinq yığını yerləşdirmək üçün.

Monitorinq Sisteminin Dizaynı:

  1. Arxitektura:

    • Serverlərdə çox sayda node_exporter nümunələri.
    • Məlumatların toplanması üçün bir və ya bir neçə replikasiyalı Prometheus serverləri (Thanos Receiver və ya VictoriaMetrics VMAgent istifadə etməklə).
    • Prometheus üzərində toplama, uzunmüddətli saxlama və sorğular üçün Thanos / VictoriaMetrics.
    • Logların saxlanması üçün tək Elasticsearch klasteri.
    • Vizualizasiya üçün Grafana klasteri.
    • Bir və ya bir neçə Alertmanager nümunəsi.
    • Logların toplanması üçün serverlərdə Fluentd / Filebeat agentləri.
    graph TD
        A[200 Server] -- node_exporter --> B(Prometheus Server)
        A -- Fluentd/Filebeat --> C(Kafka/RabbitMQ - Ixtiyari)
        C -- Fluentd/Logstash --> D(Elasticsearch Klasteri)
        B -- Remote Write --> E(Thanos/VictoriaMetrics)
        E -- Query --> F(Grafana)
        D -- Query --> F
        B -- Alert --> G(Alertmanager)
        G -- Notify --> H(Slack/PagerDuty)
    
  2. Metriklərin Yığılması Konfiqurasiyası (Prometheus):

    • Məqsədlərin dinamik aşkarlanması (serverlər) service-discovery vasitəsilə (məsələn, Consul və ya Kubernetes ilə) və ya statik konfiqurasiyalar (Ansible ilə idarə olunur).
    • Yığma intervallarının tənzimlənməsi (scrape_interval).
    • Çox soruşulan metriklərin toplanması üçün qaydaların tətbiqi (recording rules).
    # Prometheus üçün scrape konfiqurasiyası nümunəsi
    scrape_configs:
      - job_name: 'node_exporter'
        # Dinamik aşkarlama və ya static_configs
        static_configs:
          - targets: ['server1:9100', 'server2:9100', ...]
        # metrics_path: /metrics # Standart dəyər
    
  3. Logların Yığılması Konfiqurasiyası:

    • Agentlərin (Fluentd/Filebeat) log fayllarını monitorinq etmək və onları mərkəzi nodlara göndərmək üçün konfiqurasiya.
    • Logların agent səviyyəsində və ya Elasticsearch-ə göndərilmədən əvvəl təhlili və strukturlaşdırılması.
    # Filebeat konfiqurasiyası nümunəsi (filebeat.yml)
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/*.log
        - /var/log/syslog
    #-------------------------- Elasticsearch çıxışı ---------------------------
    output.elasticsearch:
      hosts: ["elasticsearch:9200"]
    
  4. Grafana Konfiqurasiyası:

    • Məlumat mənbələrinin (Prometheus, Elasticsearch) əlavə edilməsi.
    • Dashboardların yaradılması:
      • Ümumi baxış dashboardları (Health Overview).
      • Kateqoriyalara görə dashboardlar (CPU, Memory, Disk, Network).
      • Xüsusi xidmətlər/tətbiqlər üçün dashboardlar.
      • Loglar üçün dashboardlar.
    • Dinamik serverlər/xidmətlər seçimi üçün dəyişən şablonlardan istifadə.
  5. Xəbərdarlıq Konfiqurasiyası:

    • Metrikalar əsasında sərhədlərin müəyyənləşdirilməsi.
    • Prometheus (və ya Alertmanager) da xəbərdarlıq qaydalarının yaradılması.
    • Alertmanager-də qəbul edənlərin konfiqurasiyası (inteqrasiya).
    • Eskalasiya siyasətlərinin müəyyənləşdirilməsi (məsələn, əvvəl Slack-ə bildiriş, sonra PagerDuty zəngi).
    # Prometheus-da qeyd və xəbərdarlıq qaydası nümunəsi (rules.yml)
    # CPU istifadə faizinin 5 dəqiqəlik qeydiyyatı
    - record: instance:node_cpu_user_percent:rate5m
      expr: 100 - avg without (cpu)(rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)
    
    # Yüksək CPU yüklənməsi üçün xəbərdarlıq: (> 80%)
    - alert: HighCPULoad
      expr: instance:node_cpu_user_percent:rate5m > 80
      for: 5m # 5 dəqiqə gözləyin
      labels:
        severity: warning
      annotations:
        summary: "{{ $labels.instance }} da CPU yüklənməsi yüksək"
        description: "{{ $labels.instance }} da CPU yüklənməsi {{ $value }}%"
    
  6. Avtomatlaşdırma:

    • Ansible playbooklarından istifadə:
      • node_exporter, Fluentd/Filebeat quraşdırılması və konfiqurasiyası.
      • Prometheus/Alertmanager/Grafana/Elasticsearch yığını yerləşdirmə.
      • Konfiqurasiya fayllarının idarə olunması (scrape configs, rules, dashboards).

Bu, çox sayda serverin monitorinqi üçün kompleks, miqyaslana bilən və çevik yanaşma olardı.