{"id":33312593,"url":"https://github.com/al-kv/logging-project","last_synced_at":"2026-04-30T20:31:37.441Z","repository":{"id":324867895,"uuid":"1098849433","full_name":"al-kv/logging-project","owner":"al-kv","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-18T09:21:34.000Z","size":276,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-18T10:20:34.750Z","etag":null,"topics":["docker","docker-compose","grafana","logging","loki","monitoring","nginx","observability","prometheus"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/al-kv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-18T08:18:03.000Z","updated_at":"2025-11-18T09:21:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/al-kv/logging-project","commit_stats":null,"previous_names":["al-kv/logging-project"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/al-kv/logging-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/al-kv%2Flogging-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/al-kv%2Flogging-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/al-kv%2Flogging-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/al-kv%2Flogging-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/al-kv","download_url":"https://codeload.github.com/al-kv/logging-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/al-kv%2Flogging-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32476682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","grafana","logging","loki","monitoring","nginx","observability","prometheus"],"created_at":"2025-11-19T06:03:03.647Z","updated_at":"2026-04-30T20:31:37.412Z","avatar_url":"https://github.com/al-kv.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nginx Logs Monitoring Stack\n\nПолнофункциональный стек для сбора, анализа и визуализации логов Nginx с использованием современных инструментов observability.\n# Nginx Logs Monitoring Stack\n\nПолнофункциональный стек для сбора, анализа и визуализации логов Nginx с использованием современных инструментов observability.\n\n## 📸 Скриншот дашборда\n\n![Nginx Logs Dashboard](./docs/dashboard-screenshot.png)\n\nОсновной дашборд содержит метрики и логи Nginx в реальном времени.\n## 🛠️ Технологии\n\n- **Grafana 10.4.1** - визуализация метрик и логов\n- **Loki 2.9.6** - агрегация логов\n- **Prometheus v2.55.0** - сбор метрик\n- **Vector 0.41.0** - log shipper для передачи логов в Loki\n- **Nginx (stable)** - веб-сервер с демо endpoints\n\n## 🚀 Быстрый старт\n\n### 1. Клонируй репозиторий\n\n```bash\ngit clone https://github.com/username/logging-project.git\ncd logging-project\n```\n\n### 2. Создай необходимые директории\n\n```bash\nmkdir -p loki/data prometheus/data nginx/log grafana\n```\n\n### 3. Запусти стек\n\n```bash\ndocker compose up -d\n```\n\n### 4. Открой Grafana\n\n- **URL**: http://localhost:3000\n- **Логин**: admin\n- **Пароль**: admin\n\n## 📊 Доступные сервисы\n\n| Сервис | URL | Описание |\n|--------|-----|---------|\n| **Grafana** | http://localhost:3000 | Дашборды и визуализация |\n| **Prometheus** | http://localhost:9090 | Метрики и алерты |\n| **Loki** | http://localhost:3100 | API логов |\n| **Vector** | http://localhost:8686 | Health check Vector |\n| **Nginx** | http://localhost:8080 | Веб-сервер |\n\n## 🔍 Генерируем тестовые логи\n\n### Успешные запросы (200)\n\n```bash\ncurl http://localhost:8080/\n```\n\n### Ошибки сервера (500)\n\n```bash\ncurl http://localhost:8080/fail\n```\n\n### Задержки (для тестирования)\n\n```bash\ncurl http://localhost:8080/delay\n```\n\n### Массовая генерация логов\n\n```bash\nfor i in {1..100}; do curl http://localhost:8080/; done\n```\n\n## 📈 Дашборд \"Nginx Logs Dashboard\"\n\nОсновной дашборд содержит 8 панелей:\n\n### Информационные панели (Text)\n\n1. **Nginx Logs Monitoring Dashboard** - описание дашборда и технологий\n2. **LogQL Queries Reference** - справка по LogQL запросам\n\n### Метрики и логи\n\n3. **Error Rate** (Gauge) - процент ошибок 4xx и 5xx\n4. **Top HTTP Methods** (Bar Chart) - распределение типов запросов\n5. **HTTP Status Codes Over Time** (Time Series) - тренд кодов ответов\n6. **Log Volume Over Time** (Area Chart) - объём логов за время\n7. **Top Requested URIs** (Table) - самые нагруженные endpoints\n8. **Recent Error Logs** (Logs) - последние 100 ошибок\n\n## 📝 Примеры LogQL запросов\n\n### Все логи доступа\n\n```logql\n{log_type=\"access\", service=\"nginx\"}\n```\n\n### Только ошибки 5xx\n\n```logql\n{log_type=\"access\", service=\"nginx\"} |~ \"HTTP/[0-9.]+ 5[0-9]{2}\"\n```\n\n### Ошибки 4xx\n\n```logql\n{log_type=\"access\", service=\"nginx\"} |~ \"HTTP/[0-9.]+ 4[0-9]{2}\"\n```\n\n### Логи ошибок Nginx\n\n```logql\n{log_type=\"error\", service=\"nginx\"}\n```\n\n### Поиск конкретного пути\n\n```logql\n{log_type=\"access\", service=\"nginx\"} |= \"/fail\"\n```\n\n### Количество ошибок за период\n\n```logql\ncount_over_time({log_type=\"access\", service=\"nginx\"} |~ \"5[0-9]{2}\" [5m])\n```\n\n## 🔧 Импорт дашборда в Grafana\n\n### Автоматически (рекомендуется)\n\nЕсли в `docker-compose.yml` настроен volume для provisioning:\n\n```yaml\ngrafana:\n  volumes:\n    - ./grafana/dashboards:/etc/grafana/provisioning/dashboards\n```\n\nДашборд загружается автоматически при запуске.\n\n### Вручную через UI\n\n1. Открой **Grafana** → http://localhost:3000\n2. Нажми **Dashboards** → **Import**\n3. Нажми **\"Upload dashboard JSON file\"**\n4. Выбери файл `grafana/dashboards/nginx-logs-dashboard.json`\n5. Нажми **Import**\n\n## 📂 Структура проекта\n\n```\nlogging-project/\n├── .gitignore                          # Исключения для Git\n├── .dockerignore                       # Исключения для Docker\n├── .env.example                        # Пример переменных окружения\n├── README.md                           # Этот файл\n├── LICENSE                             # Лицензия (MIT)\n├── docker-compose.yml                  # Оркестрация сервисов\n│\n├── grafana/\n│   ├── dashboards/\n│   │   └── nginx-logs-dashboard.json   # Экспортированный дашборд\n│   ├── grafana.db                      # База данных (в .gitignore)\n│   └── plugins/                        # Плагины (опционально)\n│\n├── loki/\n│   ├── config/\n│   │   └── loki-config.yml             # Конфигурация Loki\n│   └── data/                           # Данные логов (в .gitignore)\n│\n├── nginx/\n│   ├── conf.d/\n│   │   └── default.conf                # Конфигурация Nginx\n│   └── log/                            # Логи Nginx (в .gitignore)\n│\n├── prometheus/\n│   ├── prometheus.yml                  # Конфигурация Prometheus\n│   └── data/                           # Время-серийная БД (в .gitignore)\n│\n└── vector/\n    └── vector.yaml                     # Конфигурация Vector log shipper\n```\n\n## 🛑 Остановка сервисов\n\n```bash\ndocker compose down\n```\n\nДля удаления также данных:\n\n```bash\ndocker compose down -v\n```\n\n## 🐛 Решение проблем\n\n### Логи не собираются\n\nПроверь, что Vector работает:\n\n```bash\ndocker compose logs vector\n```\n\n### Grafana не подключается к Loki\n\n1. Проверь Data Source: **Settings** → **Data Sources** → **Loki**\n2. URL должна быть: `http://loki:3100`\n\n### Prometheus не scrapes метрики\n\n```bash\ndocker compose logs prometheus\n```\n\nПроверь `prometheus/prometheus.yml` на синтаксис.\n\n## 📚 Дополнительные ресурсы\n\n- [Grafana документация](https://grafana.com/docs/grafana/latest/)\n- [Loki документация](https://grafana.com/docs/loki/latest/)\n- [LogQL запросы](https://grafana.com/docs/loki/latest/logql/)\n- [Prometheus метрики](https://prometheus.io/docs/prometheus/latest/)\n- [Vector документация](https://vector.dev/docs/)\n\n## 📄 Лицензия\n\nMIT License - смотри файл LICENSE\n\n## 👨‍💻 Для разработчиков\n\nЭтот проект идеален для:\n\n- Изучения Grafana и Loki\n- Обучения работе с observability стеком\n- Мониторингу Nginx логов\n- Портфолио DevOps инженера\n\n### Рекомендуемые улучшения\n\n- [ ] Добавить alert rules в Prometheus\n- [ ] Настроить notification channels (Email, Slack)\n- [ ] Добавить роли пользователей в Grafana\n- [ ] Настроить persistence volumes для production\n- [ ] Добавить nginx-exporter для метрик производительности\n- [ ] Создать CI/CD pipeline для автоматического развёртывания\n\n## 🤝 Контрибьютинг\n\nContributions приветствуются! Создавай pull requests для улучшений и исправлений ошибок.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fal-kv%2Flogging-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fal-kv%2Flogging-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fal-kv%2Flogging-project/lists"}