logboard/docs/troubleshooting.md

768 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Устранение неполадок LogBoard+
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Содержание
1. [Общие проблемы](#общие-проблемы)
2. [Проблемы с Docker](#проблемы-с-docker)
3. [Проблемы с аутентификацией](#проблемы-с-аутентификацией)
4. [Проблемы с WebSocket](#проблемы-с-websocket)
5. [Проблемы с производительностью](#проблемы-с-производительностью)
6. [Проблемы с сетью](#проблемы-с-сетью)
7. [Диагностика и логи](#диагностика-и-логи)
## Общие проблемы
### Приложение не запускается
#### Симптомы
- Ошибка при выполнении `make up`
- Контейнер не стартует
- Ошибки в логах Docker
#### Диагностика
```bash
# Проверка статуса контейнеров
make status
# Просмотр логов
make logs
# Проверка конфигурации
make validate
# Проверка переменных окружения
make env-check
```
#### Решения
1. **Проблема с портом**
```bash
# Проверка занятости порта
netstat -tlnp | grep 9001
# Изменение порта в .env
LOGBOARD_PORT=9002
```
2. **Проблема с правами доступа**
```bash
# Проверка прав на директории
ls -la snapshots/
# Установка правильных прав
chmod 755 snapshots/
chown $USER:$USER snapshots/
```
3. **Проблема с Docker**
```bash
# Проверка статуса Docker
sudo systemctl status docker
# Перезапуск Docker
sudo systemctl restart docker
```
### Ошибки конфигурации
#### Симптомы
- Ошибки при парсинге переменных окружения
- Неправильная работа функций
- Ошибки в логах приложения
#### Диагностика
```bash
# Проверка синтаксиса .env файла
cat .env | grep -v "^#" | grep -v "^$"
# Проверка обязательных переменных
grep -E "^(LOGBOARD_PASS|SECRET_KEY|ENCRYPTION_KEY)=" .env
```
#### Решения
1. **Отсутствуют обязательные переменные**
```bash
# Создание .env из примера
make setup
# Редактирование .env
nano .env
```
2. **Неправильный формат переменных**
```bash
# Проверка формата
# Переменные должны быть в формате KEY=value
# Без пробелов вокруг знака равенства
```
## Проблемы с Docker
### Ошибка подключения к Docker socket
#### Симптомы
- Ошибка "Permission denied" при доступе к Docker
- Контейнеры не отображаются в интерфейсе
- Ошибки в логах приложения
#### Диагностика
```bash
# Проверка прав доступа к Docker socket
ls -la /var/run/docker.sock
# Проверка группы docker
getent group docker
# Проверка пользователя в группе
groups $USER
```
#### Решения
1. **Добавление пользователя в группу docker**
```bash
# Создание группы docker (если не существует)
sudo groupadd docker
# Добавление пользователя в группу
sudo usermod -aG docker $USER
# Перезагрузка группы
newgrp docker
# Проверка
docker ps
```
2. **Изменение прав на Docker socket**
```bash
# Временное решение (не рекомендуется для продакшена)
sudo chmod 666 /var/run/docker.sock
```
3. **Перезапуск Docker daemon**
```bash
sudo systemctl restart docker
```
### Контейнеры не отображаются
#### Симптомы
- Пустой список контейнеров в интерфейсе
- Ошибки при получении списка контейнеров
- Контейнеры видны в `docker ps`, но не в LogBoard+
#### Диагностика
```bash
# Проверка списка контейнеров
docker ps -a
# Проверка меток контейнеров
docker inspect <container_id> | grep -A 10 "Labels"
# Проверка фильтров проектов
echo $COMPOSE_PROJECT_NAME
echo $LOGBOARD_PROJECTS
```
#### Решения
1. **Проблема с фильтрами проектов**
```bash
# Очистка фильтров в .env
# COMPOSE_PROJECT_NAME=
# LOGBOARD_PROJECTS=
# Перезапуск приложения
make restart
```
2. **Проблема с метками контейнеров**
```bash
# Проверка меток Docker Compose
docker inspect <container_id> | grep "com.docker.compose"
# Перезапуск контейнеров с правильными метками
docker compose down && docker compose up -d
```
3. **Проблема с исключенными контейнерами**
```bash
# Проверка файла исключений
cat excluded_containers.json
# Очистка исключений
echo '{"excluded_containers": []}' > excluded_containers.json
```
### Ошибки получения логов
#### Симптомы
- Логи не загружаются
- Ошибки при запросе логов
- Пустые логи в интерфейсе
#### Диагностика
```bash
# Проверка логов контейнера напрямую
docker logs <container_id>
# Проверка статуса контейнера
docker inspect <container_id> | grep -A 5 "State"
# Проверка прав доступа к логам
docker logs <container_id> 2>&1
```
#### Решения
1. **Контейнер остановлен**
```bash
# Запуск контейнера
docker start <container_id>
# Проверка статуса
docker ps
```
2. **Проблема с драйвером логирования**
```bash
# Проверка драйвера логирования
docker inspect <container_id> | grep "LogDriver"
# Изменение драйвера логирования
docker run --log-driver=json-file ...
```
3. **Проблема с размером логов**
```bash
# Очистка логов контейнера
docker logs --since 1h <container_id>
# Ограничение размера логов
docker run --log-opt max-size=10m ...
```
## Проблемы с аутентификацией
### Ошибка входа в систему
#### Симптомы
- Не удается войти в систему
- Ошибка "Неверное имя пользователя или пароль"
- Бесконечная перезагрузка страницы входа
#### Диагностика
```bash
# Проверка переменных аутентификации
grep -E "^(LOGBOARD_USER|LOGBOARD_PASS)=" .env
# Проверка API аутентификации
curl -X POST "http://localhost:9001/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}'
```
#### Решения
1. **Неправильные учетные данные**
```bash
# Проверка и исправление .env
LOGBOARD_USER=admin
LOGBOARD_PASS=your-correct-password
# Перезапуск приложения
make restart
```
2. **Проблема с JWT токенами**
```bash
# Проверка SECRET_KEY
grep "SECRET_KEY" .env
# Генерация нового ключа
openssl rand -hex 32
# Обновление .env
SECRET_KEY=your-new-secret-key
```
3. **Проблема с cookies**
```bash
# Очистка cookies браузера
# Или использование режима инкогнито
```
### Ошибки авторизации API
#### Симптомы
- Ошибка 401 при запросах к API
- "Требуется авторизация" в ответах
- Не работает WebSocket API
#### Диагностика
```bash
# Проверка токена
curl -X GET "http://localhost:9001/api/auth/me" \
-H "Authorization: Bearer YOUR_TOKEN"
# Проверка времени жизни токена
echo $SESSION_TIMEOUT
```
#### Решения
1. **Истекший токен**
```bash
# Увеличение времени жизни токена
SESSION_TIMEOUT=7200 # 2 часа
# Перезапуск приложения
make restart
```
2. **Неправильный формат токена**
```bash
# Получение нового токена
curl -X POST "http://localhost:9001/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"your-password"}'
```
3. **Проблема с часовыми поясами**
```bash
# Установка правильного часового пояса
TZ_TS=UTC
# Перезапуск приложения
make restart
```
## Проблемы с WebSocket
### WebSocket соединения не устанавливаются
#### Симптомы
- Ошибки WebSocket в консоли браузера
- Логи не обновляются в реальном времени
- Ошибка "WebSocket connection failed"
#### Диагностика
```bash
# Проверка WebSocket endpoint
curl -I "http://localhost:9001/api/websocket/logs/test"
# Проверка логов приложения
make logs | grep -i websocket
# Проверка в браузере
# Открыть Developer Tools -> Console
```
#### Решения
1. **Проблема с прокси**
```nginx
# Настройка Nginx для WebSocket с корректными путями API
location /api/websocket/ {
proxy_pass http://localhost:9001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
```
2. **Проблема с токеном**
```javascript
// Проверка токена в WebSocket URL
const token = "your-valid-token";
const ws = new WebSocket(`ws://localhost:9001/api/websocket/logs/container-id?token=${token}`);
```
3. **Проблема с CORS**
```bash
# Добавление CORS заголовков в конфигурацию
# (если используется)
```
### WebSocket соединения разрываются
#### Симптомы
- Соединения закрываются через некоторое время
- Ошибки "Connection closed unexpectedly"
- Логи перестают обновляться
#### Диагностика
```bash
# Проверка таймаутов
grep -E "TIMEOUT|timeout" .env
# Проверка нагрузки на систему
top
free -h
```
#### Решения
1. **Увеличение таймаутов**
```bash
# Увеличение таймаутов в .env
CONNECTION_TIMEOUT=120
READ_TIMEOUT=300
# Перезапуск приложения
make restart
```
2. **Проблема с нагрузкой**
```bash
# Ограничение количества соединений
MAX_CONNECTIONS=50
# Увеличение ресурсов контейнера
# В docker-compose.yml
deploy:
resources:
limits:
memory: 1G
cpus: '1.0'
```
3. **Проблема с сетевыми таймаутами**
```bash
# Настройка keepalive
# В конфигурации прокси или балансировщика
```
## Проблемы с производительностью
### Медленная загрузка логов
#### Симптомы
- Долгая загрузка страниц
- Медленное получение логов
- Высокая нагрузка на CPU
#### Диагностика
```bash
# Проверка ресурсов системы
htop
iostat 1
df -h
# Проверка настроек производительности
grep -E "TAIL|INTERVAL" .env
```
#### Решения
1. **Оптимизация настроек**
```bash
# Уменьшение количества строк логов
LOGBOARD_TAIL=100
# Увеличение интервала обновления
LOGBOARD_AJAX_UPDATE_INTERVAL=5000
# Перезапуск приложения
make restart
```
2. **Ограничение ресурсов**
```bash
# Настройка лимитов в docker-compose.yml
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
reservations:
memory: 256M
cpus: '0.25'
```
3. **Оптимизация Docker**
```bash
# Очистка неиспользуемых ресурсов
docker system prune -f
# Ограничение логов контейнеров
docker run --log-opt max-size=10m --log-opt max-file=3 ...
```
### Высокое потребление памяти
#### Симптомы
- Контейнер LogBoard+ потребляет много памяти
- Ошибки "Out of memory"
- Медленная работа системы
#### Диагностика
```bash
# Проверка использования памяти
docker stats logboard
# Проверка процессов в контейнере
docker exec logboard ps aux
# Проверка логов приложения
make logs | grep -i memory
```
#### Решения
1. **Ограничение памяти**
```bash
# Установка лимитов памяти
# В docker-compose.yml
deploy:
resources:
limits:
memory: 512M
```
2. **Оптимизация кода**
```bash
# Уменьшение размера буферов
# Уменьшение количества одновременных соединений
MAX_CONNECTIONS=50
```
3. **Очистка кэша**
```bash
# Перезапуск приложения
make restart
# Очистка Docker кэша
docker system prune -f
```
## Проблемы с сетью
### Недоступность веб-интерфейса
#### Симптомы
- Не удается открыть веб-интерфейс
- Ошибка "Connection refused"
- Таймаут при подключении
#### Диагностика
```bash
# Проверка статуса контейнера
make status
# Проверка портов
netstat -tlnp | grep 9001
# Проверка доступности
curl -I http://localhost:9001
```
#### Решения
1. **Проблема с портом**
```bash
# Проверка занятости порта
sudo lsof -i :9001
# Изменение порта
LOGBOARD_PORT=9002
make restart
```
2. **Проблема с сетевыми настройками**
```bash
# Проверка Docker сетей
docker network ls
# Пересоздание сетей
docker compose down
docker compose up -d
```
3. **Проблема с файрволом**
```bash
# Проверка файрвола
sudo ufw status
# Разрешение порта
sudo ufw allow 9001
```
### Проблемы с внешним доступом
#### Симптомы
- Доступ только с localhost
- Не работает с внешним IP
- Проблемы с reverse proxy
#### Диагностика
```bash
# Проверка привязки к интерфейсам
netstat -tlnp | grep 9001
# Проверка конфигурации Docker
docker inspect logboard | grep -A 10 "NetworkSettings"
```
#### Решения
1. **Настройка привязки к интерфейсам**
```yaml
# В docker-compose.yml
ports:
- "0.0.0.0:9001:9001"
```
2. **Настройка reverse proxy**
```nginx
# Nginx конфигурация
location / {
proxy_pass http://localhost:9001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
```
3. **Настройка файрвола**
```bash
# Разрешение внешнего доступа
sudo ufw allow from 192.168.1.0/24 to any port 9001
```
## Диагностика и логи
### Просмотр логов приложения
```bash
# Логи в реальном времени
make logs -f
# Логи с фильтрацией
make logs | grep ERROR
# Логи последних 100 строк
make logs | tail -100
```
### Просмотр логов Docker
```bash
# Логи контейнера LogBoard+
docker logs logboard
# Логи с временными метками
docker logs -t logboard
# Логи последних 50 строк
docker logs --tail 50 logboard
```
### Проверка состояния системы
```bash
# Статус сервисов
make status
# Использование ресурсов
docker stats logboard
# Информация о контейнере
docker inspect logboard
```
### Отладка API
```bash
# Проверка health check
curl http://localhost:9001/healthz
# Проверка аутентификации
curl -X POST "http://localhost:9001/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}'
# Проверка API с токеном
TOKEN="your-token"
curl -X GET "http://localhost:9001/api/containers/services" \
-H "Authorization: Bearer $TOKEN"
```
### Создание отчета о проблеме
```bash
# Создание диагностического отчета
cat > diagnostic_report.txt << EOF
=== LogBoard+ Diagnostic Report ===
Date: $(date)
Version: 1.0.0
=== System Information ===
OS: $(uname -a)
Docker: $(docker --version)
Docker Compose: $(docker compose version)
=== LogBoard+ Status ===
$(make status)
=== Configuration ===
$(grep -v "^#" .env | grep -v "^$")
=== Recent Logs ===
$(make logs | tail -50)
=== Docker Information ===
$(docker inspect logboard | jq '.[] | {State: .State, NetworkSettings: .NetworkSettings}')
=== System Resources ===
$(free -h)
$(df -h /)
EOF
echo "Diagnostic report saved to diagnostic_report.txt"
```
### Частые команды для диагностики
```bash
# Быстрая диагностика
make env-check && make validate && make status
# Проверка подключения к Docker
docker ps
# Проверка доступности API
curl -s http://localhost:9001/healthz
# Проверка аутентификации
curl -s -X POST "http://localhost:9001/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}' | jq .
# Проверка списка контейнеров (требует токен)
TOKEN=$(curl -s -X POST "http://localhost:9001/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}' | jq -r '.access_token')
curl -s -X GET "http://localhost:9001/api/containers/services" \
-H "Authorization: Bearer $TOKEN" | jq 'length'
```