Трассировка (программное обеспечение)
Часть серии о |
Разработка программного обеспечения |
---|
Трассировка в разработке программного обеспечения относится к процессу сбора и записи информации о выполнении программы. Эта информация обычно используется программистами в целях отладки , а также, в зависимости от типа и детализации информации, содержащейся в журнале трассировки, опытными системными администраторами или персоналом службы технической поддержки , а также средствами мониторинга программного обеспечения для диагностики распространенных проблем с программным обеспечением. [1] Отслеживание является сквозной задачей .
Не всегда существует четкое различие между отслеживанием и другими формами ведения журнала , за исключением того, что термин «отслеживание» почти никогда не применяется к ведению журнала, которое является функциональным требованием программы (поэтому исключая регистрацию данных из внешнего источника, например, сбор данных в эксперимент по физике высоких энергий и упреждающая запись в журнал ). Журналы, в которых регистрируется использование программы (например, журнал сервера ) или события операционной системы, представляющие в первую очередь интерес для системного администратора (см., например, «Просмотр событий» ), попадают в терминологическую серую зону.
Трассировка в основном используется для обнаружения аномалий, анализа ошибок, отладки или диагностики в распределенных программных системах, таких как микросервисы или бессерверные функции. [2]
Программное отслеживание [ править ]
Трассировка программного обеспечения — это инструмент, позволяющий разработчикам собирать информацию для отладки. Эта информация используется как во время циклов разработки, так и после выпуска. В отличие от регистрации событий, программная трассировка обычно не имеет понятия «класса» события или «кода события». Другие причины, по которым решения для регистрации событий на основе кодов событий не подходят для отслеживания программного обеспечения, включают:
- Поскольку трассировка программного обеспечения является низкоуровневой, часто необходимо определить гораздо больше типов сообщений, многие из которых будут использоваться только в одном месте кода. Парадигма кода событий приводит к значительным затратам на разработку таких «однократных» сообщений.
- Типы регистрируемых сообщений часто менее стабильны на протяжении цикла разработки, чем при регистрации событий.
- Поскольку выходные данные трассировки предназначены для использования разработчиком, сообщения не нужно локализовать. Поэтому важно хранить отслеживаемые сообщения отдельно от других ресурсов, которые необходимо локализовать (например, сообщений о событиях).
- Есть сообщения, которые никогда не следует видеть .
- Сообщения трассировки следует хранить в коде, поскольку они могут повысить читаемость кода. Это не всегда возможно или осуществимо при использовании решений для регистрации событий.
Инструменты [ править ]
OpenTelemetry — это проект CNCF с открытым исходным кодом, который обеспечивает комплексную поддержку распределенной трассировки. [3] Некоторые поставщики, включая Datadog , New Relic , Splunk, также предлагают услуги SaaS по отслеживанию. [4]
Google и Meta разработали свои собственные системы отслеживания, а именно Dapper и Canopy. [2]
Отслеживание конкретных приложений [ править ]
- Отслеживание с помощью GNU Debugger команды трассировки отладчика [5]
- Трассировка приложений Linux C/C++ с помощью cwrap
- Трассировка приложений Linux с помощью UST – часть того же проекта, что и LTTng
- Препроцессор трассировки программного обеспечения Windows (он же WPP)
- Моделирование набора команд
Системное отслеживание [ править ]
В операционных системах трассировку можно использовать в ситуациях (например, при загрузке ), когда некоторые технологии, используемые для регистрации событий, могут быть недоступны.
Linux предлагает возможности трассировки на уровне системы и пользователя с помощью маркеров ядра и LTTng . ftrace также поддерживает трассировку ядра Linux. syslog — еще один инструмент в различных операционных системах для регистрации и отслеживания системных сообщений.
FreeBSD и SmartOS используют DTrace для трассировки ядра и пользовательской среды.
Во встроенном программном обеспечении трассировка также требует специальных методов для эффективного инструментирования и ведения журналов, а также низкой нагрузки на процессор. [6]
Техники [ править ]
Генерация и сбор трассировок [ править ]
Генерация трассировки вызовов методов может выполняться с помощью инструментирования исходного кода, сбора информации во время выполнения или под управлением отладчика. [7] макросы трассировки, аспектно-ориентированное программирование и соответствующие методы инструментирования Можно использовать .
Библиотеки, используемые в исходном коде, отправляют данные агенту или непосредственно компоненту сбора. [4]
Анализ трасс [ править ]
Для моделирования деревьев выполнения ISVis преобразует корневое дерево в ориентированный ациклический граф, а Jinsight использует принцип кадра вызова для сбора и представления совокупной информации о трассировках. [7]
Основным методом визуализации является представление дорожки, примером которого являются такие инструменты, как Jaeger , и часто включает аннотации и атрибуты «ключ-значение». Несмотря на широкое использование, этому дизайну не хватает строгого обоснования, и пользователи часто сталкиваются с такими проблемами, как отсутствие функций и запутанная навигация. Существуют альтернативы представлениям «дорожки», такие как представление зависимостей служб Jaeger или представления «Список», «Дерево» и «Таблица» SkyWalking. Агрегированные визуализации также используются для анализа больших объемов трассировок: такие системы, как Canopy, предлагают запрашиваемые метрики, а Jaeger — функции сравнения трассировок. [8]
Регистрация событий [ править ]
![]() | Было предложено разделить этот раздел на новую статью под названием «Журнал событий» . ( обсудить ) ( январь 2024 г. ) |
Регистрация событий предоставляет системным администраторам информацию, полезную для диагностики и аудита . Различные классы событий, которые будут регистрироваться, а также сведения, которые будут отображаться в сообщениях о событиях, часто рассматриваются на ранних этапах цикла разработки. Многие технологии регистрации событий позволяют или даже требуют присвоения каждому классу событий уникального «кода», который используется программным обеспечением регистрации событий или отдельным средством просмотра (например, Event Viewer) для форматирования и вывода удобочитаемого сообщения. Это облегчает локализацию и позволяет системным администраторам легче получать информацию о возникающих проблемах.
Поскольку регистрация событий используется для регистрации информации высокого уровня (часто информации об ошибках), производительность реализации регистрации часто менее важна.
Особая проблема, предотвращающая «слишком частую» запись повторяющихся событий, решается посредством регулирования событий.
Трудности в проведении четкого различия между регистрацией событий и программной трассировкой возникают из-за того, что для обеих используются одни и те же технологии, а также из-за того, что многие критерии, которые различают эти два понятия, являются непрерывными, а не дискретными. В следующей таблице перечислены некоторые важные, но ни в коем случае не точные или универсальные различия, которые используются разработчиками для выбора технологий для каждой цели и которые определяют отдельную разработку новых технологий в каждой области:
Регистрация событий | Отслеживание программного обеспечения |
---|---|
Используется в основном системными администраторами | Потребляется в основном разработчиками |
Регистрирует информацию «высокого уровня» (например, неудачная установка программы). | Регистрирует информацию «низкого уровня» (например, выброшенное исключение ). |
Не должно быть слишком «шумным» (содержащим множество повторяющихся событий или информации, бесполезной для целевой аудитории). | Может быть шумно |
Формат вывода , основанный на стандартах , часто желателен, а иногда даже необходим. | Небольшие ограничения на формат вывода. |
Сообщения журнала событий часто локализуются. | Локализация редко вызывает беспокойство |
Добавление новых типов событий, а также новых сообщений о событиях не должно быть гибким. | Добавление новых сообщений о отслеживании должно быть быстрым. |
и ограничения Проблемы
Включение или отключение трассировки во время выполнения часто требует включения дополнительных данных в двоичный файл. Это может привести к снижению производительности, даже если трассировка не активна.
Если трассировка включена или отключена во время компиляции , сбор данных трассировки из системы клиента зависит от его желания и возможности установить версию программного обеспечения, специально предназначенную для отслеживания, и впоследствии воспроизвести проблему.
Трассировка в программном обеспечении обычно требует высоких стандартов надежности не только в отношении точности и надежности результатов трассировки, но также и в обеспечении непрерывности отслеживаемого процесса.
Учитывая низкоуровневый характер трассировки, она может генерировать большой объем сообщений. Чтобы снизить проблемы с производительностью, часто необходимо иметь возможность деактивировать трассировку программного обеспечения либо во время компиляции, либо во время выполнения.
Безопасность и конфиденциальность [ править ]
В несвободном программном обеспечении продукта данные отслеживания могут включать конфиденциальную информацию об исходном коде .
См. также [ править ]
- Трассировка ветвей
- Отладка
- Инструментарий (компьютерное программирование)
- Ведение журнала
- Наблюдаемость (программное обеспечение)
Ссылки [ править ]
- ^ «Книга розыска» . Архивировано из оригинала 24 февраля 2009 г.
- ↑ Перейти обратно: Перейти обратно: а б Ли, Боуэн; Пэн, Синь; Сян, Цилинь; Ван, Ханьчжан; Се, Тао; Вс, июнь; Лю, Сюаньчжэ (2022). «Наслаждайтесь своей наблюдательностью: промышленное исследование трассировки и анализа микросервисов» . Эмпирическая программная инженерия . 27 (1): 25. дои : 10.1007/s10664-021-10063-9 . ISSN 1382-3256 . ПМЦ 8629732 . ПМИД 34867075 .
- ^ Мандель, Майя (7 июня 2023 г.). «Сообщение Совета: Распределенная трассировка: ключ к наблюдаемости микросервисов» . Форбс . Проверено 12 января 2024 г.
- ↑ Перейти обратно: Перейти обратно: а б Джейнс, Андреа; Ли, Сяочжоу; Ленардуцци, Валентина (2023). «Открытые инструменты трассировки: обзор и критическое сравнение» . Журнал систем и программного обеспечения . 204 . Elsevier BV: 111793. arXiv : 2207.06875 . дои : 10.1016/j.jss.2023.111793 . ISSN 0164-1212 .
- ^ «Точки трассировки (отладка с помощью GDB)» . исходное программное обеспечение.org . Проверено 24 июня 2022 г.
- ^ Крафт, Йохан; Уолл, Андерс; Кинле, Хольгер (2010), «Запись трассировки для встраиваемых систем: уроки, извлеченные из пяти промышленных проектов» , Проверка времени выполнения , Springer Berlin Heidelberg, стр. 315–329, doi : 10.1007/978-3-642-16612-9_24 , ISBN 9783642166112
- ↑ Перейти обратно: Перейти обратно: а б Мерц, Джонни; Нуньес, Ингрид (2019). О практической возможности мониторинга программного обеспечения: основа для отслеживания выполнения с низким уровнем воздействия . CASCON '04: Материалы конференции Центра перспективных исследований по совместным исследованиям 2004 г. IEEE. стр. 169–180. дои : 10.1109/SEAMS.2019.00030 . ISBN 978-1-7281-3368-3 .
- ^ «Качественное интервью с визуализацией распределенной трассировки: характеристика проблем и возможностей» . IEEE Эксплор . 01 февраля 2023 г. Проверено 12 января 2024 г.