- Обновлено название проекта во всех файлах - Изменена документация (README.md, docs/*.md) - Обновлены конфигурационные файлы (Makefile, env.example) - Изменены CI/CD файлы (GitHub Actions, Azure DevOps, Jenkins) - Обновлены скрипты и Dockerfile - Изменено название в molecule.yml и dockerfiles/README.md Все ссылки и упоминания проекта теперь используют название AnsibleLab
		
			
				
	
	
		
			594 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			594 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Мониторинг и диагностика AnsibleLab
 | ||
| 
 | ||
| **Автор:** Сергей Антропов  
 | ||
| **Сайт:** https://devops.org.ru
 | ||
| 
 | ||
| ## 🔍 Диагностика Docker
 | ||
| 
 | ||
| ### Проверка состояния Docker
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверка статуса Docker
 | ||
| docker info
 | ||
| 
 | ||
| # Проверка запущенных контейнеров
 | ||
| docker ps -a
 | ||
| 
 | ||
| # Проверка образов
 | ||
| docker images | grep inecs/ansible-lab
 | ||
| 
 | ||
| # Проверка сетей
 | ||
| docker network ls
 | ||
| ```
 | ||
| 
 | ||
| ### Диагностика buildx проблем
 | ||
| 
 | ||
| ```bash
 | ||
| # Диагностика buildx
 | ||
| make docker diagnose
 | ||
| 
 | ||
| # Проверка builder'а
 | ||
| make docker setup-builder
 | ||
| 
 | ||
| # Сброс builder'а при проблемах
 | ||
| make docker reset-builder
 | ||
| ```
 | ||
| 
 | ||
| ### Логи Docker
 | ||
| 
 | ||
| ```bash
 | ||
| # Логи Docker daemon
 | ||
| sudo journalctl -u docker.service
 | ||
| 
 | ||
| # Логи конкретного контейнера
 | ||
| docker logs ansible-controller
 | ||
| 
 | ||
| # Логи с временными метками
 | ||
| docker logs -t ansible-controller
 | ||
| 
 | ||
| # Следить за логами в реальном времени
 | ||
| docker logs -f ansible-controller
 | ||
| ```
 | ||
| 
 | ||
| ## 🧪 Диагностика тестирования
 | ||
| 
 | ||
| ### Проверка preset'ов
 | ||
| 
 | ||
| ```bash
 | ||
| # Список доступных preset'ов
 | ||
| make presets list
 | ||
| 
 | ||
| # Информация о конкретном preset'е
 | ||
| make presets info PRESET=default
 | ||
| 
 | ||
| # Проверка файлов preset'ов
 | ||
| ls -la molecule/presets/
 | ||
| ```
 | ||
| 
 | ||
| ### Проверка инвентори
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверка тестового инвентори
 | ||
| cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini
 | ||
| 
 | ||
| # Проверка продакшн инвентори
 | ||
| cat inventory/hosts.ini
 | ||
| 
 | ||
| # Тестирование подключения
 | ||
| ansible all -i inventory/hosts.ini -m ping
 | ||
| ```
 | ||
| 
 | ||
| ### Логи тестирования
 | ||
| 
 | ||
| ```bash
 | ||
| # Логи Molecule
 | ||
| ls -la molecule/default/.molecule/
 | ||
| 
 | ||
| # Логи конкретного теста
 | ||
| cat molecule/default/.molecule/test/ansible.log
 | ||
| 
 | ||
| # Логи Ansible
 | ||
| cat molecule/default/.molecule/test/ansible.log | grep ERROR
 | ||
| ```
 | ||
| 
 | ||
| ## 📊 Мониторинг производительности
 | ||
| 
 | ||
| ### Мониторинг ресурсов
 | ||
| 
 | ||
| ```bash
 | ||
| # Использование CPU и памяти
 | ||
| docker stats
 | ||
| 
 | ||
| # Использование диска
 | ||
| df -h
 | ||
| 
 | ||
| # Использование памяти
 | ||
| free -h
 | ||
| 
 | ||
| # Процессы Docker
 | ||
| ps aux | grep docker
 | ||
| ```
 | ||
| 
 | ||
| ### Мониторинг сети
 | ||
| 
 | ||
| ```bash
 | ||
| # Статистика сети
 | ||
| docker network inspect labnet
 | ||
| 
 | ||
| # Подключения к портам
 | ||
| netstat -tulpn | grep docker
 | ||
| 
 | ||
| # Проверка DNS
 | ||
| nslookup docker.io
 | ||
| ```
 | ||
| 
 | ||
| ### Мониторинг логов
 | ||
| 
 | ||
| ```bash
 | ||
| # Логи системы
 | ||
| sudo journalctl -f
 | ||
| 
 | ||
| # Логи Docker
 | ||
| sudo journalctl -u docker.service -f
 | ||
| 
 | ||
| # Логи Ansible
 | ||
| tail -f /var/log/ansible.log
 | ||
| ```
 | ||
| 
 | ||
| ## 🔧 Диагностика ролей
 | ||
| 
 | ||
| ### Проверка синтаксиса
 | ||
| 
 | ||
| ```bash
 | ||
| # Lint проверка всех ролей
 | ||
| make role lint
 | ||
| 
 | ||
| # Lint проверка конкретной роли
 | ||
| ansible-lint roles/my-role/
 | ||
| 
 | ||
| # Проверка синтаксиса YAML
 | ||
| ansible-playbook --syntax-check roles/my-role/tasks/main.yml
 | ||
| ```
 | ||
| 
 | ||
| ### Проверка переменных
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверка переменных роли
 | ||
| ansible-inventory --list -i inventory/hosts.ini
 | ||
| 
 | ||
| # Проверка переменных для конкретного хоста
 | ||
| ansible-inventory --host web1.example.com -i inventory/hosts.ini
 | ||
| 
 | ||
| # Проверка переменных группы
 | ||
| ansible-inventory --host web_servers -i inventory/hosts.ini
 | ||
| ```
 | ||
| 
 | ||
| ### Тестирование ролей
 | ||
| 
 | ||
| ```bash
 | ||
| # Тестирование с verbose выводом
 | ||
| ansible-playbook -i inventory/hosts.ini site.yml -vvv
 | ||
| 
 | ||
| # Тестирование конкретной роли
 | ||
| ansible-playbook -i inventory/hosts.ini site.yml --tags my-role
 | ||
| 
 | ||
| # Тестирование с dry-run
 | ||
| ansible-playbook -i inventory/hosts.ini site.yml --check
 | ||
| ```
 | ||
| 
 | ||
| ## 🚨 Алерты и уведомления
 | ||
| 
 | ||
| ### Настройка алертов
 | ||
| 
 | ||
| ```bash
 | ||
| #!/bin/bash
 | ||
| # scripts/monitor.sh
 | ||
| # Скрипт мониторинга AnsibleLab
 | ||
| 
 | ||
| # Проверка Docker
 | ||
| if ! docker info >/dev/null 2>&1; then
 | ||
|     echo "❌ Docker не запущен"
 | ||
|     # Отправка уведомления
 | ||
|     curl -X POST -H 'Content-type: application/json' \
 | ||
|       --data '{"text":"❌ Docker не запущен в AnsibleLab"}' \
 | ||
|       $SLACK_WEBHOOK_URL
 | ||
| fi
 | ||
| 
 | ||
| # Проверка образов
 | ||
| if ! docker images | grep -q inecs/ansible-lab; then
 | ||
|     echo "❌ Образы AnsibleLab не найдены"
 | ||
|     # Отправка уведомления
 | ||
|     curl -X POST -H 'Content-type: application/json' \
 | ||
|       --data '{"text":"❌ Образы AnsibleLab не найдены"}' \
 | ||
|       $SLACK_WEBHOOK_URL
 | ||
| fi
 | ||
| 
 | ||
| # Проверка preset'ов
 | ||
| if [ ! -d "molecule/presets" ]; then
 | ||
|     echo "❌ Директория preset'ов не найдена"
 | ||
|     # Отправка уведомления
 | ||
|     curl -X POST -H 'Content-type: application/json' \
 | ||
|       --data '{"text":"❌ Директория preset'ов не найдена"}' \
 | ||
|       $SLACK_WEBHOOK_URL
 | ||
| fi
 | ||
| 
 | ||
| echo "✅ Мониторинг завершен"
 | ||
| ```
 | ||
| 
 | ||
| ### Настройка cron для мониторинга
 | ||
| 
 | ||
| ```bash
 | ||
| # Добавление в crontab
 | ||
| crontab -e
 | ||
| 
 | ||
| # Проверка каждые 5 минут
 | ||
| */5 * * * * /path/to/scripts/monitor.sh
 | ||
| 
 | ||
| # Проверка каждый час
 | ||
| 0 * * * * /path/to/scripts/monitor.sh
 | ||
| 
 | ||
| # Проверка каждый день в 9:00
 | ||
| 0 9 * * * /path/to/scripts/monitor.sh
 | ||
| ```
 | ||
| 
 | ||
| ## 📈 Метрики и отчеты
 | ||
| 
 | ||
| ### Сбор метрик
 | ||
| 
 | ||
| ```bash
 | ||
| #!/bin/bash
 | ||
| # scripts/collect-metrics.sh
 | ||
| # Сбор метрик AnsibleLab
 | ||
| 
 | ||
| echo "📊 Сбор метрик AnsibleLab..."
 | ||
| 
 | ||
| # Создание директории для метрик
 | ||
| mkdir -p metrics
 | ||
| 
 | ||
| # Метрики Docker
 | ||
| echo "=== Docker Metrics ===" > metrics/docker.txt
 | ||
| docker info >> metrics/docker.txt
 | ||
| docker images >> metrics/docker.txt
 | ||
| docker ps -a >> metrics/docker.txt
 | ||
| 
 | ||
| # Метрики системы
 | ||
| echo "=== System Metrics ===" > metrics/system.txt
 | ||
| df -h >> metrics/system.txt
 | ||
| free -h >> metrics/system.txt
 | ||
| uptime >> metrics/system.txt
 | ||
| 
 | ||
| # Метрики Ansible
 | ||
| echo "=== Ansible Metrics ===" > metrics/ansible.txt
 | ||
| ansible --version >> metrics/ansible.txt
 | ||
| ansible-galaxy list >> metrics/ansible.txt
 | ||
| 
 | ||
| # Метрики ролей
 | ||
| echo "=== Roles Metrics ===" > metrics/roles.txt
 | ||
| find roles/ -name "main.yml" -path "*/tasks/*" | wc -l >> metrics/roles.txt
 | ||
| ls -la roles/ >> metrics/roles.txt
 | ||
| 
 | ||
| echo "✅ Метрики собраны"
 | ||
| ```
 | ||
| 
 | ||
| ### Генерация отчетов
 | ||
| 
 | ||
| ```bash
 | ||
| #!/bin/bash
 | ||
| # scripts/generate-report.sh
 | ||
| # Генерация отчета о состоянии AnsibleLab
 | ||
| 
 | ||
| echo "📋 Генерация отчета..."
 | ||
| 
 | ||
| # Создание директории для отчетов
 | ||
| mkdir -p reports
 | ||
| 
 | ||
| # Отчет о Docker
 | ||
| cat > reports/docker-report.md << EOF
 | ||
| # Docker Report
 | ||
| 
 | ||
| ## Образы
 | ||
| \`\`\`
 | ||
| $(docker images | grep inecs/ansible-lab)
 | ||
| \`\`\`
 | ||
| 
 | ||
| ## Контейнеры
 | ||
| \`\`\`
 | ||
| $(docker ps -a)
 | ||
| \`\`\`
 | ||
| 
 | ||
| ## Сети
 | ||
| \`\`\`
 | ||
| $(docker network ls)
 | ||
| \`\`\`
 | ||
| EOF
 | ||
| 
 | ||
| # Отчет о ролях
 | ||
| cat > reports/roles-report.md << EOF
 | ||
| # Roles Report
 | ||
| 
 | ||
| ## Количество ролей
 | ||
| $(find roles/ -name "main.yml" -path "*/tasks/*" | wc -l)
 | ||
| 
 | ||
| ## Список ролей
 | ||
| \`\`\`
 | ||
| $(find roles/ -name "main.yml" -path "*/tasks/*" | sed 's|roles/||; s|/tasks/main.yml||')
 | ||
| \`\`\`
 | ||
| EOF
 | ||
| 
 | ||
| # Отчет о preset'ах
 | ||
| cat > reports/presets-report.md << EOF
 | ||
| # Presets Report
 | ||
| 
 | ||
| ## Количество preset'ов
 | ||
| $(ls -1 molecule/presets/*.yml | wc -l)
 | ||
| 
 | ||
| ## Список preset'ов
 | ||
| \`\`\`
 | ||
| $(ls -1 molecule/presets/*.yml | sed 's|molecule/presets/||g' | sed 's|\.yml||g')
 | ||
| \`\`\`
 | ||
| EOF
 | ||
| 
 | ||
| echo "✅ Отчеты сгенерированы"
 | ||
| ```
 | ||
| 
 | ||
| ## 🔍 Отладка проблем
 | ||
| 
 | ||
| ### Общие проблемы
 | ||
| 
 | ||
| #### 1. Docker не запускается
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверка статуса Docker
 | ||
| sudo systemctl status docker
 | ||
| 
 | ||
| # Запуск Docker
 | ||
| sudo systemctl start docker
 | ||
| 
 | ||
| # Проверка логов
 | ||
| sudo journalctl -u docker.service
 | ||
| ```
 | ||
| 
 | ||
| #### 2. Образы не собираются
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверка builder'а
 | ||
| make docker diagnose
 | ||
| 
 | ||
| # Сброс builder'а
 | ||
| make docker reset-builder
 | ||
| 
 | ||
| # Очистка кеша
 | ||
| make docker clean
 | ||
| ```
 | ||
| 
 | ||
| #### 3. Тесты не проходят
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверка preset'ов
 | ||
| make presets list
 | ||
| 
 | ||
| # Проверка инвентори
 | ||
| cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini
 | ||
| 
 | ||
| # Проверка логов
 | ||
| docker logs ansible-controller
 | ||
| ```
 | ||
| 
 | ||
| #### 4. Роли не работают
 | ||
| 
 | ||
| ```bash
 | ||
| # Проверка синтаксиса
 | ||
| make role lint
 | ||
| 
 | ||
| # Проверка переменных
 | ||
| ansible-inventory --list -i inventory/hosts.ini
 | ||
| 
 | ||
| # Тестирование с verbose
 | ||
| ansible-playbook -i inventory/hosts.ini site.yml -vvv
 | ||
| ```
 | ||
| 
 | ||
| ### Логи для отладки
 | ||
| 
 | ||
| ```bash
 | ||
| # Сбор всех логов
 | ||
| mkdir -p debug-logs
 | ||
| 
 | ||
| # Логи Docker
 | ||
| docker info > debug-logs/docker-info.txt
 | ||
| docker images > debug-logs/docker-images.txt
 | ||
| docker ps -a > debug-logs/docker-containers.txt
 | ||
| 
 | ||
| # Логи системы
 | ||
| df -h > debug-logs/disk-usage.txt
 | ||
| free -h > debug-logs/memory-usage.txt
 | ||
| ps aux > debug-logs/processes.txt
 | ||
| 
 | ||
| # Логи Ansible
 | ||
| ansible --version > debug-logs/ansible-version.txt
 | ||
| ansible-galaxy list > debug-logs/ansible-galaxy.txt
 | ||
| 
 | ||
| # Логи ролей
 | ||
| find roles/ -name "*.yml" -exec ansible-playbook --syntax-check {} \; > debug-logs/roles-syntax.txt
 | ||
| ```
 | ||
| 
 | ||
| ## 📊 Дашборд мониторинга
 | ||
| 
 | ||
| ### Простой дашборд
 | ||
| 
 | ||
| ```bash
 | ||
| #!/bin/bash
 | ||
| # scripts/dashboard.sh
 | ||
| # Простой дашборд мониторинга
 | ||
| 
 | ||
| echo "📊 AnsibleLab Dashboard"
 | ||
| echo "=========================="
 | ||
| 
 | ||
| # Статус Docker
 | ||
| if docker info >/dev/null 2>&1; then
 | ||
|     echo "✅ Docker: Запущен"
 | ||
| else
 | ||
|     echo "❌ Docker: Не запущен"
 | ||
| fi
 | ||
| 
 | ||
| # Количество образов
 | ||
| IMAGES=$(docker images | grep inecs/ansible-lab | wc -l)
 | ||
| echo "📦 Образы: $IMAGES"
 | ||
| 
 | ||
| # Количество ролей
 | ||
| ROLES=$(find roles/ -name "main.yml" -path "*/tasks/*" | wc -l)
 | ||
| echo "🎭 Роли: $ROLES"
 | ||
| 
 | ||
| # Количество preset'ов
 | ||
| PRESETS=$(ls -1 molecule/presets/*.yml 2>/dev/null | wc -l)
 | ||
| echo "⚙️  Preset'ы: $PRESETS"
 | ||
| 
 | ||
| # Использование диска
 | ||
| DISK=$(df -h . | tail -1 | awk '{print $5}')
 | ||
| echo "💾 Диск: $DISK"
 | ||
| 
 | ||
| # Использование памяти
 | ||
| MEMORY=$(free -h | grep Mem | awk '{print $3 "/" $2}')
 | ||
| echo "🧠 Память: $MEMORY"
 | ||
| 
 | ||
| echo "=========================="
 | ||
| ```
 | ||
| 
 | ||
| ### Веб-дашборд
 | ||
| 
 | ||
| ```html
 | ||
| <!DOCTYPE html>
 | ||
| <html>
 | ||
| <head>
 | ||
|     <title>AnsibleLab Dashboard</title>
 | ||
|     <meta charset="utf-8">
 | ||
|     <meta name="viewport" content="width=device-width, initial-scale=1">
 | ||
|     <style>
 | ||
|         body { font-family: Arial, sans-serif; margin: 20px; }
 | ||
|         .status { padding: 10px; margin: 10px 0; border-radius: 5px; }
 | ||
|         .success { background-color: #d4edda; color: #155724; }
 | ||
|         .error { background-color: #f8d7da; color: #721c24; }
 | ||
|         .info { background-color: #d1ecf1; color: #0c5460; }
 | ||
|     </style>
 | ||
| </head>
 | ||
| <body>
 | ||
|     <h1>📊 AnsibleLab Dashboard</h1>
 | ||
|     
 | ||
|     <div id="status"></div>
 | ||
|     
 | ||
|     <script>
 | ||
|         function updateStatus() {
 | ||
|             fetch('/api/status')
 | ||
|                 .then(response => response.json())
 | ||
|                 .then(data => {
 | ||
|                     const statusDiv = document.getElementById('status');
 | ||
|                     statusDiv.innerHTML = `
 | ||
|                         <div class="status ${data.docker ? 'success' : 'error'}">
 | ||
|                             Docker: ${data.docker ? '✅ Запущен' : '❌ Не запущен'}
 | ||
|                         </div>
 | ||
|                         <div class="status info">
 | ||
|                             Образы: ${data.images}
 | ||
|                         </div>
 | ||
|                         <div class="status info">
 | ||
|                             Роли: ${data.roles}
 | ||
|                         </div>
 | ||
|                         <div class="status info">
 | ||
|                             Preset'ы: ${data.presets}
 | ||
|                         </div>
 | ||
|                     `;
 | ||
|                 })
 | ||
|                 .catch(error => {
 | ||
|                     console.error('Error:', error);
 | ||
|                 });
 | ||
|         }
 | ||
|         
 | ||
|         // Обновление каждые 30 секунд
 | ||
|         setInterval(updateStatus, 30000);
 | ||
|         updateStatus();
 | ||
|     </script>
 | ||
| </body>
 | ||
| </html>
 | ||
| ```
 | ||
| 
 | ||
| ## 🔧 Автоматизация мониторинга
 | ||
| 
 | ||
| ### Настройка мониторинга
 | ||
| 
 | ||
| ```bash
 | ||
| #!/bin/bash
 | ||
| # scripts/setup-monitoring.sh
 | ||
| # Настройка мониторинга AnsibleLab
 | ||
| 
 | ||
| echo "🔧 Настройка мониторинга..."
 | ||
| 
 | ||
| # Создание директорий
 | ||
| mkdir -p {scripts,metrics,reports,debug-logs}
 | ||
| 
 | ||
| # Создание скрипта мониторинга
 | ||
| cat > scripts/monitor.sh << 'EOF'
 | ||
| #!/bin/bash
 | ||
| # Скрипт мониторинга AnsibleLab
 | ||
| 
 | ||
| # Проверка Docker
 | ||
| if ! docker info >/dev/null 2>&1; then
 | ||
|     echo "❌ Docker не запущен"
 | ||
|     exit 1
 | ||
| fi
 | ||
| 
 | ||
| # Проверка образов
 | ||
| if ! docker images | grep -q inecs/ansible-lab; then
 | ||
|     echo "❌ Образы AnsibleLab не найдены"
 | ||
|     exit 1
 | ||
| fi
 | ||
| 
 | ||
| echo "✅ Мониторинг завершен"
 | ||
| EOF
 | ||
| 
 | ||
| # Создание скрипта сбора метрик
 | ||
| cat > scripts/collect-metrics.sh << 'EOF'
 | ||
| #!/bin/bash
 | ||
| # Сбор метрик AnsibleLab
 | ||
| 
 | ||
| echo "📊 Сбор метрик..."
 | ||
| 
 | ||
| # Метрики Docker
 | ||
| docker info > metrics/docker-info.txt
 | ||
| docker images > metrics/docker-images.txt
 | ||
| 
 | ||
| # Метрики системы
 | ||
| df -h > metrics/disk-usage.txt
 | ||
| free -h > metrics/memory-usage.txt
 | ||
| 
 | ||
| echo "✅ Метрики собраны"
 | ||
| EOF
 | ||
| 
 | ||
| # Создание скрипта генерации отчетов
 | ||
| cat > scripts/generate-report.sh << 'EOF'
 | ||
| #!/bin/bash
 | ||
| # Генерация отчета о состоянии AnsibleLab
 | ||
| 
 | ||
| echo "📋 Генерация отчета..."
 | ||
| 
 | ||
| # Отчет о Docker
 | ||
| cat > reports/docker-report.md << EOL
 | ||
| # Docker Report
 | ||
| 
 | ||
| ## Образы
 | ||
| \`\`\`
 | ||
| $(docker images | grep inecs/ansible-lab)
 | ||
| \`\`\`
 | ||
| EOL
 | ||
| 
 | ||
| echo "✅ Отчеты сгенерированы"
 | ||
| EOF
 | ||
| 
 | ||
| # Делаем скрипты исполняемыми
 | ||
| chmod +x scripts/*.sh
 | ||
| 
 | ||
| echo "✅ Мониторинг настроен"
 | ||
| ```
 | ||
| 
 | ||
| ---
 | ||
| 
 | ||
| **Автор:** Сергей Антропов  
 | ||
| **Сайт:** https://devops.org.ru
 |