feat: Полная переработка документации и структуры проекта

- Переписан главный 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 с новыми командами автоматизации
- Улучшена навигация по документации
This commit is contained in:
Сергей Антропов
2025-10-25 18:11:36 +03:00
parent 1a4e52aab2
commit 94560ffaaa
19 changed files with 6986 additions and 270 deletions

593
docs/monitoring.md Normal file
View File

@@ -0,0 +1,593 @@
# Мониторинг и диагностика 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