- Убрана подстановка значений по умолчанию для devops_password и devops_ssh_public_key - Добавлена строгая валидация секретов из vault/secrets.yml с детальными сообщениями об ошибках - Убран подробный вывод установки пакетов в тасках - Исправлена проблема с созданием симлинков в vault/ при тестировании - Обновлена логика загрузки vault переменных в molecule тестах - Добавлена очистка симлинков в destroy.yml для дополнительной безопасности Автор: Сергей Антропов Сайт: https://devops.org.ru
		
			
				
	
	
		
			425 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			425 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Мониторинг и диагностика DevOpsLab
 | ||
| 
 | ||
| **Автор:** Сергей Антропов  
 | ||
| **Сайт:** https://devops.org.ru  
 | ||
| **Версия:** 3.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 run.yml -vvv
 | ||
| 
 | ||
| # Проверка переменных
 | ||
| ansible-inventory --list -i inventory/hosts.ini
 | ||
| 
 | ||
| # Dry-run без выполнения
 | ||
| ansible-playbook -i inventory/hosts.ini run.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 run.yml --list-tags
 | ||
| ansible-playbook -i inventory/hosts.ini run.yml --list-tasks
 | ||
| 
 | ||
| # Выполнение конкретной задачи
 | ||
| ansible-playbook -i inventory/hosts.ini run.yml --tags docker
 | ||
| 
 | ||
| # Debug режим
 | ||
| ansible-playbook -i inventory/hosts.ini run.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
 |