- Переписан главный README.md с подробной навигацией - Создана структурированная документация в docs/: - getting-started.md - быстрый старт - creating-roles.md - создание ролей - cicd-setup.md - настройка CI/CD - monitoring.md - мониторинг и диагностика - site-yml-guide.md - руководство по site.yml - molecule-guide.md - подробное руководство по Molecule - Переписан dockerfiles/README.md с детальным описанием всех образов - Перенесен deploy.yml из корня в roles/ для лучшей организации - Обновлен site.yml для импорта roles/deploy.yml - Добавлены fallback значения в create.yml для надежности - Созданы скрипты автоматизации: - update-playbooks.sh - обновление playbook'ов - generate-role-docs.sh - генерация документации - setup-cicd.sh - настройка CI/CD - Добавлен env.example с примерами переменных - Обновлен Makefile с новыми командами автоматизации - Улучшена навигация по документации
594 lines
14 KiB
Markdown
594 lines
14 KiB
Markdown
# Мониторинг и диагностика AnsibleTemplate
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** 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
|
||
# Скрипт мониторинга AnsibleTemplate
|
||
|
||
# Проверка Docker
|
||
if ! docker info >/dev/null 2>&1; then
|
||
echo "❌ Docker не запущен"
|
||
# Отправка уведомления
|
||
curl -X POST -H 'Content-type: application/json' \
|
||
--data '{"text":"❌ Docker не запущен в AnsibleTemplate"}' \
|
||
$SLACK_WEBHOOK_URL
|
||
fi
|
||
|
||
# Проверка образов
|
||
if ! docker images | grep -q inecs/ansible-lab; then
|
||
echo "❌ Образы AnsibleTemplate не найдены"
|
||
# Отправка уведомления
|
||
curl -X POST -H 'Content-type: application/json' \
|
||
--data '{"text":"❌ Образы AnsibleTemplate не найдены"}' \
|
||
$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
|
||
# Сбор метрик AnsibleTemplate
|
||
|
||
echo "📊 Сбор метрик AnsibleTemplate..."
|
||
|
||
# Создание директории для метрик
|
||
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
|
||
# Генерация отчета о состоянии AnsibleTemplate
|
||
|
||
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 "📊 AnsibleTemplate 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>AnsibleTemplate 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>📊 AnsibleTemplate 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
|
||
# Настройка мониторинга AnsibleTemplate
|
||
|
||
echo "🔧 Настройка мониторинга..."
|
||
|
||
# Создание директорий
|
||
mkdir -p {scripts,metrics,reports,debug-logs}
|
||
|
||
# Создание скрипта мониторинга
|
||
cat > scripts/monitor.sh << 'EOF'
|
||
#!/bin/bash
|
||
# Скрипт мониторинга AnsibleTemplate
|
||
|
||
# Проверка Docker
|
||
if ! docker info >/dev/null 2>&1; then
|
||
echo "❌ Docker не запущен"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверка образов
|
||
if ! docker images | grep -q inecs/ansible-lab; then
|
||
echo "❌ Образы AnsibleTemplate не найдены"
|
||
exit 1
|
||
fi
|
||
|
||
echo "✅ Мониторинг завершен"
|
||
EOF
|
||
|
||
# Создание скрипта сбора метрик
|
||
cat > scripts/collect-metrics.sh << 'EOF'
|
||
#!/bin/bash
|
||
# Сбор метрик AnsibleTemplate
|
||
|
||
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
|
||
# Генерация отчета о состоянии AnsibleTemplate
|
||
|
||
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
|