Статья содержит команды для выявления причин некорректной работы платформы, а также команды для перезапуска контейнеров и некоторых служб для восстановления их работы.

Для некоторых команд могут потребоваться привилегии суперпользователя.

Общая диагностика


Раздел содержит список команд, которые вы можете выполнить в качестве первого шага диагностики. Эти команды позволят исключить базовые проблемы и сократить время поиска неполадок.

Версия операционной системы (ОС)

Если ОС мастер-сервера или сервера для узла не поддерживается платформой, установка или подключение завершится с ошибкой. Чтобы определить версию ОС, выполните команду:

cat /etc/*release
CODE

Список поддерживаемых ОС см. в документации VMmanager:

Дата и время на сервере

Во время периодической синхронизации с сервером лицензий происходит проверка даты и времени. Если на сервере с платформой установлены некорректная дата или время, платформа будет заблокирована или её работа будет некорректной. Чтобы определить текущую дату и время на сервере, выполните команду:

date -R
CODE

Занятое пространство диска и оперативная память

Для корректной работы платформы свободное пространство диска и оперативная память должны соответствовать требованиям, указанным в статье Требования к серверу документации VMmanager. Также, если свободного пространства или оперативной памяти недостаточно, виртуальные машины и резервные копии не будут создаваться. Чтобы проверить объём занятого пространства диска и данные о файловой системе, выполните команду:

df -hT
CODE

Чтобы получить информацию об оперативной памяти, выполните команду:

free -h
CODE

Inodes

inodes — это структура, в которой хранятся метаданные файлов. Работа платформы не будет корректной, если на сервере закончились inodes, даже при наличии свободного места на диске. Характерное поведение при нехватке inodes — снижение быстродействия, невозможность создания файлов, некорректный вывод информации в интерфейс платформы. Чтобы проверить число и долю использованных inodes в файловой системе, выполните команду:

df -i
CODE

Выявление неполадок в системе Linux


Для выявления неполадок в системе Linux изучите системные логи. Ниже приведены инструменты для поиска неполадок и ошибок в логах сервера. Подробнее о логах продукта см. в статье Лог-файлы платформы документации VMmanager.

Кольцевой буфер ядра

Один из способов выявить некорректную работу системы — просмотр журнала ядра с помощью утилиты dmesg. Ядро записывает все события в кольцевой буфер во время загрузки и работы системы. dmesg позволит изучить сообщения ядра, а также выявить проблемы, связанные с оборудованием. Для поиска проблем выполните эту команду:

dmesg | grep -i -E 'error|failed|critical|bug|panic'
CODE

Утилита journalctl

Проанализировать логи и выявить неполадки системы можно с помощью утилиты journalctl. Утилита выводит логи системных служб Linux. Для выявления некорректного поведения системы Linux, выполните команду:

journalctl | grep -i -E 'error|failed|critical|bug|panic'
CODE

Перезапуск платформы



С перезапуском платформы произойдёт удаление лог-файлов. Перед перезапуском рекомендуем собрать логи с помощью скрипта. Инструкцию см. в статье Лог-файлы платформы документации VMmanager.

Перезапуск платформы может решить ряд базовых проблем, таких как зависание, некорректное отображение информации в интерфейсе, некорректное поведение обработчиков услуг.  Чтобы перезапустить платформу, выполните команду:

vm stop && vm start
CODE

CPU


Архитектура CPU

Снижение производительности узла платформы может быть связано с техническими характеристиками CPU. Также информация об архитектуре CPU может быть полезна при диагностике проблем с тонкой настройкой виртуальных машин. Чтобы вывести информацию, выполните команду:

lscpu
CODE

Подсчёт CPU на узлах

Лицензирование VMmanager 6 учитывает только физические ядра. Чтобы при заказе лицензии указать точное значение CPU, рассчитайте количество ядер на узлах командой:

dmidecode --type processor | grep -i "core count" | grep -Eo "[0-9]+?"
CODE

Также подсчёт CPU необходим в случае, когда управление платформой блокируется из-за ошибки CPU cores number on node exceeds license limit. Ошибка возникает, если количество физических ядер в подключаемом узле превышает лимит. Чтобы проверить превышение лимита, сверьте вывод команды dmidecode с параметрами лицензии VMmanager.

Нагрузка на систему

При повышенной нагрузке на систему снизится производительность узлов. С помощью команды для подсчёта CPU можно определить нагрузку на систему. Для этого сравните количество физических ядер с параметром Load Average. Выполните команду:

uptime
CODE

Значение параметра Load Average должно быть меньше количества ядер, полученного командой для подсчёта CPU. 

Виртуальные машины (ВМ)


Состояние ВМ

Отобразить текущий статус всех виртуальных машин, чтобы диагностировать возможные неполадки, можно утилитой virsh.

Чтобы выполнять команды virsh, подключитесь к нужному узлу:

docker exec --tty --interactive vm_box ssh -i /opt/ispsystem/vm/etc/.ssh/vmmgr.1 <IP_address> -p 22
CODE

<IP_address> — IP адрес узла

-p 22 — порт для подключения к узлу по SSH

Чтобы отобразить состояние всех ВМ, выполните команду:

virsh list --all
CODE

Чтобы отобразить состояние конкретной ВМ, выполните команду:

virsh list --all | grep <название ВМ>
CODE

Демон виртуализации libvirt


Libvirt — набор инструментов для управления виртуализацией. Без запущенного сервиса Libvirt (libvirtd) работа платформы будет некорректной. Проверьте текущий статус сервиса командой:

systemctl status libvirtd
CODE

Если сервис остановлен или неактивен, запустите его:

systemctl start libvirtd
CODE

Если libvirt не установлен, вывод команды systemctl status libvirtd будет содержать сообщение:

Unit libvirtd.service could not be found
CODE

В этом случае:

  1. Установите libvirt вручную командой в зависимости от ОС:

    Для RHEL-based ОС (CentOS, AlmaLinux)

    yum install libvirt
    CODE

    Для Deb-based ОС (Ubuntu, Astra Linux)

    apt install libvirt
    CODE
  2. Запустите сервис:

    systemctl start libvirtd
    CODE
  3. Добавьте сервис libvirtd в автозагрузку:

    systemctl enable libvirtd
    CODE
  4. Повторно проверьте статус сервиса, чтобы убедиться, что он запущен.

Контейнеры


Служба docker

Docker-демон — служба, которая управляет контейнерами, а также другими сущностями docker: сетями, хранилищами и образами. Если эта служба не запущена, платформа не будет работать. Чтобы проверить состояние docker, выполните команду:

systemctl status docker
CODE

 Если служба остановлена, запустите её командой:

systemctl start docker
CODE

Чтобы проверить версию docker, выполните команду:

docker version
CODE

Презапуск службы docker

При некорректной работе службы докер может помочь её перезапуск. Для этого выполните команду:

systemctl restart docker.service
CODE

Перезапуск службы помогает исправить ряд ошибок, которые могут возникнуть при запуске, перезапуске или выключении платформы:

  • error while removing network: network <имя_сети> has active endpoints

    Пример ошибки

    error while removing network: network vm_vm_box_net id 88888ggggg has active endpoints
    exit status 1 
    CODE
  • ERROR: for <имя_сервиса> Cannot start service <имя_сервиса>: endpoint with name <имя_контейнера> already exists in network <имя_сети>

    Пример ошибки

    ERROR: for auth_back Cannot start service auth_back: endpoint with name vm_auth_back_1 already exists in network vm_vm_box_net
    CODE

    В указанном примере не смог запуститься контейнер vm_auth_back_1.

  • ERROR: for input Cannot start service input: driver failed programming external connectivity on endpoint vm_input_1

Для исправления указанных ошибок перезапустите службу docker командой, указанной выше.

Если проблему не удалось решить, обратитесь в службу технической поддержки через личный кабинет в разделе ПоддержкаЗапросыСоздать.

Статус контейнеров

Для диагностики возможных проблем отобразите список контейнеров и их статусов. Чтобы вывести список всех запущенных контейнеров, выполните команду:

docker ps
CODE

Чтобы получить список всех контейнеров, включая остановленные, выполните команду:

docker ps -a
CODE

Если необходимо проверить статус конкретного контейнера, выполните команду:

docker ps | grep <имя-контейнера>
CODE

Перезапуск контейнера

При некорректной работе контейнера может помочь его перезапуск. Для этого выполните команду:

docker restart <имя-контейнера>
CODE

Перезапуск taskmgr

При некорректной работе диспетчера задач, например, зависших задачах, может помочь перезапуск контейнера taskmgr. Для этого выполните команду:

docker exec -it vm_box supervisorctl restart taskmgr
CODE

Перезапуск monitor

Перезапуск службы мониторинга может потребоваться, если не отображается статистика на узлах. Для этого выполните команду:

docker exec -it vm_box supervisorctl restart monitor
CODE

Логирование

Для анализа событий контейнера изучите его журнал. Чтобы вывести последние 100 строк лога контейнера, выполните команду:

docker logs --tail 100 <имя-контейнера>
CODE

Файрвол


Если в файрволе нет правил для службы docker, возможны проблемы с работой платформы и сети. Необходимые правила создаются автоматически при запуске службы docker, мы не рекомендуем модифицировать или удалять их вручную.

Статус службы и конфигурация

Чтобы проверить статус службы файрвола, выполните команду в зависимости от ОС:

Для Ubuntu, Astra Linux

systemctl status nftables
CODE

Для CentOS, AlmaLinux

systemctl status firewalld
CODE

Для вывода конфигурации службы выполните команду в зависимости от ОС:

Для Ubuntu, Astra Linux

nft list ruleset
CODE

Для CentOS, AlmaLinux

firewall-cmd --list-ports
CODE

Перезапуск службы

Перезапуск службы необходим в случае её некорректной работы, а также для восстановления правил по умолчанию.

Чтобы перезапустить службу, выполните команду:

Для CentOS, AlmaLinux

systemctl restart firewalld.service
CODE

Для Ubuntu, Astra Linux

systemctl restart nftables.service
CODE

Чтобы восстановить правила по умолчанию:

  1. Перезапустите nftables командой:

    Для CentOS, AlmaLinux

    systemctl restart firewalld.service
    CODE

    Для Ubuntu, Astra Linux

    systemctl restart nftables.service
    CODE
  2. Перезапустите docker командой:

    systemctl restart docker.service
    CODE
  3. Перезапустите платформу командой из раздела Перезапуск платформы этой статьи.

Поиск информации в базе данных


Важно

Вмешательство в базу данных предполагает потенциальный риск. Мы не рекомендуем вносить ручные правки в базу, поскольку это может нарушить корректную работу платформы.

Создайте резервную копию платформы перед выполнением любых действий с БД. 

С помощью запросов к базе данных можно увидеть информацию о состоянии ВМ, узлов и других объектов платформы. Ниже приведён список запросов для получения данных из базы.

Чтобы выполнить запросы, подключитесь к контейнеру СУБД:

В связи с поэтапным переходом платформы на использование СУБД PostgreSQL, разные экземпляры VMmanager могут использовать разные СУБД:

  • VMmanager Hosting — MySQL;
  • VMmanager Infrastructure:
    • для новых установок на ОС Astra Linux, начиная с версии VMmanager 2023.06.1 — PostgreSQL;
    • в остальных случаях — MySQL.

Чтобы определить тип СУБД, выполните на сервере с платформой команду: 

docker ps --filter name=pgsql
BASH

Пример ответа

CONTAINER ID   IMAGE         COMMAND                  CREATED      STATUS      PORTS      NAMES
3213c5dc94d0   postgres:12   "docker-entrypoint.s…"   5 days ago   Up 4 days   5432/tcp   pgsql
CODE

Если вывод команды содержит информацию о контейнере, платформа использует PostgreSQL, если ответ пустой — MySQL.

MySQL

docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD"
BASH

PostgreSQL

 docker exec -it pgsql bash -c "psql -d isp"
BASH

Информация о ВМ

Информация о ВМ отобразит все параметры её состояния, внутреннее название, данные узла.

Чтобы получить информацию о виртуальной машине, выполните запрос:

select * from vm_host where id=<id_vm>;
CODE

<id_vm> — ID виртуальной машины

Чтобы вывести информацию об узле и внутреннее название ВМ, выполните запрос:

select id,internal_name,node from vm_host where id=<id_vm>;
CODE

<id_vm> — ID виртуальной машины

Информация об узле

Информация об узле отобразит выбранные параметры узла.

Чтобы получить информацию об узле, выполните запрос:

select id,name,ip_addr,ssh_port from vm_node where id=<id_node>;
CODE

<id_node> — ID узла

Чтобы проверить сеть на узле, выполните запрос:

select * from vm_node_interfaces where node=<id_node>;
CODE

<id_node> — ID узла

Виртуальные диски ВМ

Информация о виртуальном диске поможет диагностировать проблемы, связанные с ним. Например, ошибку virt-resize: error, которая может возникнуть при некорректном значении expand_part (раздел для увеличения) и размере виртуального диска в БД.

Чтобы увидеть всю информацию о диске, выполните этот запрос:

select * from vm_disk where name = 'example_name';
CODE

example_name — название виртуального диска

Чтобы проверить фактический размер диска, выполните команду на узле:

virsh domblkinfo --human 1111_example_name vda
CODE

1111_example_name — ID виртуальной машины_название диска

Резервное копирование

Запросом к БД можно проверить расписание резервных копий, чтобы выявить возможные проблемы. Чтобы получить информацию, выполните запрос:

select * from vm_schedule;
CODE