Цей проект демонструє інтеграцію Node.js додатку з ELK стеком (Elasticsearch, Logstash, Kibana) для централізованого логування.
├── .github/workflows/ # GitHub Actions workflows
├── logstash/ # Logstash конфігурація
│ ├── config/ # Logstash конфігурація
│ └── pipeline/ # Logstash pipeline
├── tests/ # Тести
├── index.js # Основний файл додатку з логуванням
├── package.json # Залежності та скрипти
├── Dockerfile # Контейнеризація додатку
├── docker-compose.yml # ELK стек + додаток
├── test-app.sh # Скрипт для тестування
└── load-test.sh # Скрипт для навантажувального тестування
- Express.js додаток з Winston логуванням
- Автоматична відправка логів в Logstash через HTTP
- Різні рівні логування (info, warn, error)
- Endpoints для генерації різних типів логів
- Elasticsearch: Зберігання та індексація логів
- Logstash: Обробка та парсинг логів
- Kibana: Візуалізація та аналіз логів
- Docker та Docker Compose
- curl (для тестування)
- jq (опціонально, для красивого виводу JSON)
docker-compose up -ddocker-compose ps- Application: http://localhost:3000
- Elasticsearch: http://localhost:9200
- Kibana: http://localhost:5601
- Logstash: http://localhost:5000 (HTTP input)
./test-app.sh./load-test.sh# Нормальні операції
curl http://localhost:3000/
curl http://localhost:3000/health
curl http://localhost:3000/api/users
# Створення користувача
curl -X POST -H "Content-Type: application/json" \
-d '{"name":"Test User","email":"test@example.com"}' \
http://localhost:3000/api/users
# Генерація помилок
curl http://localhost:3000/api/error
curl http://localhost:3000/api/notfound
curl http://localhost:3000/nonexistent- Відкрийте Kibana: http://localhost:5601
- Перейдіть в "Stack Management" → "Index Patterns"
- Створіть новий index pattern:
app-logs-* - Виберіть timestamp field:
@timestamp
- Перейдіть в "Discover"
- Виберіть створений index pattern
- Налаштуйте часовий діапазон
- Переглядайте логи в реальному часі
- Перейдіть в "Dashboard"
- Створіть новий dashboard
- Додайте візуалізації:
- Log count over time
- Log level distribution
- HTTP status codes
- Error messages
GET /- Головна сторінкаGET /health- Health checkGET /api/users- Список користувачівPOST /api/users- Створення користувача
GET /api/error- Симуляція помилки сервера (500)GET /api/timeout- Симуляція таймауту (408)GET /api/notfound- Симуляція 404 помилки
{
"level": "info",
"message": "HTTP Request",
"method": "GET",
"url": "/api/users",
"ip": "127.0.0.1",
"userAgent": "curl/7.68.0",
"timestamp": "2024-01-15T10:30:00.000Z"
}{
"level": "info",
"message": "New user created",
"name": "Test User",
"email": "test@example.com",
"timestamp": "2024-01-15T10:30:00.000Z"
}{
"level": "error",
"message": "Simulated error endpoint accessed",
"timestamp": "2024-01-15T10:30:00.000Z"
}# Перевірка індексів
curl http://localhost:9200/_cat/indices
# Пошук логів
curl -X GET "localhost:9200/app-logs-*/_search?pretty"
# Пошук помилок
curl -X GET "localhost:9200/app-logs-*/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"term": {
"level": "error"
}
}
}'- Всі логи:
* - Тільки помилки:
level:error - HTTP запити:
message:"HTTP Request" - Конкретний endpoint:
http_url:"/api/users"
docker-compose logs app
docker-compose logs elasticsearch
docker-compose logs logstash
docker-compose logs kibana# Перевірка Elasticsearch
curl http://localhost:9200/_cluster/health
# Перевірка Logstash
curl http://localhost:5000
# Перевірка додатку
curl http://localhost:3000/health# Зупинка всіх сервісів
docker-compose down
# Видалення volumes (очищення даних Elasticsearch)
docker-compose down -v
# Перезапуск
docker-compose up -d- Security: Додати аутентифікацію в Kibana
- Alerting: Налаштувати сповіщення про критичні помилки
- Metrics: Додати метрики додатку (CPU, пам'ять)
- Log Rotation: Налаштувати ротацію логів
- Multiple Apps: Додати більше додатків до системи
- Custom Dashboards: Створити спеціалізовані dashboard'и
Після запуску системи та тестування ви отримаєте:
- ✅ Працюючий Node.js додаток з логуванням
- ✅ ELK стек для централізованого логування
- ✅ Автоматичну відправку логів в Logstash
- ✅ Візуалізацію логів в Kibana
- ✅ Різні типи логів (info, warn, error)
- ✅ Скрипти для тестування та генерації логів