Диагностика и отладка с помощью toolbox#

Образ SberLinux OS Core минимален и по умолчанию не содержит полный набор инструментов для диагностики и устранения неполадок, которые обычно доступны в стандартных операционных системах. Для выполнения отладочных задач используйте инструмент toolbox и предоставляемые им контейнеры (изолированную среду для разработки и отладки).

Важно

Начиная с версии 9.5.0 предоставляемый разработчиком образ контейнера toolbox поставляется не внутри QCOW2-образа SberLinux OS Core, а рядом с ним в составе поставки.

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

Подробнее о toolbox - в разделе «Утилита toolbox».

Об использовании поставляемого образа контейнера toolbox в SberLinux OS Core - в разделе «Работа с контейнерами toolbox.

Утилита toolbox#

Описание#

toolbox — это утилита, позволяющая создавать пользовательские привилегированные контейнеры с набором необходимых инструментов, предназначенных для отладки и устранения неполадок экземпляра системы. Представляет собой оболочку над cri-o, которая запускает долгоживущие контейнеры с автоматическим монтированием необходимых каталогов и настройкой namespaces для взаимодействия и отладки хост-системы.

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

Использование toolbox#

По умолчанию toolbox создает контейнеры на основе текущей системы. Например, если базовой системой является SberLinux OS Core, то toolbox создаст контейнер на ее основе.

  1. Чтобы создать новый контейнер на основе текущей версии SberLinux OS Core, выполните:

    toolbox create
    

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

    Примечание

    Если локальный образ не найден, будет предложено загрузить последний доступный образ из удаленного репозитория. В этом случае введите y и нажмите Enter, чтобы загрузить образ.

  2. Выведите список всех контейнеров и образов toolbox, существующих на хосте:

    toolbox list
    
  3. Выберите необходимый контейнер из вывода предыдущей команды и подключитесь к его интерактивной оболочке:

    toolbox enter <container_name>
    

    Примечание

    Если контейнер в списке один или необходимо запустить контейнер по умолчанию, используйте команду без указания <container_name>.

  4. Находясь в контейнере, выполните все необходимые действия по диагностике и отладке.

  5. После завершения диагностики и отладки выйдите из контейнера:

    exit
    
  6. (Опционально) Удалите контейнер с хоста:

    toolbox rm --force <container_name_or_ID>
    

Дополнительная информация#

Дополнительную информацию можно получить, выполнив:

toolbox --help

Работа с контейнерами toolbox#

Контейнер toolbox – это изолированная среда, которая содержит пакеты инструментов для диагностики и отладки ошибок (например, jq, crash, tcpdump, iperf, sysbench).

Разработчик вместе с SberLinux OS Core поставляет готовый пользовательский образ контейнера toolbox, собранный на базе UBI-образа полновесной ОС Platform V Sberlinux OS Server.

Образ представлен в виде tar-архива с именем SBCOS-<version>-<build_stamp>-toolbox.x86_64.tar, где <version> - первые две цифры номера версии продукта в формате X.Y, <build_stamp> - информация об идентификации сборки, включающая дату, время и ревизию в формате YYYYMMDD-TTTT-N.

Сценарий использования поставляемого образа контейнера toolbox:

  1. Загрузите образ в систему:

    curl -O <path_to_toolbox_container_file>.tar
    

    Где <path_to_toolbox_container_file>.tar> - местоположение файла образа контейнера toolbox из состава поставки.

  2. Создайте образ podman:

    podman load -i ./<name>-toolbox.x86_64.tar
    

    Где <name>-toolbox.x86_64.tar - имя загруженного tar-файла.

  3. Выведите список доступных образов:

    podman images
    

    Пример вывода:

    REPOSITORY              TAG         IMAGE ID      CREATED      SIZE
    localhost/sbel-toolbox  latest      3b94a546a183  5 weeks ago  3.52 GB
    
  4. Создайте контейнер toolbox:

    toolbox create -i localhost/sbel-toolbox:latest
    

    Примечание

    Вместо полного наименования с указанием местоположения, имени и тега (localhost/sbel-toolbox:latest) можно использовать ID образа (в примере это 3b94a546a183 в выводе шага 3).

    Пример вывода:

    Created container: sbel-toolbox-latest
    Enter with: toolbox enter sbel-toolbox-latest
    
  5. Подключитесь к интерактивной оболочке внутри контейнера toolbox:

    toolbox enter <container_name>
    

    Где вместо <container_name> укажите имя созданного контейнера, например:

    toolbox enter sbel-toolbox-latest
    
  6. Проведите необходимую диагностику и отладку системы, например, выполните:

    • для захвата и анализа сетевого трафика в реальном времени:

      tcpdump
      

      Пример вывода:

      ...
      09:53:34.504054 IP toolbox.ssh >   <IP-addr_and_port_destination>: Flags [P.], seq 45360:45700, ack 1, win 249, options [nop,nop,TS val 108588374 ecr 3075188331], length 340
      09:53:34.512250 IP   <IP-addr_and_port_destination> > toolbox.ssh: Flags [.], ack 45700, win 2048, options [nop,nop,TS val 3075188436 ecr 108588374], length 0
      09:53:34.607793 IP toolbox.ssh >   <IP-addr_and_port_destination>: Flags [P.], seq 45700:46040, ack 1, win 249, options [nop,nop,TS val 108588478 ecr 3075188436], length 340
      09:53:34.614921 IP   <IP-addr_and_port_destination> > toolbox.ssh: Flags [.], ack 46040, win 2048, options [nop,nop,TS val 3075188539 ecr 108588478], length 0
      09:53:34.711989 IP toolbox.ssh >   <IP-addr_and_port_destination>: Flags [P.], seq 46040:46380, ack 1, win 249, options [nop,nop,TS val 108588582 ecr 3075188539], length 340
      09:53:34.719943 IP   <IP-addr_and_port_destination> > toolbox.ssh: Flags [.], ack 46380, win 2048, options [nop,nop,TS val 3075188644 ecr 108588582], length 0
      ^C
      305 packets captured
      309 packets received by filter
      0 packets dropped by kernel
      
    • для анализа расширенных системных логов (включая сообщения об ошибках и предупреждениях) с добавлением пояснений к событиям и переходом к концу лога:

      journalctl -xe
      

      Пример вывода:

      Mar 20 14:33:04 localhost.localdomain systemd[1]: Started Network Manager Script Dispatcher Service.
         Subject: A start job for unit NetworkManager-dispatcher.service has finished successfully
         Defined-By: systemd
         Support: https://sbertech.ru
         
         A start job for unit NetworkManager-dispatcher.service has finished successfully.
         
         The job identifier is 3993.
      Mar 20 14:33:14 localhost.localdomain systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully.
         Subject: Unit succeeded
         Defined-By: systemd
         Support: https://sbertech.ru
         
         The unit NetworkManager-dispatcher.service has successfully entered the 'dead' state.
      ...
      
    • для тестирования производительности системы - например, производительности CPU, вычисляя простые числа до 20000:

      sysbench cpu --cpu-max-prime=20000 run
      

      Пример вывода:

      sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)
      
      Running the test with following options:
      Number of threads: 1
      Initializing random number generator from current time
      
      
      Prime numbers limit: 20000
      
      Initializing worker threads...
      
      Threads started!
      
      CPU speed:
         events per second:   407.81
      
      General statistics:
         total time:                          10.0015s
         total number of events:              4080
      
      Latency (ms):
               min:                                    2.11
               avg:                                    2.41
               max:                                  266.15
               95th percentile:                        2.35
               sum:                                 9844.66
      
      Threads fairness:
         events (avg/stddev):           4080.0000/0.00
         execution time (avg/stddev):   9.8447/0.00