Logan: базовая библиотека журналов мобильных терминалов с открытым исходным кодом Meituan Dianping.

задняя часть внешний интерфейс Android Открытый исходный код

logo

предисловие

Logan является основным компонентом журнала мобильного терминала Meituan Dianping Group.Название представляет собой комбинацию Log и An, которая представляет собой отдельную службу журнала. В то же время Логан - это также имя дяди Росомахи, Конечно, мы надеемся, что этот продукт может быть таким же острым, как дядя Росомаха.

Логан стабильно работает уже больше года. В настоящее время подавляющее большинство приложений Meituan-Dianping имеют доступ и используют Logan для сбора, загрузки и анализа журналов. Недавно мы решили открыть исходный код хранилища SDK, входящего в экосистему Logan (Android/iOS), в надежде помочь большему количеству разработчиков разумно решить болевые точки, связанные со сбором мобильного хранилища журналов, и пригласить больше разработчиков из сообщества присоединиться к нам. Экосистема Логана. Адрес проекта на Github см.:GitHub.com/Mehtuan-DI Ах…

задний план

С постоянным расширением бизнеса количество журналов на мобильном терминале будет увеличиваться. Однако в отрасли не сформировался относительно систематический метод обработки мобильных бревен.В большинстве случаев это по-прежнему однократная обработка разных бревен, а затем объединение результатов этой обработки бревен для локализации проблемы. Однако, когда пользователь достигает определенного уровня, многие «сложные и разнообразные заболевания» не могут быть решены с помощью предыдущего метода определения проблемы. Самая большая головная боль мобильных разработчиков — это «почему я использую тот же мобильный телефон, что и пользователь, ту же версию системы, а операция пользователя не может воспроизвести ошибку». Особенно для разработчиков Android модель мобильного телефона, версия системы, сетевое окружение и т. д. - все это очень сложно. Даже если они получат точно такой же мобильный телефон, они не смогут воспроизвести ошибку. Это не удивительно. Идентичный телефон. Я полагаю, что многим студентам знакома следующая сцена:

Использование (лаосской) учетной записи (запрет): я обнаружил, что XX-страница нашего приложения не может быть открыта, и пользовательский интерфейс не может отображаться. Пожалуйста, примите меры по этой проблеме.

Привет.

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

Ваша внутренняя ОС: Странно, сбоев нет, сеть подключена, но почему не отображается UI?

Через несколько часов...

Использование (лаосское) бытовое (запрет): Решен ли этот вопрос?

Вы: Я пытался воспроизвести его разными способами... Пока не могу понять, что вызвало эту проблему.

Использование (лаосское) бытовое (запрет): Это моя вина?

ты:……

Если появление ошибки расценивается как «сцена убийства», разработчик — «детектив», который раскрывает дело. После преступления детективу необходимо собрать улики с помощью различных средств и вывести ход преступления. Это похоже на разработчика, которому нужно запросить различные журналы, чтобы проанализировать, что приложение испытало на мобильном телефоне пользователя в течение этого периода. Вообще говоря, традиционные методы сбора логов имеют следующие недостатки:

  • Журнальный отчет несвоевременный. Поскольку для отчетов журнала требуются сетевые запросы, частые сетевые запросы потребляют больше энергии для мобильных приложений, поэтому SDK журналов обычно накапливается до определенного уровня или снова сообщает об этом через определенный период времени.
  • Сообщаемая информация ограничена. Поскольку частота сетевых запросов отчетов журнала относительно высока, в целях экономии пользовательского трафика журнал обычно не слишком велик. Особенно такие журналы реального времени, как сетевые журналы.
  • Бревенчатый остров. Различные типы журналов передаются в разные системы журналов и относительно изолированы.
  • Неполный журнал. Существует все больше и больше типов журналов, и некоторые пакеты SDK для журналов будут выбирать отчетные журналы.

столкнуться с проблемой

В Meituan-Dianping Group существует более 20 типов мобильных бревен, и с постоянным расширением бизнеса это число продолжает расти. В частности, три упомянутых выше дефекта также будут бесконечно усиливаться.

before

Устранение неполадок — тяжелая работа. Не все журналы регистрируются в одной системе. Разработчикам может потребоваться просматривать различные типы журналов в нескольких системах, что значительно увеличивает затраты разработчиков на обнаружение проблем. Если мы будем каждый день ходить на работу и смотреть, как висят сложные баги, которые невозможно решить, это будет действительно неудобно. Это как сыщик, который столкнулся с трудным делом.Когда он перепробовал все средства, чтобы собрать улики, он так и не нашел ничего.Чувство можно себе представить. Наша идея сбора журналов для воспроизведения пользовательских ошибок очень похожа на идею детективов для раскрытия дел, Мы пытаемся собрать воедино относительно полное место преступления с помощью собранных улик. Если мы подумаем об этом таким образом, в настоящее время у нас нет лучшего способа справиться с этими проблемами.

Однако, хотя идея детектива, решающего дело, и разработчика, проверяющего логи для решения проблемы, похожа, суть разная. Мы имеем дело с ошибками, а не реальными случаями. Другими словами, поскольку наш «мертвый» виден, от него можно получить больше информации и даже «обмен душой» с ним. Другой способ мышления состоит в том, что в прошлом операция заключалась в том, чтобы собрать воедино сцену ошибки пользователя с помощью различных журналов.Можете ли вы сначала получить все журналы, созданные пользователем во время возникновения ошибки (без выборки, содержимое более подробно) , а затем объединять эти журналы для анализа (отфильтровывать ненужные элементы) сценария, в котором у пользователей есть ошибки?

анализ случая

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

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

Также нам необходимо технически выполнить следующие условия:

  • Легкий, корпус упаковки как можно меньше
  • Простой в использовании API
  • не инвазивный
  • высокая производительность

Выключен

В этом контексте родился Logan, и его основная система состоит из четырех модулей:

  • ввод журнала
  • хранилище журналов
  • серверная система
  • Интерфейсная система

Лучшие практики

process

ввод журнала

Общие типы журналов: журналы на уровне кода, сетевые журналы, журналы поведения пользователей, журналы сбоев, журналы H5 и т. д. Это входные слои Логана. Контент может храниться в Логане, не влияя на функцию исходной системы журналов. Преимущество Logan заключается в том, что содержимое журнала может быть богаче, при записи может быть перенесено больше информации, и нет выборки журнала.Он будет только ждать подходящего времени для унифицированной отчетности, что может сэкономить трафик и энергию пользователей.

Возьмем в качестве примера сетевой журнал.В нормальных условиях в сетевой журнал записываются только поля сквозной задержки, размера пакета, размера возвращаемого пакета и т. д., а также выполняется выборка. В Logan выборка сетевых журналов не производится.Помимо вышеуказанного содержимого, также может быть записана такая информация, как заголовки запроса, заголовки возврата и исходные URL-адреса.

хранилище журналов

SDK Logan Storage является центральным элементом этого проекта с открытым исходным кодом и устраняет несколько недостатков в большинстве мобильных библиотек журналов в отрасли:

  • Катон, влияющий на производительность
  • журнал потерян
  • безопасность
  • разброс журнала

Протокол журнала Logan, разработанный самостоятельно, решает проблему локального агрегированного хранения журналов. Он принимает порядок «сначала сжатие, а затем шифрование» и использует потоковое шифрование и сжатие, чтобы избежать пиковых нагрузок ЦП и снизить его загрузку. Кроссплатформенная библиотека C обеспечивает форматирование данных протокола журнала.Для фрагментации обработки больших журналов введен механизм MMAP для решения проблемы потери журналов, а для шифрования журналов используется AES для обеспечения безопасности журналов. Основная логика Logan полностью завершена на уровне C, что обеспечивает возможность поддержки кроссплатформенности, решая проблему болевых точек, а также значительно повышая производительность.

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

Для получения подробной информации см.:Базовая библиотека журналов мобильного терминала Meituan-Dianping - Logan

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

Бэкенд — это центр приема и обработки данных, который эквивалентен мозгу Логана. Выделяют четыре основные функции:

  • получить журнал
  • Парсинг и архивирование логов
  • анализ журнала
  • платформа данных

получить журнал

Существует две формы отчетов журналов на стороне клиента: активные отчеты и отчеты по извлечению. Активная отчетность может помочь пользователям сообщить через службу поддержки клиентов, или она может быть предварительно скрыта, чтобы сообщить, когда происходит определенное поведение (например, жалобы пользователей). Отчет о спасении — это команда восстановления, инициированная серверной частью клиенту, и здесь она повторяться не будет. Все отчеты журналов принимаются серверной частью Logan.

Парсинг и архивирование логов

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

анализ журнала

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

платформа данных

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

Интерфейсная система

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

В настоящее время страница сведений журнала внешнего интерфейса Logan в группе уже имеет следующие функции:

  • Визуализация журнала. Все журналы структурированы и отображаются в хронологическом порядке.
  • Лента новостей. Визуализация данных с использованием графиков для семантического анализа.
  • Поиск по журналу. Быстро найти соответствующее содержимое журнала.
  • Фильтрация логов. Поддерживается несколько типов журналов, и можно выбирать журналы для анализа.
  • совместное использование журнала. После совместного использования одного журнала щелкните ссылку общего доступа, чтобы автоматически определить расположение общего журнала.

Когда Logan визуализирует журналы, он пытается использовать графики для семантического анализа, сокращенно временную шкалу.

timeline

Каждая строка представляет тип журнала. Один и тот же тип журнала имеет несколько рисунков и цветов, которые указывают на различную семантику.

Например, на временной шкалежурнал уровня кодаРазличают категории журналов:

codelog

Используя разницу в цвете, вы можете легко отличить журнал ошибок и щелкнуть красную точку, чтобы перейти непосредственно к подробностям журнала ошибок.

процесс анализа случая

case

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

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

  • Студенты НИОКР получают дело, просматривают журналы Logan, используют систему Logan для фильтрации журналов, позиционирования по времени, временной шкалы и других функций, анализируют журналы, а затем восстанавливают дело «на месте».

  • Наконец, объедините проблему позиционирования кода, устраните проблему и решите случай.

проблема позиционирования

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

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

план на будущее

  • Анализ машинного обучения. Сначала собирайте прошлые обращения и решения, извлекайте и анализируйте особенности обращений, структурируйте обращения и сохраняйте их на складе, а затем быстро анализируйте зарегистрированные журналы с помощью машинного обучения, указывайте на возможные проблемы в журналах и давайте предложения по решению;
  • Открытая платформа данных. Деловые стороны могут получать данные через открытую платформу данных, а затем комбинировать характеристики своего собственного бизнеса для разработки инструментов и продуктов, подходящих для их собственного бизнеса.

Поддержка платформы

Platform iOS Android Web Mini Programs
Support

В настоящее время Logan SDK уже поддерживает указанные выше четыре платформы.На этот раз исходный код для платформ iOS и Android открыт, а другие платформы будут открыты в будущем, так что следите за обновлениями.

тестовое покрытие

Поскольку Travis и Circle недостаточно дружелюбны для среды Android NDK, для совместимости с более ранними версиями устройств Android текущее требование к версии NDK для Logan — 16.1.4479499, поэтому мы не настраивали CI в репозитории Github. Разработчики могут запускать тестовые случаи локально, а покрытие тестами может достигать 80% и выше.

Инициатива с открытым исходным кодом

В рамках группы была сформирована экосистема кейс-стади, основанная на Логане. Содержимое этого открытого исходного кода включает клиентские модули iOS, Android, простую версию анализа данных, версию апплета и веб-версию, которые уже находятся на пути к открытому исходному коду, а внутренняя и внешняя система также находятся в нашем открытом исходном коде. строить планы.

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

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

system

Module Open Source Processing Planning
iOS
Android
Web
Mini Programs
Back End
Front End

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

Чжоу Хуэй, инициатор проекта, старший мобильный архитектор Meituan-Dianping.

Цзян Тэн, основной разработчик проекта.

Licheng, основной разработчик проекта.

Бай Фан, основной разработчик проекта.

Прием на работу

Мобильный научно-исследовательский центр платформы комментариев Base Shanghai предоставляет базовые инфраструктурные услуги для большинства мобильных терминалов Meituan-Dianping Group, включая сетевую связь, мобильный мониторинг, push-доступ, динамический движок, мобильные инструменты для исследований и разработок и т. д. В то же время команда также проводит бизнес-исследования и разработки в области распределения трафика, пользовательского контента, экологии контента, центра интеграции и т. д., ожидая героев, которые заинтересованы в том, чтобы сосредоточиться на исследованиях и разработках мобильных терминалов в течение многих лет. Добро пожаловать, чтобы отправить свое резюме: hui.zhou#dianping.com.