JavaRush /Курсы /Модуль 2: Fullstack /Настройка мониторинга и логирования

Настройка мониторинга и логирования

Модуль 2: Fullstack
18 уровень , 6 лекция
Открыта

7.1 Настройка мониторинга с помощью Prometheus

На этом шаге мы рассмотрим, как настроить мониторинг и логирование для нашего многоконтейнерного приложения. Это позволит отслеживать состояние и производительность сервисов, а также собирать и анализировать логи для диагностики проблем.

Цель: собирать метрики с сервисов и визуализировать их для мониторинга производительности и состояния приложения.

Установка и настройка Prometheus

В данном примере Prometheus запускается с использованием Docker. Это обеспечивает кроссплатформенность и позволяет одинаково эффективно развернуть мониторинг на любой операционной системе, поддерживающей Docker.

1. Создание директории для конфигурации Prometheus:

Terminal

mkdir prometheus
cd prometheus

2. Создание файла конфигурации prometheus.yml:

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. Создание Dockerfile для Prometheus:

dockerfile

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

4. Добавление Prometheus в compose.yaml:

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:

Terminal

mkdir grafana
cd grafana

2. Создание Dockerfile для Grafana:

dockerfile

FROM grafana/grafana

3. Добавление Grafana в docker-compose.yml:

Yaml

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

4. Настройка Grafana для работы с Prometheus:

  1. Запустите контейнеры с помощью docker compose up.
  2. Перейдите в веб-интерфейс Grafana по адресу http://localhost:3033.
  3. Войдите в систему, используя стандартные учетные данные (admin/admin).
  4. Перейдите в "Configuration" -> "Data Sources" и добавьте новый источник данных.
  5. Выберите "Prometheus" и укажите URL http://prometheus:9090.
  6. Сохраните настройки.

Создание дашбордов в Grafana

  1. Создание нового дашборда:
    • Перейдите в "Create" -> "Dashboard".
    • Нажмите "Add new panel".
    • В секции "Query" выберите источник данных Prometheus.
    • Введите запрос PromQL для получения метрик. Например, для мониторинга использования CPU:
  2. Promql
    
    rate(container_cpu_usage_seconds_total[1m]) 
            
  3. Настройка панели (Panel):
    • Выберите тип графика (например, "Graph").
    • Настройте панель (например, название, легенду, оси и т.д.).
    • Нажмите "Apply" для сохранения панели.
  4. Создание дополнительных панелей:
    • Повторите шаги для создания дополнительных панелей для других метрик, таких как память, сеть и диск.

7.3 Настройка ELK Stack

Настройка логирования с помощью ELK Stack (Elasticsearch, Logstash, Kibana).

Цель: собирать, хранить и анализировать логи с наших сервисов.

Установка и настройка Elasticsearch

Добавление Elasticsearch в compose.yaml:

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:

Terminal

mkdir logstash
cd logstash

Шаг 2. Создание файла конфигурации logstash.conf:

Text

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

Шаг 3. Создание Dockerfile для Logstash:

dockerfile

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

Шаг 4. Добавление Logstash в compose.yaml:

Yaml

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

Установка и настройка Kibana

Добавление Kibana в compose.yaml:

Yaml

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

Установка Filebeat для сбора логов

Шаг 1. Создание директории для конфигурации Filebeat:

Terminal

mkdir filebeat
cd filebeat

Шаг 2. Создание файла конфигурации filebeat.yml:

Yaml

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

Шаг 3. Создание Dockerfile для Filebeat:

dockerfile

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

Шаг 4. Добавление Filebeat в compose.yaml:

Yaml

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

7.4 Полный файл

Полный файл compose.yaml

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:
3
Задача
Модуль 2: Fullstack, 18 уровень, 6 лекция
Недоступна
Настройка мониторинга Prometheus
Настройка мониторинга Prometheus
3
Задача
Модуль 2: Fullstack, 18 уровень, 6 лекция
Недоступна
Логирование с ELK Stack
Логирование с ELK Stack
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ