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:
- 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).
- Mərkəzləşdirilmiş Monitorinq: Bütün məlumatlar mərkəzləşdirilmiş sistemdə toplanır və işlənir.
- 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.
- 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).
- Logların Yığılması: Logların mərkəzləşdirilmiş yığılması və təhlili.
- 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ı:
-
Arxitektura:
- Serverlərdə çox sayda
node_exporternü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) - Serverlərdə çox sayda
-
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 -
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"] -
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ə.
-
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 }}%" -
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).
- Ansible playbooklarından istifadə:
Bu, çox sayda serverin monitorinqi üçün kompleks, miqyaslana bilən və çevik yanaşma olardı.