7.1 Налаштування моніторингу за допомогою Prometheus
На цьому кроці ми розглянемо, як налаштувати моніторинг і логування для нашого багатоконтейнерного застосунку. Це дозволить відстежувати стан і продуктивність сервісів, а також збирати і аналізувати логи для діагностики проблем.
Мета: збирати метрики з сервісів та візуалізувати їх для моніторингу продуктивності і стану застосунку.
Встановлення та налаштування Prometheus
У цьому прикладі Prometheus запускається з використанням Docker. Це забезпечує кросплатформеність і дозволяє однаково ефективно розгорнути моніторинг на будь-якій операційній системі, яка підтримує Docker.
1. Створення директорії для конфігурації Prometheus:
mkdir prometheus
cd prometheus
2. Створення файлу конфігурації prometheus.yml:
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. Створення Dockerfile для Prometheus:
FROM prom/prometheus
COPY prometheus.yml /etc/prometheus/prometheus.yml
4. Додавання Prometheus у compose.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
1. Створення директорії для конфігурації Grafana:
mkdir grafana
cd grafana
2. Створення Dockerfile для Grafana:
FROM grafana/grafana
3. Додавання Grafana в docker-compose.yml:
grafana:
image: grafana/grafana
ports:
- "3033:3000"
depends_on:
- prometheus
networks:
- task-network
4. Налаштування Grafana для роботи з Prometheus:
- Запустіть контейнери за допомогою
docker compose up. - Перейдіть у веб-інтерфейс Grafana за адресою
http://localhost:3033. - Увійдіть у систему, використовуючи стандартні облікові дані (admin/admin).
- Зайдіть у
"Configuration"->"Data Sources"і додайте нове джерело даних. - Оберіть
"Prometheus"і вкажітьURL http://prometheus:9090. - Збережіть налаштування.
Створення дашбордів у Grafana
- Створення нового дашборду:
- Перейдіть у
"Create"->"Dashboard". - Натисніть
"Add new panel". - У секції
"Query"оберіть джерело данихPrometheus. - Введіть запит
PromQLдля отримання метрик. Наприклад, для моніторингу використанняCPU:
- Перейдіть у
- Налаштування панелі (Panel):
- Оберіть тип графіка (наприклад, "Graph").
- Налаштуйте панель (наприклад, назву, легенду, осі тощо).
- Натисніть
"Apply"для збереження панелі.
- Створення додаткових панелей:
- Повторіть кроки для створення додаткових панелей для інших метрик, таких як пам'ять, мережа та диск.
rate(container_cpu_usage_seconds_total[1m])
7.3 Налаштування ELK Stack
Налаштовуємо логування за допомогою ELK Stack (Elasticsearch, Logstash, Kibana).
Мета: збирати, зберігати та аналізувати логи з наших сервісів.
Встановлення та налаштування Elasticsearch
Додаємо Elasticsearch в compose.yaml:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
networks:
- task-network
Встановлення та налаштування Logstash
Крок 1. Створення директорії для конфігурації Logstash:
mkdir logstash
cd logstash
Крок 2. Створення файлу конфігурації logstash.conf:
input {
beats {
port => 5044
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "docker-logs-%{+YYYY.MM.dd}"
}
}
Крок 3. Створення Dockerfile для Logstash:
FROM docker.elastic.co/logstash/logstash:8.15.0
COPY logstash.conf /usr/share/logstash/pipeline/logstash.conf
Крок 4. Додавання Logstash в compose.yaml:
logstash:
build: ./logstash
ports:
- "5044:5044"
depends_on:
- elasticsearch
networks:
- task-network
Встановлення та налаштування Kibana
Додаємо Kibana в compose.yaml:
kibana:
image: docker.elastic.co/kibana/kibana:8.15.0
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- task-network
Встановлення Filebeat для збору логів
Крок 1. Створення директорії для конфігурації Filebeat:
mkdir filebeat
cd filebeat
Крок 2. Створення файлу конфігурації filebeat.yml:
filebeat.inputs:
- type: docker
containers.ids:
- '*'
processors:
- add_docker_metadata: ~
output.logstash:
hosts: ["logstash:5044"]
Крок 3. Створення Dockerfile для Filebeat:
FROM docker.elastic.co/beats/filebeat:8.15.0
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
Крок 4. Додавання Filebeat в compose.yaml:
filebeat:
build: ./filebeat
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
depends_on:
- logstash
networks:
- task-network
7.4 Повний файл
Повний файл compose.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:
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ