Эта страница поможет подтвердить предположение с другой страницы раздела, восстановить хронологию событий на устройстве или подготовить обращение в поддержку.
Большинство расследований сводятся к вопросу «что происходило с устройством X около времени T». Узнайте UDID устройства (в его карточке) и время проблемы (вкладка Управление → Команды, колонки «Добавлена» и «Отправлена»), а затем просмотрите все логи за этот интервал.
Часовые пояса. Лог backend ведётся в UTC, интерфейс Ринго показывает время в часовом поясе браузера. Лог агента на Mac (
ringo.ГГГГ-ММ-ДД.0.log) ведётся в UTC, а системный журнал Mac — по местному времени Mac. Например, команда, отмеченная в интерфейсе временем 13:31 по Москве, записана в логе backend как10:31.
docker logs roll-deploy-backend --since 2h 2>&1 | grep -i '<udid>'
В логе backend UDID записан строчными буквами, а в журнале Mac — заглавными. Параметр grep -i находит оба варианта.
| Где | Что записывается | Как посмотреть |
|---|---|---|
| Сервер, backend | Протокол MDM, события устройств, очередь команд, push, агент, HTTP-запросы. | docker logs roll-deploy-backend; файлы /logs/backend.log.ГГГГ-ММ-ДД внутри контейнера. |
| Сервер, прокси и WAF | Запросы, поступившие на сервер, и ответы прокси. | Встроенный прокси: docker logs ringo-nginx-proxy-1. Собственный прокси: /var/log/nginx/access.log, error.log, журнал WAF (например, аудит-лог ModSecurity). |
| Ринго, действия администраторов | Кто и что изменил: APNs-сертификат, профили, удаление устройств, входы в систему. | Настройки → Аудит-лог (вкладки «Аудит», «События», «Аутентификация»), экспорт в CSV. |
| Mac, MDM | Получение push, запросы к серверу и коды ответов, установка профилей. | Системный журнал, см. Диагностика на устройстве. |
| Mac, агент | Подключение, команды, ошибки. | /Library/Logs/com.ringo.agent/ringo.ГГГГ-ММ-ДД.0.log. |
| Mac, Self Service | Запросы к серверу и ответы. | ~/Library/Application Support/Logs/app.log |
Файлы
/logsхранятся внутри контейнера, а не в отдельном томе. При пересоздании контейнера (при обновлении Ринго или командеdocker compose up -d --force-recreate) они удаляются. Если вы расследуете инцидент, сначала сохраните логи (см. Обращение в поддержку).
Формат записи: ЧЧ:мм:сс ДД-ММ-ГГГГ | backend | <контекст> | <уровень> | <сообщение>. HTTP-запросы записываются в том же логе в формате Apache Combined. Для ответов API с ошибкой дополнительно записываются строки Request body was: и Response body was: с телом запроса и ответа.
Основные записи:
| Запись | Значение |
|---|---|
Emit event (mdm.event) with data: [udid: …; … topic mdm.Authenticate; status: null] |
Начало регистрации. |
… topic mdm.TokenUpdate … |
Получен push-токен. |
… topic mdm.SetBootstrapToken … |
Mac передал Bootstrap Token. |
Emit event (device.enroll.mdm) with data: {"udid":"…"} |
Устройство зарегистрировано в MDM. |
Apple MDM command queued [UDID: …; Command type: …] |
Команда поставлена в очередь одному устройству. |
Apple MDM commands queued [Count: …; Command type: …] |
Команды поставлены сразу многим устройствам, например по расписанию (SecurityInfo). UDID в этой записи нет, поэтому выборка по UDID её не находит. |
… topic mdm.Connect; status: Idle |
Устройство обратилось за командами (после push или самостоятельно). |
… topic mdm.Connect; status: Acknowledged / Error / NotNow |
Устройство вернуло результат команды. |
… topic mdm.CheckOut … |
Профиль MDM удалён с устройства. |
Agent connected, udid: … |
Агент подключился. |
Emit event (device.enroll.agent) with data: {"udid":"…"} |
Агент зарегистрирован (macOS). |
Agent event (command:completed); Udid: …; Data: {"command_id":"…","exit_code":0} |
Агент выполнил команду (политику, скрипт). |
Disconnected: <UDID>, reason: transport close |
Агент отключился. |
"PUT /mdm/connect HTTP/1.1" <код> |
Запрос устройства и код ответа. |
Failed to send mdm push notification for device with udid '…': <причина> |
Push не отправлен. См. Команды MDM → шаг 3. |
APNS reported unregistered push token for udid '…', marking device as not enrolled |
Push-токен устройства недействителен, его команды отменены. |
triggerQueue, missing mdm push token for udid '…' |
У устройства нет push-токена, push не отправляются. |
Apple MDM command auto-cancelled [Type: …; UDID: …; NotNow count: 50] |
Команда отменена после 50 ответов NotNow. |
Apple proxy CONNECT … failed |
Исходящий прокси для Apple отказал в соединении. |
Failed to decrypt agent auth message for udid '…' |
Агент использует сертификат, который сервер не выпускал для этого Mac при последней регистрации. См. Агент на macOS → несколько сертификатов агента. |
Agent connected with same udid |
Подключены два агента с одним UDID. |
Missing UnlockToken in token update event |
Для macOS это нормально и не является ошибкой. |
Готовые выборки:
# хронология регистрации
docker logs roll-deploy-backend 2>&1 | grep -i '<udid>' | grep -E 'Authenticate|TokenUpdate|device\.enroll|CheckOut|Agent connected'
# обращения устройства за командами и его ответы
docker logs roll-deploy-backend --since 24h 2>&1 | grep -i '<udid>' | grep 'topic mdm.Connect'
# команды, поставленные устройству в очередь
docker logs roll-deploy-backend --since 24h 2>&1 | grep -i '<udid>' | grep 'command queued'
# число переподключений агента (признак таймаутов прокси)
docker logs roll-deploy-backend --since 24h 2>&1 | grep -i '<udid>' | grep -cE 'Agent connected|Disconnected'
# логи за прошлые дни из файлов
docker exec roll-deploy-backend grep -i '<udid>' /logs/backend.log.<ГГГГ-ММ-ДД>
Работа с системным журналом Mac, логом агента и логом Self Service подробно описана, с готовыми выборками и примерами записей, на странице Диагностика на устройстве.
Основные выборки:
# коды ответов сервера на каждый запрос Mac
sudo log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND category == "HTTPUtil" AND eventMessage CONTAINS "Received HTTP response"'
# ключевые события MDM
sudo log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND eventMessage CONTAINS "[*]"'
# только ошибки
sudo log show --last 1h --style compact --predicate 'subsystem == "com.apple.ManagedClient" AND messageType == error'
Какие данные собрать и что указать в письме, описано на странице Обращение в поддержку.
Проверено на Ринго 3.0.5, октябрь 2026. Тексты ошибок — Справочник ошибок, термины — Термины.