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:
593
docs/monitoring.md
Normal file
593
docs/monitoring.md
Normal 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
|
||||
Reference in New Issue
Block a user