CodeGym /Kurslar /Docker SELF /Monitorinq və loglaşdırmanın sazlanması

Monitorinq və loglaşdırmanın sazlanması

Docker SELF
Səviyyə , Dərs
Mövcuddur

7.1 Prometheus vasitəsilə Monitorinqin Tənzimlənməsi

Bu addımda, çoxkonteynerli tətbiqetməmiz üçün monitorinq və loqlamanı necə tənzimləyəcəyimizi öyrənəcəyik. Bu bizə xidmətlərimizin vəziyyətini və performansını izləməyə, həmçinin problemlərin diaqnostikası üçün loqları toplamağa və təhlil etməyə imkan verəcək.

Məqsəd: Xidmətlərimizdən metrikaları toplamaq və onları tətbiqetmənin performansı və vəziyyətini izləmək üçün vizuallaşdırmaq.

Prometheus qurulması və tənzimlənməsi

1. Prometheus üçün konfiqurasiya kataloqunun yaradılması:

Terminal

mkdir prometheus
cd prometheus

2. prometheus.yml konfiqurasiya faylının yaradılması:

Yaml

global:
  scrape_interval: 15s
      
scrape_configs:
  - job_name: 'flask-app'
    static_configs:
      - targets: ['backend:5000']
  - job_name: 'node-app'
    static_configs:
      - targets: ['frontend:3000']

3. Prometheus üçün Dockerfile yaradılması:

dockerfile

FROM prom/prometheus
COPY prometheus.yml /etc/prometheus/prometheus.yml

4. Prometheus-in docker-compose.yml-ə əlavə olunması:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network
        
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
        
  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data
        
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend
    networks:
      - task-network
        
  prometheus:
    build: ./prometheus
    ports:
      - "9090:9090"
    networks:
      - task-network
        
networks:
  task-network:
    driver: bridge
        
volumes:
  db-data:

7.2 Grafana quraşdırılması və konfiqurasiyası

1. Grafana üçün konfiqurasiya direktoryasının yaradılması:

Terminal

mkdir grafana
cd grafana

2. Grafana üçün Dockerfile yaradılması:

dockerfile

FROM grafana/grafana

3. Grafana-nın docker-compose.yml-a əlavə olunması:

Yaml

  grafana:
    image: grafana/grafana
    ports:
      - "3033:3000"
    depends_on:
      - prometheus
    networks:
      - task-network

4. Grafana-nın Prometheus ilə işləməsi üçün konfiqurasiyası:

  1. Konteynerləri docker compose up ilə işə salın.
  2. Grafana-nın veb interfeysinə http://localhost:3033 ünvanı ilə keçin.
  3. Standart hesab məlumatlarından istifadə edərək (admin/admin) sistemə daxil olun.
  4. "Configuration" -> "Data Sources" bölməsinə keçin və yeni məlumat mənbəyi əlavə edin.
  5. "Prometheus" seçin və URL http://prometheus:9090-u göstərin.
  6. Ayarları yadda saxlayın.

Grafana-da dashboard-ların yaradılması

  1. Yeni dashboard yaradılması:
    • "Create" -> "Dashboard" bölməsinə keçin.
    • "Add new panel" düyməsini basın.
    • "Query" bölməsində məlumat mənbəyini Prometheus olaraq seçin.
    • Metrləri almaq üçün PromQL sorğusu daxil edin. Məsələn, CPU-nun istifadəsini monitorda izləmək üçün:
  2. promql
    
    rate(container_cpu_usage_seconds_total[1m]) 
        
  3. Panelin (Panel) konfiqurasiyası:
    • Qrafik növünü seçin (məsələn, "Graph").
    • Paneli konfiqurasiya edin (məsələn, başlıq, əfsanə, oxlar və s.).
    • Paneli saxlamaq üçün "Apply" düyməsini basın.
  4. Əlavə panellərin yaradılması:
    • Digər metriklər üçün, məsələn, yaddaş, şəbəkə və disk üçün əlavə panellər yaratmaq üçün bu addımları təkrarlayın.

7.3 ELK Stack-in qurulması

Loglamanın qurulması ELK Stack (Elasticsearch, Logstash, Kibana) vasitəsilə

Məqsəd: Servislərimizdən logları toplamaq, saxlamaq və təhlil etmək.

Elasticsearch-ın quraşdırılması və sazlanması

Elasticsearch-ın docker-compose.yml-ə əlavə edilməsi:

Yaml

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - task-network

Logstash-ın quraşdırılması və sazlanması

Adım 1. Logstash üçün konfiqurasiya üçün qovluq yaradılması:

Terminal

mkdir logstash
cd logstash

Adım 2. logstash.conf konfiqurasiya faylının yaradılması:

Text

input {
  beats {
    port => 5044
  }
}
          
filter {
  json {
    source => "message"
  }
}
          
output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "docker-logs-%{+YYYY.MM.dd}"
  }
}

Adım 3. Logstash üçün Dockerfile yaradılması:

dockerfile

FROM docker.elastic.co/logstash/logstash:8.15.0
COPY logstash.conf /usr/share/logstash/pipeline/logstash.conf

Adım 4. Logstash-ın docker-compose.yml-ə əlavə edilməsi:

Yaml

  logstash:
    build: ./logstash
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch
    networks:
      - task-network

Kibana-nın quraşdırılması və sazlanması

Kibana-nın docker-compose.yml-ə əlavə edilməsi:

Yaml

  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.0
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - task-network

Logların toplanması üçün Filebeat-ın quraşdırılması

Adım 1. Filebeat üçün konfiqurasiya qovluğunun yaradılması:

Terminal

mkdir filebeat
cd filebeat

Adım 2. filebeat.yml konfiqurasiya faylının yaradılması:

Yaml

filebeat.inputs:
- type: docker
  containers.ids:
    - '*'
        
processors:
  - add_docker_metadata: ~
        
output.logstash:
  hosts: ["logstash:5044"]

Adım 3. Filebeat üçün Dockerfile yaradılması:

dockerfile

FROM docker.elastic.co/beats/filebeat:8.15.0
COPY filebeat.yml /usr/share/filebeat/filebeat.yml

Adım 4. Filebeat-ın docker-compose.yml-ə əlavə edilməsi:

Yaml

filebeat:
    build: ./filebeat
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - logstash
    networks:
      - task-network

7.4 Tam fayl

Tam fayl docker-compose.yml

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network
        
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
        
  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data
        
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend
    networks:
      - task-network
        
  prometheus:
    build: ./prometheus
    ports:
      - "9090:9090"
    networks:
      - task-network
        
  grafana:
    image: grafana/grafana
    ports:
      - "3033:3000"
    depends_on:
      - prometheus
    networks:
      - task-network
        
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - task-network
        
  logstash:
    build: ./logstash
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch
    networks:
      - task-network
        
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.2
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - task-network
        
  filebeat:
    build: ./filebeat
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - logstash
    networks:
      - task-network
        
networks:
  task-network:
    driver: bridge
        
volumes:
  db-data:
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION