- Обновлено название проекта во всех файлах - Изменена документация (README.md, docs/*.md) - Обновлены конфигурационные файлы (Makefile, env.example) - Изменены CI/CD файлы (GitHub Actions, Azure DevOps, Jenkins) - Обновлены скрипты и Dockerfile - Изменено название в molecule.yml и dockerfiles/README.md Все ссылки и упоминания проекта теперь используют название AnsibleLab
14 KiB
14 KiB
Мониторинг и диагностика AnsibleLab
Автор: Сергей Антропов
Сайт: https://devops.org.ru
🔍 Диагностика Docker
Проверка состояния Docker
# Проверка статуса Docker
docker info
# Проверка запущенных контейнеров
docker ps -a
# Проверка образов
docker images | grep inecs/ansible-lab
# Проверка сетей
docker network ls
Диагностика buildx проблем
# Диагностика buildx
make docker diagnose
# Проверка builder'а
make docker setup-builder
# Сброс builder'а при проблемах
make docker reset-builder
Логи Docker
# Логи Docker daemon
sudo journalctl -u docker.service
# Логи конкретного контейнера
docker logs ansible-controller
# Логи с временными метками
docker logs -t ansible-controller
# Следить за логами в реальном времени
docker logs -f ansible-controller
🧪 Диагностика тестирования
Проверка preset'ов
# Список доступных preset'ов
make presets list
# Информация о конкретном preset'е
make presets info PRESET=default
# Проверка файлов preset'ов
ls -la molecule/presets/
Проверка инвентори
# Проверка тестового инвентори
cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini
# Проверка продакшн инвентори
cat inventory/hosts.ini
# Тестирование подключения
ansible all -i inventory/hosts.ini -m ping
Логи тестирования
# Логи Molecule
ls -la molecule/default/.molecule/
# Логи конкретного теста
cat molecule/default/.molecule/test/ansible.log
# Логи Ansible
cat molecule/default/.molecule/test/ansible.log | grep ERROR
📊 Мониторинг производительности
Мониторинг ресурсов
# Использование CPU и памяти
docker stats
# Использование диска
df -h
# Использование памяти
free -h
# Процессы Docker
ps aux | grep docker
Мониторинг сети
# Статистика сети
docker network inspect labnet
# Подключения к портам
netstat -tulpn | grep docker
# Проверка DNS
nslookup docker.io
Мониторинг логов
# Логи системы
sudo journalctl -f
# Логи Docker
sudo journalctl -u docker.service -f
# Логи Ansible
tail -f /var/log/ansible.log
🔧 Диагностика ролей
Проверка синтаксиса
# Lint проверка всех ролей
make role lint
# Lint проверка конкретной роли
ansible-lint roles/my-role/
# Проверка синтаксиса YAML
ansible-playbook --syntax-check roles/my-role/tasks/main.yml
Проверка переменных
# Проверка переменных роли
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
Тестирование ролей
# Тестирование с 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
🚨 Алерты и уведомления
Настройка алертов
#!/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 для мониторинга
# Добавление в 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
📈 Метрики и отчеты
Сбор метрик
#!/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 "✅ Метрики собраны"
Генерация отчетов
#!/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 не запускается
# Проверка статуса Docker
sudo systemctl status docker
# Запуск Docker
sudo systemctl start docker
# Проверка логов
sudo journalctl -u docker.service
2. Образы не собираются
# Проверка builder'а
make docker diagnose
# Сброс builder'а
make docker reset-builder
# Очистка кеша
make docker clean
3. Тесты не проходят
# Проверка preset'ов
make presets list
# Проверка инвентори
cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini
# Проверка логов
docker logs ansible-controller
4. Роли не работают
# Проверка синтаксиса
make role lint
# Проверка переменных
ansible-inventory --list -i inventory/hosts.ini
# Тестирование с verbose
ansible-playbook -i inventory/hosts.ini site.yml -vvv
Логи для отладки
# Сбор всех логов
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
📊 Дашборд мониторинга
Простой дашборд
#!/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 "=========================="
Веб-дашборд
<!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>
🔧 Автоматизация мониторинга
Настройка мониторинга
#!/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