Поиск контейнеров в хранилище ядер через CLI Marathon: полное руководство по командам и фильтрам | AdminWiki

Поиск контейнеров в хранилище ядер через CLI Marathon: полное руководство по командам и фильтрам

30 июля 2026 7 мин. чтения

Быстрый старт: как найти контейнер за 30 секунд

CLI Marathon позволяет получить список контейнеров одной командой. Для поиска конкретного приложения используйте фильтр по имени:

marathon list containers --filter name=myapp

Флаг --filter принимает пару ключ-значение. В примере выше CLI отбирает все контейнеры, в имени которых встречается строка myapp. Вывод по умолчанию табличный: ID контейнера, имя, статус, образ и время создания.

Это базовая операция. Когда в кластере сотни контейнеров, одного фильтра по имени недостаточно. Дальше разберем точные фильтры по статусу, меткам и ID, а также управление выводом.

Если поиск не возвращает результатов, проверьте права доступа и версию CLI. Типовые причины сбоев и способы их устранения описаны в статье «Поиск контейнеров в Marathon не работает: причины и решения».

Архитектура хранилища ядер и место CLI Marathon

Хранилище ядер Marathon - это централизованный реестр метаданных всех контейнеров кластера. Каждый запущенный, остановленный или завершившийся с ошибкой контейнер оставляет запись: ID, имя, статус, метки, переменные окружения, потребление ресурсов и временные метки.

CLI Marathon - основной инструмент для запросов к этому реестру. В отличие от веб-интерфейса Marathon UI, командная строка дает три преимущества:

  • Скорость. Нет задержек рендеринга страницы, результат выводится в stdout.
  • Автоматизация. Вывод можно передать в скрипт через пайп или сохранить в файл.
  • Массовые операции. Фильтрация сотен контейнеров по сложным условиям выполняется одной командой.

CLI обращается к REST API Marathon напрямую. Каждая команда marathon list containers транслируется в HTTP-запрос к эндпоинту /v2/apps или /v2/tasks. Понимание этой механики помогает отлаживать запросы: если CLI возвращает ошибку, проверьте доступность API через curl.

Для комплексной работы с хранилищем контейнеров, включая инвентаризацию образов и массовое обновление, используйте приемы из руководства «Магазин контейнеров Marathon: полное руководство».

Основные команды для поиска контейнеров

Центральная команда - marathon list containers. Она принимает три ключевых флага:

ФлагНазначениеПример
--filterОтбор контейнеров по критерию--filter status=running
--limitОграничение количества строк вывода--limit 50
--outputФормат вывода: table, json или csv--output json

Фильтры можно комбинировать через запятую. CLI применяет логическое И: контейнер должен удовлетворять всем условиям одновременно.

Фильтрация по имени и ID

Фильтр name ищет подстроку в имени приложения. Регистр учитывается. Примеры:

# Точное совпадение (если имя уникально)
marathon list containers --filter name=nginx-prod

# Частичное совпадение - найдет nginx-prod, nginx-staging, nginx-test
marathon list containers --filter name=nginx

Фильтр id работает аналогично, но ищет по идентификатору задачи Marathon. ID имеет формат app-name.instance-uuid:

marathon list containers --filter id=nginx-prod.a1b2c3

Wildcard-символы (*, ?) CLI Marathon не поддерживает. Для сложного поиска по шаблону используйте пайп в grep:

marathon list containers --output json | jq '.[] | select(.name | test("nginx-.*"))'

Фильтрация по статусу контейнера

Фильтр status отбирает контейнеры по текущему состоянию. Доступны четыре значения:

  • running - контейнер работает.
  • stopped - остановлен вручную или по расписанию.
  • failed - завершился с ненулевым кодом возврата.
  • deploying - находится в процессе развертывания.

Команда для поиска проблемных контейнеров:

marathon list containers --filter status=failed

Вывод покажет ID, имя, статус и временную метку последнего изменения. Для анализа причин падения запросите детальную информацию:

marathon inspect container nginx-prod.a1b2c3

Записи остановленных контейнеров не удаляются автоматически. Они хранятся в реестре и доступны для аудита. Подробный разбор работы с завершенными задачами - в статье «Поиск и анализ остановленных контейнеров в Marathon».

Продвинутые фильтры: метки, окружение и ресурсы

Метки (labels) - основной механизм организации контейнеров в Marathon. В отличие от имени, метки не привязаны к логике приложения и задаются произвольно при запуске.

Поиск по меткам (labels)

Синтаксис фильтрации по меткам: --filter labels.<key>=<value>. Ключ и значение чувствительны к регистру.

# Все контейнеры с меткой tier=frontend
marathon list containers --filter labels.tier=frontend

# Все контейнеры окружения production
marathon list containers --filter labels.env=production

Назначение меток при запуске через Marathon UI: вкладка «Labels» в форме создания приложения. Через CLI:

marathon deploy app.json --labels tier=frontend,env=production,team=core

Рекомендуется стандартизировать набор меток в рамках проекта. Минимальный набор: env (окружение), team (команда-владелец), tier (уровень: frontend, backend, data).

Фильтрация по окружению (environment)

Прямого фильтра --filter env=production в CLI Marathon нет. Окружение определяется через метки или переменные среды. Практический подход - использовать метку env:

# Все контейнеры staging-окружения
marathon list containers --filter labels.env=staging

Если окружение зашито в имя приложения (например, myapp-prod), работает фильтр по имени:

marathon list containers --filter name=-prod

Комбинирование фильтров сужает выборку. Следующая команда найдет все контейнеры фронтенда в production, которые сейчас работают:

marathon list containers --filter labels.tier=frontend,labels.env=production,status=running

Для поиска по потреблению ресурсов (CPU, память) CLI Marathon не предоставляет встроенных фильтров. Используйте вывод в JSON и обработку через jq:

marathon list containers --output json | jq '.[] | select(.mem > 2048)'

Управление выводом: форматирование и ограничение результатов

В больших кластерах вывод сотен строк нечитаем. CLI Marathon дает два инструмента контроля: лимит строк и формат вывода.

Ограничение количества результатов

Флаг --limit обрезает вывод до указанного числа строк. CLI возвращает первые N контейнеров, удовлетворяющих фильтру:

# Только 10 последних контейнеров
marathon list containers --limit 10

Пагинация (постраничный вывод) в CLI Marathon не реализована. Для последовательного обхода большого списка комбинируйте --limit с сортировкой через jq:

marathon list containers --output json | jq 'sort_by(.created) | .[-50:]'

Эта команда выведет 50 самых новых контейнеров.

Экспорт в JSON и CSV для автоматизации

Флаг --output принимает три значения:

  • table - таблица с колонками (по умолчанию).
  • json - массив объектов, готовый для машинной обработки.
  • csv - строки с разделителем-запятой, открываются в Excel.

Экспорт всех контейнеров production в JSON для аудита:

marathon list containers --filter labels.env=production --output json > audit_prod.json

Обработка в jq для подсчета контейнеров по статусам:

cat audit_prod.json | jq 'group_by(.status) | map({status: .[0].status, count: length})'

Вывод в CSV для отчета:

marathon list containers --filter labels.env=production --output csv > report.csv

Для оперативного мониторинга контейнеров Docker в production-окружении используйте приемы из «Шпаргалка команд Docker 2026: отладка и мониторинг».

Типовые сценарии: от диагностики до аудита

Сценарий 1: Быстрый поиск проблемных контейнеров

Задача: найти все контейнеры в статусе failed и получить логи для анализа.

# Шаг 1: список упавших контейнеров
marathon list containers --filter status=failed

# Шаг 2: детальная информация по конкретному контейнеру
marathon inspect container myapp.a1b2c3

# Шаг 3: логи контейнера (если настроен драйвер логирования)
marathon logs container myapp.a1b2c3 --tail 100

Если проблема массовая, экспортируйте весь список в JSON и передайте в систему мониторинга.

Сценарий 2: Аудит окружения

Задача: получить полную выгрузку всех контейнеров staging для ревизии.

# Полный экспорт
marathon list containers --filter labels.env=staging --output json > staging_audit.json

# Сводка по статусам
cat staging_audit.json | jq 'group_by(.status) | map({status: .[0].status, count: length})'

# Сводка по командам-владельцам
cat staging_audit.json | jq 'group_by(.labels.team) | map({team: .[0].labels.team, count: length})'

Сценарий 3: Поиск контейнеров с высоким потреблением памяти

Задача: выявить контейнеры, потребляющие больше 2 ГБ RAM.

marathon list containers --output json | jq '.[] | select(.mem > 2048) | {name, mem, status}'

Результат покажет имена, потребление памяти в мегабайтах и статус. Для контейнеров в статусе running рассмотрите вертикальное масштабирование или оптимизацию приложения.

Частые ошибки и их решение

Ошибка: неверный синтаксис фильтра. Симптом: CLI возвращает пустой результат или ошибку парсинга. Решение: проверьте, что фильтр задан как key=value без пробелов вокруг знака равенства. Неправильно: --filter name = myapp. Правильно: --filter name=myapp.

Ошибка: недостаточно прав. Симптом: 403 Forbidden при запросе. Решение: CLI Marathon использует токен аутентификации из переменной окружения MARATHON_AUTH_TOKEN или конфигурационного файла ~/.marathon/config. Проверьте наличие токена и его срок действия.

Ошибка: устаревшая версия CLI. Симптом: флаг --filter не распознается, вывод отличается от документации. Решение: обновите CLI до актуальной версии командой marathon version для проверки текущей и marathon update-cli для обновления. Версия должна соответствовать версии Marathon API в кластере.

Ошибка: фильтр по меткам не находит контейнеры. Симптом: команда с --filter labels.env=production возвращает пустой список, хотя контейнеры есть. Решение: метки чувствительны к регистру. Проверьте точное написание ключа и значения через marathon inspect container <id>. Частая причина - Production вместо production.

Для углубленного изучения фильтрации по меткам, состояниям и ресурсам используйте «Поиск и фильтрация контейнеров в Marathon: полное руководство».

Если вы разворачиваете кластер для тестирования описанных команд, обратите внимание на облачную инфраструктуру Timeweb Cloud - она предоставляет готовые Kubernetes-кластеры и VDS для Marathon за минуты.

Поделиться:
Сохранить гайд? В закладки браузера