Трассировка в разработке программного обеспечения относится к процессу сбора и записи информации о выполнении программы. Эта информация обычно используется программистами в целях отладки , а также, в зависимости от типа и детализации информации, содержащейся в журнале трассировки, опытными системными администраторами или персоналом службы технической поддержки , а также средствами мониторинга программного обеспечения для диагностики распространенных проблем с программным обеспечением. [1] Отслеживание является комплексной задачей .
Не всегда существует четкое различие между отслеживанием и другими формами ведения журнала , за исключением того, что термин «отслеживание» почти никогда не применяется к ведению журнала, которое является функциональным требованием программы (поэтому исключая регистрацию данных из внешнего источника, например, сбор данных в эксперимент по физике высоких энергий и упреждающая запись в журнал ). Журналы, в которых регистрируется использование программы (например, журнал сервера ) или события операционной системы, представляющие в первую очередь интерес для системного администратора (см., например, «Просмотр событий »), попадают в терминологическую серую зону.
Трассировка в основном используется для обнаружения аномалий, анализа ошибок, отладки или диагностики в распределенных программных системах, таких как микросервисы или бессерверные функции. [2]
Трассировка программного обеспечения — это инструмент, позволяющий разработчикам собирать информацию для отладки. Эта информация используется как во время циклов разработки, так и после выпуска. В отличие от регистрации событий, программная трассировка обычно не имеет понятия «класса» события или «кода события». Другие причины, по которым решения для регистрации событий на основе кодов событий не подходят для отслеживания программного обеспечения, включают:
OpenTelemetry — это проект CNCF с открытым исходным кодом, который обеспечивает комплексную поддержку распределенной трассировки. [3] Некоторые поставщики, включая Datadog , New Relic , Splunk, также предлагают услуги SaaS по отслеживанию. [4]
Google и Meta разработали собственные системы отслеживания, а именно Dapper и Canopy. [2]
В операционных системах трассировку можно использовать в ситуациях (например, при загрузке ), когда некоторые технологии, используемые для регистрации событий, могут быть недоступны.
Linux предлагает возможности трассировки на уровне системы и пользователя с помощью маркеров ядра и LTTng . ftrace также поддерживает трассировку ядра Linux. syslog — это еще один инструмент в различных операционных системах для регистрации и отслеживания системных сообщений.
FreeBSD и SmartOS используют DTrace для трассировки ядра и пользовательской среды.
Во встроенном программном обеспечении трассировка также требует специальных методов для эффективного инструментирования и ведения журналов, а также низкой нагрузки на процессор. [6]
Генерация трассировки вызовов методов может выполняться с помощью инструментирования исходного кода, сбора информации во время выполнения или под управлением отладчика. [7] Можно использовать отслеживание меток, аспектно-ориентированное программирование и связанные с ним методы инструментирования .
Библиотеки, используемые в исходном коде, отправляют данные агенту или непосредственно компоненту сбора. [4]
Для моделирования деревьев выполнения ISVis преобразует корневое дерево в ориентированный ациклический граф, а Jinsight использует принцип кадра вызова для сбора и представления совокупной информации о трассировках. [7]
Основным методом визуализации является представление дорожки, примером которого являются такие инструменты, как Jaeger , и часто включает аннотации и атрибуты «ключ-значение». Несмотря на широкое использование, этому дизайну не хватает строгого обоснования, и пользователи часто сталкиваются с такими проблемами, как отсутствие функций и запутанная навигация. Существуют альтернативы представлениям «дорожки», такие как представление зависимостей служб Jaeger или представления «Список», «Дерево» и «Таблица» SkyWalking. Агрегированные визуализации также используются для анализа больших объемов трассировок: такие системы, как Canopy, предлагают запрашиваемые метрики, а Jaeger — функции сравнения трассировок. [8]
Регистрация событий предоставляет системным администраторам информацию, полезную для диагностики и аудита . Различные классы событий, которые будут регистрироваться, а также сведения, которые будут отображаться в сообщениях о событиях, часто рассматриваются на ранних этапах цикла разработки. Многие технологии регистрации событий позволяют или даже требуют присвоения каждому классу событий уникального «кода», который используется программным обеспечением регистрации событий или отдельным средством просмотра (например, Event Viewer) для форматирования и вывода удобочитаемого сообщения. Это облегчает локализацию и позволяет системным администраторам легче получать информацию о возникающих проблемах.
Поскольку регистрация событий используется для регистрации информации высокого уровня (часто информации об ошибках), производительность реализации регистрации часто менее важна.
Особая проблема, предотвращающая «слишком частую» запись повторяющихся событий, решается посредством регулирования событий.
Трудности в проведении четкого различия между регистрацией событий и программной трассировкой возникают из-за того, что для обеих используются одни и те же технологии, а также из-за того, что многие критерии, которые различают эти два понятия, являются непрерывными, а не дискретными. В следующей таблице перечислены некоторые важные, но ни в коем случае не точные и универсальные различия, которые используются разработчиками при выборе технологий для каждой цели и которые определяют отдельную разработку новых технологий в каждой области:
Включение или отключение трассировки во время выполнения часто требует включения дополнительных данных в двоичный файл. Это может привести к снижению производительности, даже если трассировка не активна.
Если трассировка включена или отключена во время компиляции , сбор данных трассировки из системы клиента зависит от его желания и возможности установить версию программного обеспечения, специально предназначенную для отслеживания, и впоследствии воспроизвести проблему.
Трассировка в программном обеспечении обычно требует высоких стандартов надежности не только в отношении точности и надежности результатов трассировки, но также и в обеспечении непрерывности отслеживаемого процесса.
Учитывая низкоуровневый характер трассировки, она может генерировать большой объем сообщений. Чтобы снизить проблемы с производительностью, часто необходимо иметь возможность отключить трассировку программного обеспечения либо во время компиляции, либо во время выполнения.
В несвободном программном обеспечении данные отслеживания могут включать конфиденциальную информацию об исходном коде продукта .