diff --git a/docs/monitoring.md b/docs/monitoring.md index 450eb1c..7d47bdc 100644 --- a/docs/monitoring.md +++ b/docs/monitoring.md @@ -1,7 +1,8 @@ # Мониторинг и диагностика AnsibleLab **Автор:** Сергей Антропов -**Сайт:** https://devops.org.ru +**Сайт:** https://devops.org.ru +**Версия:** 2.0.0 ## 🔍 Диагностика Docker @@ -14,31 +15,37 @@ docker info # Проверка запущенных контейнеров docker ps -a -# Проверка образов +# Проверка образов AnsibleLab docker images | grep inecs/ansible-lab # Проверка сетей -docker network ls +docker network ls | grep labnet ``` ### Диагностика buildx проблем ```bash -# Диагностика buildx +# Полная диагностика buildx make docker diagnose # Проверка builder'а -make docker setup-builder +make docker check-builder # Сброс builder'а при проблемах make docker reset-builder + +# Настройка builder'а +make docker setup-builder ``` ### Логи Docker ```bash -# Логи Docker daemon -sudo journalctl -u docker.service +# Логи Docker daemon (Linux) +sudo journalctl -u docker.service -f + +# Логи Docker (macOS) +tail -f ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log # Логи конкретного контейнера docker logs ansible-controller @@ -48,6 +55,9 @@ docker logs -t ansible-controller # Следить за логами в реальном времени docker logs -f ansible-controller + +# Последние 100 строк логов +docker logs --tail 100 ansible-controller ``` ## 🧪 Диагностика тестирования @@ -63,76 +73,91 @@ make presets info PRESET=default # Проверка файлов preset'ов ls -la molecule/presets/ + +# Проверка всех preset'ов +find molecule/presets -name "*.yml" -exec echo "=== {} ===" \; -exec cat {} \; ``` ### Проверка инвентори ```bash -# Проверка тестового инвентори -cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini - # Проверка продакшн инвентори cat inventory/hosts.ini # Тестирование подключения ansible all -i inventory/hosts.ini -m ping + +# Проверка доступности хостов +ansible all -i inventory/hosts.ini -m shell -a "uname -a" ``` ### Логи тестирования ```bash -# Логи Molecule -ls -la molecule/default/.molecule/ +# Проверка созданных контейнеров +docker ps -a --filter "network=labnet" -# Логи конкретного теста -cat molecule/default/.molecule/test/ansible.log +# Логи всех контейнеров Molecule +docker ps -a --filter "network=labnet" --format "{{.Names}}" | while read name; do + echo "=== $name ===" + docker logs $name 2>&1 | tail -20 +done -# Логи Ansible -cat molecule/default/.molecule/test/ansible.log | grep ERROR +# Очистка контейнеров Molecule +make clean-containers ``` -## 📊 Мониторинг производительности +## 📊 Мониторинг ресурсов -### Мониторинг ресурсов +### Мониторинг Docker ```bash -# Использование CPU и памяти -docker stats +# Статистика использования ресурсов контейнерами +docker stats --no-stream +# Использование диска Docker +docker system df + +# Детальная информация о диске +docker system df -v + +# Очистка неиспользуемых ресурсов +docker system prune -a +``` + +### Мониторинг системы + +```bash # Использование диска df -h # Использование памяти -free -h +free -h # Linux +vm_stat # macOS # Процессы Docker ps aux | grep docker + +# CPU и память в реальном времени +top +# или +htop ``` ### Мониторинг сети ```bash -# Статистика сети +# Инспекция сети labnet docker network inspect labnet -# Подключения к портам +# Статистика сети +docker network inspect labnet --format '{{json .Containers}}' | jq + +# Просмотр портов 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 +# Просмотр установленных соединений +ss -tulpn | grep docker ``` ## 🔧 Диагностика ролей @@ -144,447 +169,253 @@ tail -f /var/log/ansible.log make role 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 -# Проверка переменных роли +# Просмотр всех переменных для хоста 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 +# Просмотр всех групп +ansible-inventory --list | jq 'keys' ``` ### Тестирование ролей ```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 -ansible-playbook -i inventory/hosts.ini site.yml --check +# Тестирование с minimal preset +make role test minimal + +# Просмотр результатов теста +docker logs $(docker ps -aq --filter "network=labnet" | head -1) ``` -## 🚨 Алерты и уведомления +## 🚨 Решение проблем -### Настройка алертов +### Проблемы с Docker + +#### Docker не запускается ```bash -#!/bin/bash -# 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 +# Проверка статуса (Linux) sudo systemctl status docker -# Запуск Docker +# Запуск Docker (Linux) sudo systemctl start docker -# Проверка логов -sudo journalctl -u docker.service +# Проверка логов (Linux) +sudo journalctl -u docker.service -f + +# Перезапуск Docker Desktop (macOS/Windows) +# Use Docker Desktop interface ``` -#### 2. Образы не собираются +#### Buildx зависает ```bash -# Проверка builder'а +# Диагностика make docker diagnose # Сброс builder'а make docker reset-builder -# Очистка кеша -make docker clean +# Очистка контейнеров buildkit +docker ps -a --filter "name=buildx_buildkit" --format "{{.Names}}" | xargs -r docker rm -f ``` -#### 3. Тесты не проходят +#### Образы не собираются ```bash -# Проверка preset'ов -make presets list +# Очистка builder'а +make docker clean-builder -# Проверка инвентори -cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini +# Пересоздание builder'а +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 + +# Перезапуск контейнера +docker restart + +# Удаление всех контейнеров Molecule +make clean-containers +``` + +#### Роли не выполняются ```bash # Проверка синтаксиса make role lint +# Тест с verbose выводом +ansible-playbook -i inventory/hosts.ini site.yml -vvv + # Проверка переменных 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 ``` -### Логи для отладки +## 📈 Сбор диагностической информации + +### Скрипт диагностики ```bash -# Сбор всех логов +#!/bin/bash +# Создание отчета для диагностики + +echo "🔍 Сбор диагностической информации..." + +# Создание директории для логов 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 +# Docker информация +docker info > debug-logs/docker-info.txt 2>&1 +docker images > debug-logs/docker-images.txt 2>&1 +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 -free -h > debug-logs/memory-usage.txt -ps aux > debug-logs/processes.txt +# Системная информация +df -h > debug-logs/disk-usage.txt 2>&1 +free -h > debug-logs/memory-usage.txt 2>&1 2>/dev/null || vm_stat > debug-logs/memory-usage.txt 2>&1 +ps aux | grep docker > debug-logs/docker-processes.txt 2>&1 -# Логи Ansible -ansible --version > debug-logs/ansible-version.txt -ansible-galaxy list > debug-logs/ansible-galaxy.txt +# Информация о проекте +ls -la roles/ > debug-logs/roles-list.txt 2>&1 +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 -#!/bin/bash -# scripts/dashboard.sh -# Простой дашборд мониторинга - -echo "📊 AnsibleLab 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 "==========================" +# Быстрая проверка состояния +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 "=== Presets ===" && ls -1 molecule/presets/*.yml 2>/dev/null | wc -l +echo "=== Disk Usage ===" && df -h . | tail -1 ``` -### Веб-дашборд +## 🔧 Полезные команды -```html - - - - AnsibleLab Dashboard - - - - - -

📊 AnsibleLab Dashboard

- -
- - - - -``` - -## 🔧 Автоматизация мониторинга - -### Настройка мониторинга +### Очистка ```bash -#!/bin/bash -# scripts/setup-monitoring.sh -# Настройка мониторинга AnsibleLab +# Очистка контейнеров Molecule +make clean-containers -echo "🔧 Настройка мониторинга..." +# Очистка Docker образов AnsibleLab +make docker clean -# Создание директорий -mkdir -p {scripts,metrics,reports,debug-logs} +# Очистка всего Docker +make docker purge -# Создание скрипта мониторинга -cat > scripts/monitor.sh << 'EOF' -#!/bin/bash -# Скрипт мониторинга AnsibleLab +# Очистка buildx +make docker clean-builder +``` -# Проверка Docker -if ! docker info >/dev/null 2>&1; then - echo "❌ Docker не запущен" - exit 1 -fi +### Проверка -# Проверка образов -if ! docker images | grep -q inecs/ansible-lab; then - echo "❌ Образы AnsibleLab не найдены" - exit 1 -fi +```bash +# Проверка наличия образов +make custom-images check -echo "✅ Мониторинг завершен" -EOF +# Проверка builder'а +make docker check-builder -# Создание скрипта сбора метрик -cat > scripts/collect-metrics.sh << 'EOF' -#!/bin/bash -# Сбор метрик AnsibleLab +# Информация об образах +make docker info +``` -echo "📊 Сбор метрик..." +### Тестирование -# Метрики Docker -docker info > metrics/docker-info.txt -docker images > metrics/docker-images.txt +```bash +# Быстрый тест +make role test minimal -# Метрики системы -df -h > metrics/disk-usage.txt -free -h > metrics/memory-usage.txt +# Полный тест +make role test all-images -echo "✅ Метрики собраны" -EOF - -# Создание скрипта генерации отчетов -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 "✅ Мониторинг настроен" +# Тест с конкретным preset'ом +make role test docker-full ``` ---