Files
DevOpsLab/docs/monitoring.md
Сергей Антропов 94560ffaaa 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 с новыми командами автоматизации
- Улучшена навигация по документации
2025-10-25 18:11:36 +03:00

14 KiB
Raw Blame History

Мониторинг и диагностика AnsibleTemplate

Автор: Сергей Антропов
Сайт: 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
# Скрипт мониторинга 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 для мониторинга

# Добавление в 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
# Сбор метрик 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 "✅ Метрики собраны"

Генерация отчетов

#!/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 не запускается

# Проверка статуса 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 "📊 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 "=========================="

Веб-дашборд

<!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>

🔧 Автоматизация мониторинга

Настройка мониторинга

#!/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