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ı:
mkdir prometheus
cd prometheus
2. prometheus.yml
konfiqurasiya faylının yaradılması:
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ı:
FROM prom/prometheus
COPY prometheus.yml /etc/prometheus/prometheus.yml
4. Prometheus-in docker-compose.yml
-ə əlavə olunması:
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ı:
mkdir grafana
cd grafana
2. Grafana üçün Dockerfile yaradılması:
FROM grafana/grafana
3. Grafana-nın docker-compose.yml
-a əlavə olunması:
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ı:
- Konteynerləri
docker compose up
ilə işə salın. - Grafana-nın veb interfeysinə
http://localhost:3033
ünvanı ilə keçin. - Standart hesab məlumatlarından istifadə edərək (admin/admin) sistemə daxil olun.
-
"Configuration"
->"Data Sources"
bölməsinə keçin və yeni məlumat mənbəyi əlavə edin. -
"Prometheus"
seçin vəURL http://prometheus:9090
-u göstərin. - Ayarları yadda saxlayın.
Grafana-da dashboard-ların yaradılması
- 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:
-
- 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.
- Ə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.
rate(container_cpu_usage_seconds_total[1m])
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:
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ı:
mkdir logstash
cd logstash
Adım 2. logstash.conf
konfiqurasiya faylının yaradılması:
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ı:
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:
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:
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ı:
mkdir filebeat
cd filebeat
Adım 2. filebeat.yml
konfiqurasiya faylının yaradılması:
filebeat.inputs:
- type: docker
containers.ids:
- '*'
processors:
- add_docker_metadata: ~
output.logstash:
hosts: ["logstash:5044"]
Adım 3. Filebeat üçün Dockerfile yaradılması:
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:
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
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:
GO TO FULL VERSION