Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
425 lines
10 KiB
Markdown
425 lines
10 KiB
Markdown
# Мониторинг и диагностика DevOpsLab
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru
|
||
**Версия:** 2.0.0
|
||
|
||
## 🔍 Диагностика Docker
|
||
|
||
### Проверка состояния Docker
|
||
|
||
```bash
|
||
# Проверка статуса Docker
|
||
docker info
|
||
|
||
# Проверка запущенных контейнеров
|
||
docker ps -a
|
||
|
||
# Проверка образов DevOpsLab
|
||
docker images | grep inecs/ansible-lab
|
||
|
||
# Проверка сетей
|
||
docker network ls | grep labnet
|
||
```
|
||
|
||
### Диагностика buildx проблем
|
||
|
||
```bash
|
||
# Полная диагностика buildx
|
||
make docker diagnose
|
||
|
||
# Проверка builder'а
|
||
make docker check-builder
|
||
|
||
# Сброс builder'а при проблемах
|
||
make docker reset-builder
|
||
|
||
# Настройка builder'а
|
||
make docker setup-builder
|
||
```
|
||
|
||
### Логи Docker
|
||
|
||
```bash
|
||
# Логи Docker daemon (Linux)
|
||
sudo journalctl -u docker.service -f
|
||
|
||
# Логи Docker (macOS)
|
||
tail -f ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
|
||
|
||
# Логи конкретного контейнера
|
||
docker logs ansible-controller
|
||
|
||
# Логи с временными метками
|
||
docker logs -t ansible-controller
|
||
|
||
# Следить за логами в реальном времени
|
||
docker logs -f ansible-controller
|
||
|
||
# Последние 100 строк логов
|
||
docker logs --tail 100 ansible-controller
|
||
```
|
||
|
||
## 🧪 Диагностика тестирования
|
||
|
||
### Проверка preset'ов
|
||
|
||
```bash
|
||
# Список доступных preset'ов
|
||
make presets list
|
||
|
||
# Информация о конкретном preset'е
|
||
make presets info PRESET=default
|
||
|
||
# Проверка файлов preset'ов
|
||
ls -la molecule/presets/
|
||
|
||
# Проверка всех preset'ов
|
||
find molecule/presets -name "*.yml" -exec echo "=== {} ===" \; -exec cat {} \;
|
||
```
|
||
|
||
### Проверка инвентори
|
||
|
||
```bash
|
||
# Проверка продакшн инвентори
|
||
cat inventory/hosts.ini
|
||
|
||
# Тестирование подключения
|
||
ansible all -i inventory/hosts.ini -m ping
|
||
|
||
# Проверка доступности хостов
|
||
ansible all -i inventory/hosts.ini -m shell -a "uname -a"
|
||
```
|
||
|
||
### Логи тестирования
|
||
|
||
```bash
|
||
# Проверка созданных контейнеров
|
||
docker ps -a --filter "network=labnet"
|
||
|
||
# Логи всех контейнеров Molecule
|
||
docker ps -a --filter "network=labnet" --format "{{.Names}}" | while read name; do
|
||
echo "=== $name ==="
|
||
docker logs $name 2>&1 | tail -20
|
||
done
|
||
|
||
# Очистка контейнеров Molecule
|
||
make clean-containers
|
||
```
|
||
|
||
## 📊 Мониторинг ресурсов
|
||
|
||
### Мониторинг Docker
|
||
|
||
```bash
|
||
# Статистика использования ресурсов контейнерами
|
||
docker stats --no-stream
|
||
|
||
# Использование диска Docker
|
||
docker system df
|
||
|
||
# Детальная информация о диске
|
||
docker system df -v
|
||
|
||
# Очистка неиспользуемых ресурсов
|
||
docker system prune -a
|
||
```
|
||
|
||
### Мониторинг системы
|
||
|
||
```bash
|
||
# Использование диска
|
||
df -h
|
||
|
||
# Использование памяти
|
||
free -h # Linux
|
||
vm_stat # macOS
|
||
|
||
# Процессы Docker
|
||
ps aux | grep docker
|
||
|
||
# CPU и память в реальном времени
|
||
top
|
||
# или
|
||
htop
|
||
```
|
||
|
||
### Мониторинг сети
|
||
|
||
```bash
|
||
# Инспекция сети labnet
|
||
docker network inspect labnet
|
||
|
||
# Статистика сети
|
||
docker network inspect labnet --format '{{json .Containers}}' | jq
|
||
|
||
# Просмотр портов
|
||
netstat -tulpn | grep docker
|
||
|
||
# Просмотр установленных соединений
|
||
ss -tulpn | grep docker
|
||
```
|
||
|
||
## 🔧 Диагностика ролей
|
||
|
||
### Проверка синтаксиса
|
||
|
||
```bash
|
||
# Lint проверка всех ролей
|
||
make role lint
|
||
|
||
# Lint проверка конкретной роли
|
||
make role lint docker
|
||
make role lint devops
|
||
make role lint ping
|
||
|
||
# Проверка синтаксиса файлов роли
|
||
ansible-playbook --syntax-check roles/docker/tasks/main.yml
|
||
```
|
||
|
||
### Проверка переменных
|
||
|
||
```bash
|
||
# Просмотр всех переменных для хоста
|
||
ansible-inventory --list -i inventory/hosts.ini
|
||
|
||
# Проверка переменных конкретного хоста
|
||
ansible-inventory --host web1.example.com -i inventory/hosts.ini
|
||
|
||
# Просмотр всех групп
|
||
ansible-inventory --list | jq 'keys'
|
||
```
|
||
|
||
### Тестирование ролей
|
||
|
||
```bash
|
||
# Тестирование с подробным выводом
|
||
make role test 2>&1 | tee test-output.log
|
||
|
||
# Тестирование конкретной роли
|
||
make role test docker
|
||
|
||
# Тестирование с minimal preset
|
||
make role test minimal
|
||
|
||
# Просмотр результатов теста
|
||
docker logs $(docker ps -aq --filter "network=labnet" | head -1)
|
||
```
|
||
|
||
## 🚨 Решение проблем
|
||
|
||
### Проблемы с Docker
|
||
|
||
#### Docker не запускается
|
||
|
||
```bash
|
||
# Проверка статуса (Linux)
|
||
sudo systemctl status docker
|
||
|
||
# Запуск Docker (Linux)
|
||
sudo systemctl start docker
|
||
|
||
# Проверка логов (Linux)
|
||
sudo journalctl -u docker.service -f
|
||
|
||
# Перезапуск Docker Desktop (macOS/Windows)
|
||
# Use Docker Desktop interface
|
||
```
|
||
|
||
#### Buildx зависает
|
||
|
||
```bash
|
||
# Диагностика
|
||
make docker diagnose
|
||
|
||
# Сброс builder'а
|
||
make docker reset-builder
|
||
|
||
# Очистка контейнеров buildkit
|
||
docker ps -a --filter "name=buildx_buildkit" --format "{{.Names}}" | xargs -r docker rm -f
|
||
```
|
||
|
||
#### Образы не собираются
|
||
|
||
```bash
|
||
# Очистка builder'а
|
||
make docker clean-builder
|
||
|
||
# Пересоздание builder'а
|
||
make docker setup-builder
|
||
|
||
# Полная пересборка
|
||
make docker rebuild
|
||
```
|
||
|
||
### Проблемы с тестированием
|
||
|
||
#### Preset'ы не работают
|
||
|
||
```bash
|
||
# Проверка preset файлов
|
||
ls -la molecule/presets/
|
||
|
||
# Проверка синтаксиса preset'а
|
||
yamllint molecule/presets/default.yml
|
||
|
||
# Информация о preset'е
|
||
make presets info PRESET=default
|
||
```
|
||
|
||
#### Контейнеры не запускаются
|
||
|
||
```bash
|
||
# Проверка созданных контейнеров
|
||
docker ps -a --filter "network=labnet"
|
||
|
||
# Логи контейнера
|
||
docker logs <container-name>
|
||
|
||
# Перезапуск контейнера
|
||
docker restart <container-name>
|
||
|
||
# Удаление всех контейнеров Molecule
|
||
make clean-containers
|
||
```
|
||
|
||
#### Роли не выполняются
|
||
|
||
```bash
|
||
# Проверка синтаксиса
|
||
make role lint
|
||
|
||
# Тест с verbose выводом
|
||
ansible-playbook -i inventory/hosts.ini site.yml -vvv
|
||
|
||
# Проверка переменных
|
||
ansible-inventory --list -i inventory/hosts.ini
|
||
|
||
# Dry-run без выполнения
|
||
ansible-playbook -i inventory/hosts.ini site.yml --check
|
||
```
|
||
|
||
### Проблемы с ролями
|
||
|
||
#### Синтаксические ошибки
|
||
|
||
```bash
|
||
# Lint проверка
|
||
make role lint
|
||
|
||
# Проверка конкретной роли
|
||
ansible-lint roles/docker/
|
||
|
||
# Проверка YAML синтаксиса
|
||
yamllint roles/docker/tasks/main.yml
|
||
```
|
||
|
||
#### Логика не работает
|
||
|
||
```bash
|
||
# Проверка переменных
|
||
ansible-playbook -i inventory/hosts.ini site.yml --list-tags
|
||
ansible-playbook -i inventory/hosts.ini site.yml --list-tasks
|
||
|
||
# Выполнение конкретной задачи
|
||
ansible-playbook -i inventory/hosts.ini site.yml --tags docker
|
||
|
||
# Debug режим
|
||
ansible-playbook -i inventory/hosts.ini site.yml -vvv
|
||
```
|
||
|
||
## 📈 Сбор диагностической информации
|
||
|
||
### Скрипт диагностики
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# Создание отчета для диагностики
|
||
|
||
echo "🔍 Сбор диагностической информации..."
|
||
|
||
# Создание директории для логов
|
||
mkdir -p debug-logs
|
||
|
||
# Docker информация
|
||
docker info > debug-logs/docker-info.txt 2>&1
|
||
docker images > debug-logs/docker-images.txt 2>&1
|
||
docker ps -a > debug-logs/docker-containers.txt 2>&1
|
||
docker network ls > debug-logs/docker-networks.txt 2>&1
|
||
|
||
# Системная информация
|
||
df -h > debug-logs/disk-usage.txt 2>&1
|
||
free -h > debug-logs/memory-usage.txt 2>&1 2>/dev/null || vm_stat > debug-logs/memory-usage.txt 2>&1
|
||
ps aux | grep docker > debug-logs/docker-processes.txt 2>&1
|
||
|
||
# Информация о проекте
|
||
ls -la roles/ > debug-logs/roles-list.txt 2>&1
|
||
ls -la molecule/presets/ > debug-logs/presets-list.txt 2>&1
|
||
cat inventory/hosts.ini > debug-logs/inventory.txt 2>&1
|
||
|
||
# Создание архива
|
||
tar -czf debug-logs-$(date +%Y%m%d-%H%M%S).tar.gz debug-logs/
|
||
|
||
echo "✅ Диагностическая информация собрана в: debug-logs-$(date +%Y%m%d-%H%M%S).tar.gz"
|
||
```
|
||
|
||
### Команды для быстрой диагностики
|
||
|
||
```bash
|
||
# Быстрая проверка состояния
|
||
echo "=== Docker Status ===" && docker info | head -5
|
||
echo "=== DevOpsLab Images ===" && docker images | grep inecs/ansible-lab
|
||
echo "=== Roles ===" && ls -1 roles/ | grep -v "\.yml"
|
||
echo "=== Presets ===" && ls -1 molecule/presets/*.yml 2>/dev/null | wc -l
|
||
echo "=== Disk Usage ===" && df -h . | tail -1
|
||
```
|
||
|
||
## 🔧 Полезные команды
|
||
|
||
### Очистка
|
||
|
||
```bash
|
||
# Очистка контейнеров Molecule
|
||
make clean-containers
|
||
|
||
# Очистка Docker образов DevOpsLab
|
||
make docker clean
|
||
|
||
# Очистка всего Docker
|
||
make docker purge
|
||
|
||
# Очистка buildx
|
||
make docker clean-builder
|
||
```
|
||
|
||
### Проверка
|
||
|
||
```bash
|
||
# Проверка наличия образов
|
||
make custom-images check
|
||
|
||
# Проверка builder'а
|
||
make docker check-builder
|
||
|
||
# Информация об образах
|
||
make docker info
|
||
```
|
||
|
||
### Тестирование
|
||
|
||
```bash
|
||
# Быстрый тест
|
||
make role test minimal
|
||
|
||
# Полный тест
|
||
make role test all-images
|
||
|
||
# Тест с конкретным preset'ом
|
||
make role test docker-full
|
||
```
|
||
|
||
---
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru
|