https://github.com/al-kv/logging-project
https://github.com/al-kv/logging-project
docker docker-compose grafana logging loki monitoring nginx observability prometheus
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/al-kv/logging-project
- Owner: al-kv
- Created: 2025-11-18T08:18:03.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-11-18T09:21:34.000Z (7 months ago)
- Last Synced: 2025-11-18T10:20:34.750Z (7 months ago)
- Topics: docker, docker-compose, grafana, logging, loki, monitoring, nginx, observability, prometheus
- Homepage:
- Size: 270 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
# Nginx Logs Monitoring Stack
Полнофункциональный стек для сбора, анализа и визуализации логов Nginx с использованием современных инструментов observability.
# Nginx Logs Monitoring Stack
Полнофункциональный стек для сбора, анализа и визуализации логов Nginx с использованием современных инструментов observability.
## 📸 Скриншот дашборда

Основной дашборд содержит метрики и логи Nginx в реальном времени.
## 🛠️ Технологии
- **Grafana 10.4.1** - визуализация метрик и логов
- **Loki 2.9.6** - агрегация логов
- **Prometheus v2.55.0** - сбор метрик
- **Vector 0.41.0** - log shipper для передачи логов в Loki
- **Nginx (stable)** - веб-сервер с демо endpoints
## 🚀 Быстрый старт
### 1. Клонируй репозиторий
```bash
git clone https://github.com/username/logging-project.git
cd logging-project
```
### 2. Создай необходимые директории
```bash
mkdir -p loki/data prometheus/data nginx/log grafana
```
### 3. Запусти стек
```bash
docker compose up -d
```
### 4. Открой Grafana
- **URL**: http://localhost:3000
- **Логин**: admin
- **Пароль**: admin
## 📊 Доступные сервисы
| Сервис | URL | Описание |
|--------|-----|---------|
| **Grafana** | http://localhost:3000 | Дашборды и визуализация |
| **Prometheus** | http://localhost:9090 | Метрики и алерты |
| **Loki** | http://localhost:3100 | API логов |
| **Vector** | http://localhost:8686 | Health check Vector |
| **Nginx** | http://localhost:8080 | Веб-сервер |
## 🔍 Генерируем тестовые логи
### Успешные запросы (200)
```bash
curl http://localhost:8080/
```
### Ошибки сервера (500)
```bash
curl http://localhost:8080/fail
```
### Задержки (для тестирования)
```bash
curl http://localhost:8080/delay
```
### Массовая генерация логов
```bash
for i in {1..100}; do curl http://localhost:8080/; done
```
## 📈 Дашборд "Nginx Logs Dashboard"
Основной дашборд содержит 8 панелей:
### Информационные панели (Text)
1. **Nginx Logs Monitoring Dashboard** - описание дашборда и технологий
2. **LogQL Queries Reference** - справка по LogQL запросам
### Метрики и логи
3. **Error Rate** (Gauge) - процент ошибок 4xx и 5xx
4. **Top HTTP Methods** (Bar Chart) - распределение типов запросов
5. **HTTP Status Codes Over Time** (Time Series) - тренд кодов ответов
6. **Log Volume Over Time** (Area Chart) - объём логов за время
7. **Top Requested URIs** (Table) - самые нагруженные endpoints
8. **Recent Error Logs** (Logs) - последние 100 ошибок
## 📝 Примеры LogQL запросов
### Все логи доступа
```logql
{log_type="access", service="nginx"}
```
### Только ошибки 5xx
```logql
{log_type="access", service="nginx"} |~ "HTTP/[0-9.]+ 5[0-9]{2}"
```
### Ошибки 4xx
```logql
{log_type="access", service="nginx"} |~ "HTTP/[0-9.]+ 4[0-9]{2}"
```
### Логи ошибок Nginx
```logql
{log_type="error", service="nginx"}
```
### Поиск конкретного пути
```logql
{log_type="access", service="nginx"} |= "/fail"
```
### Количество ошибок за период
```logql
count_over_time({log_type="access", service="nginx"} |~ "5[0-9]{2}" [5m])
```
## 🔧 Импорт дашборда в Grafana
### Автоматически (рекомендуется)
Если в `docker-compose.yml` настроен volume для provisioning:
```yaml
grafana:
volumes:
- ./grafana/dashboards:/etc/grafana/provisioning/dashboards
```
Дашборд загружается автоматически при запуске.
### Вручную через UI
1. Открой **Grafana** → http://localhost:3000
2. Нажми **Dashboards** → **Import**
3. Нажми **"Upload dashboard JSON file"**
4. Выбери файл `grafana/dashboards/nginx-logs-dashboard.json`
5. Нажми **Import**
## 📂 Структура проекта
```
logging-project/
├── .gitignore # Исключения для Git
├── .dockerignore # Исключения для Docker
├── .env.example # Пример переменных окружения
├── README.md # Этот файл
├── LICENSE # Лицензия (MIT)
├── docker-compose.yml # Оркестрация сервисов
│
├── grafana/
│ ├── dashboards/
│ │ └── nginx-logs-dashboard.json # Экспортированный дашборд
│ ├── grafana.db # База данных (в .gitignore)
│ └── plugins/ # Плагины (опционально)
│
├── loki/
│ ├── config/
│ │ └── loki-config.yml # Конфигурация Loki
│ └── data/ # Данные логов (в .gitignore)
│
├── nginx/
│ ├── conf.d/
│ │ └── default.conf # Конфигурация Nginx
│ └── log/ # Логи Nginx (в .gitignore)
│
├── prometheus/
│ ├── prometheus.yml # Конфигурация Prometheus
│ └── data/ # Время-серийная БД (в .gitignore)
│
└── vector/
└── vector.yaml # Конфигурация Vector log shipper
```
## 🛑 Остановка сервисов
```bash
docker compose down
```
Для удаления также данных:
```bash
docker compose down -v
```
## 🐛 Решение проблем
### Логи не собираются
Проверь, что Vector работает:
```bash
docker compose logs vector
```
### Grafana не подключается к Loki
1. Проверь Data Source: **Settings** → **Data Sources** → **Loki**
2. URL должна быть: `http://loki:3100`
### Prometheus не scrapes метрики
```bash
docker compose logs prometheus
```
Проверь `prometheus/prometheus.yml` на синтаксис.
## 📚 Дополнительные ресурсы
- [Grafana документация](https://grafana.com/docs/grafana/latest/)
- [Loki документация](https://grafana.com/docs/loki/latest/)
- [LogQL запросы](https://grafana.com/docs/loki/latest/logql/)
- [Prometheus метрики](https://prometheus.io/docs/prometheus/latest/)
- [Vector документация](https://vector.dev/docs/)
## 📄 Лицензия
MIT License - смотри файл LICENSE
## 👨💻 Для разработчиков
Этот проект идеален для:
- Изучения Grafana и Loki
- Обучения работе с observability стеком
- Мониторингу Nginx логов
- Портфолио DevOps инженера
### Рекомендуемые улучшения
- [ ] Добавить alert rules в Prometheus
- [ ] Настроить notification channels (Email, Slack)
- [ ] Добавить роли пользователей в Grafana
- [ ] Настроить persistence volumes для production
- [ ] Добавить nginx-exporter для метрик производительности
- [ ] Создать CI/CD pipeline для автоматического развёртывания
## 🤝 Контрибьютинг
Contributions приветствуются! Создавай pull requests для улучшений и исправлений ошибок.