Skip to content

Hadock9/github-actions-demo

Repository files navigation

ELK Stack Demo with Node.js Application

Цей проект демонструє інтеграцію 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        # Скрипт для навантажувального тестування

Компоненти системи

1. Node.js Application

  • Express.js додаток з Winston логуванням
  • Автоматична відправка логів в Logstash через HTTP
  • Різні рівні логування (info, warn, error)
  • Endpoints для генерації різних типів логів

2. ELK Stack

  • Elasticsearch: Зберігання та індексація логів
  • Logstash: Обробка та парсинг логів
  • Kibana: Візуалізація та аналіз логів

Запуск системи

Вимоги

  • Docker та Docker Compose
  • curl (для тестування)
  • jq (опціонально, для красивого виводу JSON)

Запуск всіх сервісів

docker-compose up -d

Перевірка статусу

docker-compose ps

Доступні сервіси

Тестування та генерація логів

Базове тестування

./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

1. Створення Index Pattern

  1. Відкрийте Kibana: http://localhost:5601
  2. Перейдіть в "Stack Management" → "Index Patterns"
  3. Створіть новий index pattern: app-logs-*
  4. Виберіть timestamp field: @timestamp

2. Перегляд логів

  1. Перейдіть в "Discover"
  2. Виберіть створений index pattern
  3. Налаштуйте часовий діапазон
  4. Переглядайте логи в реальному часі

3. Створення Dashboard

  1. Перейдіть в "Dashboard"
  2. Створіть новий dashboard
  3. Додайте візуалізації:
    • Log count over time
    • Log level distribution
    • HTTP status codes
    • Error messages

API Endpoints

Основні endpoints

  • GET / - Головна сторінка
  • GET /health - Health check
  • GET /api/users - Список користувачів
  • POST /api/users - Створення користувача

Endpoints для генерації логів

  • GET /api/error - Симуляція помилки сервера (500)
  • GET /api/timeout - Симуляція таймауту (408)
  • GET /api/notfound - Симуляція 404 помилки

Типи логів

1. HTTP Request Logs

{
	"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"
}

2. Application Logs

{
	"level": "info",
	"message": "New user created",
	"name": "Test User",
	"email": "test@example.com",
	"timestamp": "2024-01-15T10:30:00.000Z"
}

3. Error Logs

{
	"level": "error",
	"message": "Simulated error endpoint accessed",
	"timestamp": "2024-01-15T10:30:00.000Z"
}

Моніторинг та аналіз

Elasticsearch Queries

# Перевірка індексів
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"
    }
  }
}'

Kibana Queries

  • Всі логи: *
  • Тільки помилки: level:error
  • HTTP запити: message:"HTTP Request"
  • Конкретний endpoint: http_url:"/api/users"

Troubleshooting

Перевірка статусу контейнерів

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

Розширення функціоналу

Можливі покращення:

  1. Security: Додати аутентифікацію в Kibana
  2. Alerting: Налаштувати сповіщення про критичні помилки
  3. Metrics: Додати метрики додатку (CPU, пам'ять)
  4. Log Rotation: Налаштувати ротацію логів
  5. Multiple Apps: Додати більше додатків до системи
  6. Custom Dashboards: Створити спеціалізовані dashboard'и

Результат роботи

Після запуску системи та тестування ви отримаєте:

  • ✅ Працюючий Node.js додаток з логуванням
  • ✅ ELK стек для централізованого логування
  • ✅ Автоматичну відправку логів в Logstash
  • ✅ Візуалізацію логів в Kibana
  • ✅ Різні типи логів (info, warn, error)
  • ✅ Скрипти для тестування та генерації логів

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published