docs: обновлен monitoring.md с актуальной информацией
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled

- Убраны устаревшие скрипты мониторинга и алертов
- Добавлены реальные команды для диагностики AnsibleLab
- Упрощена структура документа
- Добавлены команды для macOS и Linux
- Удалены неактуальные разделы (дашборд, автоматизация)
- Добавлен раздел 'Решение проблем' с практичными решениями
- Добавлена информация о проверке preset'ов и контейнеров Molecule

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-26 01:20:13 +03:00
parent afa0be02fd
commit 3482980c3d

View File

@@ -2,6 +2,7 @@
**Автор:** Сергей Антропов **Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru **Сайт:** https://devops.org.ru
**Версия:** 2.0.0
## 🔍 Диагностика Docker ## 🔍 Диагностика Docker
@@ -14,31 +15,37 @@ docker info
# Проверка запущенных контейнеров # Проверка запущенных контейнеров
docker ps -a docker ps -a
# Проверка образов # Проверка образов AnsibleLab
docker images | grep inecs/ansible-lab docker images | grep inecs/ansible-lab
# Проверка сетей # Проверка сетей
docker network ls docker network ls | grep labnet
``` ```
### Диагностика buildx проблем ### Диагностика buildx проблем
```bash ```bash
# Диагностика buildx # Полная диагностика buildx
make docker diagnose make docker diagnose
# Проверка builder'а # Проверка builder'а
make docker setup-builder make docker check-builder
# Сброс builder'а при проблемах # Сброс builder'а при проблемах
make docker reset-builder make docker reset-builder
# Настройка builder'а
make docker setup-builder
``` ```
### Логи Docker ### Логи Docker
```bash ```bash
# Логи Docker daemon # Логи Docker daemon (Linux)
sudo journalctl -u docker.service sudo journalctl -u docker.service -f
# Логи Docker (macOS)
tail -f ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
# Логи конкретного контейнера # Логи конкретного контейнера
docker logs ansible-controller docker logs ansible-controller
@@ -48,6 +55,9 @@ docker logs -t ansible-controller
# Следить за логами в реальном времени # Следить за логами в реальном времени
docker logs -f ansible-controller docker logs -f ansible-controller
# Последние 100 строк логов
docker logs --tail 100 ansible-controller
``` ```
## 🧪 Диагностика тестирования ## 🧪 Диагностика тестирования
@@ -63,76 +73,91 @@ make presets info PRESET=default
# Проверка файлов preset'ов # Проверка файлов preset'ов
ls -la molecule/presets/ ls -la molecule/presets/
# Проверка всех preset'ов
find molecule/presets -name "*.yml" -exec echo "=== {} ===" \; -exec cat {} \;
``` ```
### Проверка инвентори ### Проверка инвентори
```bash ```bash
# Проверка тестового инвентори
cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini
# Проверка продакшн инвентори # Проверка продакшн инвентори
cat inventory/hosts.ini cat inventory/hosts.ini
# Тестирование подключения # Тестирование подключения
ansible all -i inventory/hosts.ini -m ping ansible all -i inventory/hosts.ini -m ping
# Проверка доступности хостов
ansible all -i inventory/hosts.ini -m shell -a "uname -a"
``` ```
### Логи тестирования ### Логи тестирования
```bash ```bash
# Логи Molecule # Проверка созданных контейнеров
ls -la molecule/default/.molecule/ docker ps -a --filter "network=labnet"
# Логи конкретного теста # Логи всех контейнеров Molecule
cat molecule/default/.molecule/test/ansible.log docker ps -a --filter "network=labnet" --format "{{.Names}}" | while read name; do
echo "=== $name ==="
docker logs $name 2>&1 | tail -20
done
# Логи Ansible # Очистка контейнеров Molecule
cat molecule/default/.molecule/test/ansible.log | grep ERROR make clean-containers
``` ```
## 📊 Мониторинг производительности ## 📊 Мониторинг ресурсов
### Мониторинг ресурсов ### Мониторинг Docker
```bash ```bash
# Использование CPU и памяти # Статистика использования ресурсов контейнерами
docker stats docker stats --no-stream
# Использование диска Docker
docker system df
# Детальная информация о диске
docker system df -v
# Очистка неиспользуемых ресурсов
docker system prune -a
```
### Мониторинг системы
```bash
# Использование диска # Использование диска
df -h df -h
# Использование памяти # Использование памяти
free -h free -h # Linux
vm_stat # macOS
# Процессы Docker # Процессы Docker
ps aux | grep docker ps aux | grep docker
# CPU и память в реальном времени
top
# или
htop
``` ```
### Мониторинг сети ### Мониторинг сети
```bash ```bash
# Статистика сети # Инспекция сети labnet
docker network inspect labnet docker network inspect labnet
# Подключения к портам # Статистика сети
docker network inspect labnet --format '{{json .Containers}}' | jq
# Просмотр портов
netstat -tulpn | grep docker netstat -tulpn | grep docker
# Проверка DNS # Просмотр установленных соединений
nslookup docker.io ss -tulpn | grep docker
```
### Мониторинг логов
```bash
# Логи системы
sudo journalctl -f
# Логи Docker
sudo journalctl -u docker.service -f
# Логи Ansible
tail -f /var/log/ansible.log
``` ```
## 🔧 Диагностика ролей ## 🔧 Диагностика ролей
@@ -144,447 +169,253 @@ tail -f /var/log/ansible.log
make role lint make role lint
# Lint проверка конкретной роли # Lint проверка конкретной роли
ansible-lint roles/my-role/ make role lint docker
make role lint devops
make role lint ping
# Проверка синтаксиса YAML # Проверка синтаксиса файлов роли
ansible-playbook --syntax-check roles/my-role/tasks/main.yml ansible-playbook --syntax-check roles/docker/tasks/main.yml
``` ```
### Проверка переменных ### Проверка переменных
```bash ```bash
# Проверка переменных роли # Просмотр всех переменных для хоста
ansible-inventory --list -i inventory/hosts.ini ansible-inventory --list -i inventory/hosts.ini
# Проверка переменных для конкретного хоста # Проверка переменных конкретного хоста
ansible-inventory --host web1.example.com -i inventory/hosts.ini ansible-inventory --host web1.example.com -i inventory/hosts.ini
# Проверка переменных группы # Просмотр всех групп
ansible-inventory --host web_servers -i inventory/hosts.ini ansible-inventory --list | jq 'keys'
``` ```
### Тестирование ролей ### Тестирование ролей
```bash ```bash
# Тестирование с verbose выводом # Тестирование с подробным выводом
ansible-playbook -i inventory/hosts.ini site.yml -vvv make role test 2>&1 | tee test-output.log
# Тестирование конкретной роли # Тестирование конкретной роли
ansible-playbook -i inventory/hosts.ini site.yml --tags my-role make role test docker
# Тестирование с dry-run # Тестирование с minimal preset
ansible-playbook -i inventory/hosts.ini site.yml --check make role test minimal
# Просмотр результатов теста
docker logs $(docker ps -aq --filter "network=labnet" | head -1)
``` ```
## 🚨 Алерты и уведомления ## 🚨 Решение проблем
### Настройка алертов ### Проблемы с Docker
#### Docker не запускается
```bash ```bash
#!/bin/bash # Проверка статуса (Linux)
# 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 sudo systemctl status docker
# Запуск Docker # Запуск Docker (Linux)
sudo systemctl start docker sudo systemctl start docker
# Проверка логов # Проверка логов (Linux)
sudo journalctl -u docker.service sudo journalctl -u docker.service -f
# Перезапуск Docker Desktop (macOS/Windows)
# Use Docker Desktop interface
``` ```
#### 2. Образы не собираются #### Buildx зависает
```bash ```bash
# Проверка builder'а # Диагностика
make docker diagnose make docker diagnose
# Сброс builder'а # Сброс builder'а
make docker reset-builder make docker reset-builder
# Очистка кеша # Очистка контейнеров buildkit
make docker clean docker ps -a --filter "name=buildx_buildkit" --format "{{.Names}}" | xargs -r docker rm -f
``` ```
#### 3. Тесты не проходят #### Образы не собираются
```bash ```bash
# Проверка preset'ов # Очистка builder'а
make presets list make docker clean-builder
# Проверка инвентори # Пересоздание builder'а
cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini make docker setup-builder
# Проверка логов # Полная пересборка
docker logs ansible-controller make docker rebuild
``` ```
#### 4. Роли не работают ### Проблемы с тестированием
#### Preset'ы не работают
```bash
# Проверка preset файлов
ls -la molecule/presets/
# Проверка синтаксиса preset'а
yamllint molecule/presets/default.yml
# Информация о preset'е
make presets info PRESET=default
```
#### Контейнеры не запускаются
```bash
# Проверка созданных контейнеров
docker ps -a --filter "network=labnet"
# Логи контейнера
docker logs <container-name>
# Перезапуск контейнера
docker restart <container-name>
# Удаление всех контейнеров Molecule
make clean-containers
```
#### Роли не выполняются
```bash ```bash
# Проверка синтаксиса # Проверка синтаксиса
make role lint make role lint
# Тест с verbose выводом
ansible-playbook -i inventory/hosts.ini site.yml -vvv
# Проверка переменных # Проверка переменных
ansible-inventory --list -i inventory/hosts.ini ansible-inventory --list -i inventory/hosts.ini
# Тестирование с verbose # Dry-run без выполнения
ansible-playbook -i inventory/hosts.ini site.yml --check
```
### Проблемы с ролями
#### Синтаксические ошибки
```bash
# Lint проверка
make role lint
# Проверка конкретной роли
ansible-lint roles/docker/
# Проверка YAML синтаксиса
yamllint roles/docker/tasks/main.yml
```
#### Логика не работает
```bash
# Проверка переменных
ansible-playbook -i inventory/hosts.ini site.yml --list-tags
ansible-playbook -i inventory/hosts.ini site.yml --list-tasks
# Выполнение конкретной задачи
ansible-playbook -i inventory/hosts.ini site.yml --tags docker
# Debug режим
ansible-playbook -i inventory/hosts.ini site.yml -vvv ansible-playbook -i inventory/hosts.ini site.yml -vvv
``` ```
### Логи для отладки ## 📈 Сбор диагностической информации
### Скрипт диагностики
```bash ```bash
# Сбор всех логов #!/bin/bash
# Создание отчета для диагностики
echo "🔍 Сбор диагностической информации..."
# Создание директории для логов
mkdir -p debug-logs mkdir -p debug-logs
# Логи Docker # Docker информация
docker info > debug-logs/docker-info.txt docker info > debug-logs/docker-info.txt 2>&1
docker images > debug-logs/docker-images.txt docker images > debug-logs/docker-images.txt 2>&1
docker ps -a > debug-logs/docker-containers.txt docker ps -a > debug-logs/docker-containers.txt 2>&1
docker network ls > debug-logs/docker-networks.txt 2>&1
# Логи системы # Системная информация
df -h > debug-logs/disk-usage.txt df -h > debug-logs/disk-usage.txt 2>&1
free -h > debug-logs/memory-usage.txt free -h > debug-logs/memory-usage.txt 2>&1 2>/dev/null || vm_stat > debug-logs/memory-usage.txt 2>&1
ps aux > debug-logs/processes.txt ps aux | grep docker > debug-logs/docker-processes.txt 2>&1
# Логи Ansible # Информация о проекте
ansible --version > debug-logs/ansible-version.txt ls -la roles/ > debug-logs/roles-list.txt 2>&1
ansible-galaxy list > debug-logs/ansible-galaxy.txt ls -la molecule/presets/ > debug-logs/presets-list.txt 2>&1
cat inventory/hosts.ini > debug-logs/inventory.txt 2>&1
# Логи ролей # Создание архива
find roles/ -name "*.yml" -exec ansible-playbook --syntax-check {} \; > debug-logs/roles-syntax.txt tar -czf debug-logs-$(date +%Y%m%d-%H%M%S).tar.gz debug-logs/
echo "✅ Диагностическая информация собрана в: debug-logs-$(date +%Y%m%d-%H%M%S).tar.gz"
``` ```
## 📊 Дашборд мониторинга ### Команды для быстрой диагностики
### Простой дашборд
```bash ```bash
#!/bin/bash # Быстрая проверка состояния
# scripts/dashboard.sh echo "=== Docker Status ===" && docker info | head -5
# Простой дашборд мониторинга echo "=== AnsibleLab Images ===" && docker images | grep inecs/ansible-lab
echo "=== Roles ===" && ls -1 roles/ | grep -v "\.yml"
echo "📊 AnsibleLab Dashboard" echo "=== Presets ===" && ls -1 molecule/presets/*.yml 2>/dev/null | wc -l
echo "==========================" echo "=== Disk Usage ===" && df -h . | tail -1
# Статус 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 ```bash
#!/bin/bash # Очистка контейнеров Molecule
# scripts/setup-monitoring.sh make clean-containers
# Настройка мониторинга AnsibleLab
echo "🔧 Настройка мониторинга..." # Очистка Docker образов AnsibleLab
make docker clean
# Создание директорий # Очистка всего Docker
mkdir -p {scripts,metrics,reports,debug-logs} make docker purge
# Создание скрипта мониторинга # Очистка buildx
cat > scripts/monitor.sh << 'EOF' make docker clean-builder
#!/bin/bash ```
# Скрипт мониторинга AnsibleLab
# Проверка Docker ### Проверка
if ! docker info >/dev/null 2>&1; then
echo "❌ Docker не запущен"
exit 1
fi
# Проверка образов ```bash
if ! docker images | grep -q inecs/ansible-lab; then # Проверка наличия образов
echo "❌ Образы AnsibleLab не найдены" make custom-images check
exit 1
fi
echo "✅ Мониторинг завершен" # Проверка builder'а
EOF make docker check-builder
# Создание скрипта сбора метрик # Информация об образах
cat > scripts/collect-metrics.sh << 'EOF' make docker info
#!/bin/bash ```
# Сбор метрик AnsibleLab
echo "📊 Сбор метрик..." ### Тестирование
# Метрики Docker ```bash
docker info > metrics/docker-info.txt # Быстрый тест
docker images > metrics/docker-images.txt make role test minimal
# Метрики системы # Полный тест
df -h > metrics/disk-usage.txt make role test all-images
free -h > metrics/memory-usage.txt
echo "✅ Метрики собраны" # Тест с конкретным preset'ом
EOF make role test docker-full
# Создание скрипта генерации отчетов
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 "✅ Мониторинг настроен"
``` ```
--- ---