Мониторинг C и C++ приложений с помощью Datadog RUM

Источник: Datadog•

Мониторинг C и C++ приложений с помощью Datadog RUM

Используйте Datadog RUM для расследования сбоев нативных приложений на C и C++, отслеживания пользовательской активности и мониторинга рабочих процессов на настольных и других нативных ПК-приложениях.

Когда нативное приложение на C или C++ дает сбой на устройстве пользователя, вы часто имеете ограниченное представление о том, что стало причиной ошибки. Трассировка стека может определить затронутый код, но она не показывает, что пользователь делал до сбоя или сталкивались ли другие пользователи с той же проблемой. Без этого контекста вам может потребоваться восстанавливать события, предшествовавшие сбою, или воспроизводить проблему локально в среде, которая может не совпадать с устройством пользователя.

Datadog C++ SDK теперь расширяет возможности Datadog Real User Monitoring (RUM) на нативные приложения на C и C++, работающие под управлением Windows, macOS и Linux. SDK собирает диагностику сбоев, отслеживает ошибки и фиксирует инструментированную активность пользователей, помогая устранять неполадки в контексте тех пользовательских сеансов, в которых они произошли.

В этой статье мы рассмотрим, как:

  • Перехватывайте и устраняйте сбои в нативных C и C++ приложениях

Перехватывайте и устраняйте сбои в нативных C и C++ приложениях

  • Отслеживайте активность пользователей с помощью контекста сеансов RUM

Отслеживайте активность пользователей с помощью контекста сеансов RUM

  • Интегрируйте RUM в нативные C и C++ приложения

Интегрируйте RUM в нативные C и C++ приложения

Перехватывайте и устраняйте сбои в нативных C и C++ приложениях

SDK поддерживает отчеты о нативных сбоях и отслеживание ошибок (Error Tracking), чтобы помочь вам диагностировать необработанные сбои. В Linux и macOS он перехватывает такие сигналы, как SIGSEGV (ошибки сегментации) и SIGABRT (аварийное завершение), а в Windows — необработанные структурные исключения. Полученные отчеты о сбоях включают трассировку стека, которая помогает определить, где произошел сбой и чем он был вызван.

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

Выберите обработчик сбоев для вашего приложения

SDK предлагает два обработчика сбоев:

  • Внутрипроцессный обработчик, который фиксирует сбои внутри самого приложения

Внутрипроцессный обработчик, который фиксирует сбои внутри самого приложения

  • Внепроцессный обработчик, который собирает более подробную диагностику сбоев

Внепроцессный обработчик, который собирает более подробную диагностику сбоев

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

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

Оба обработчика сбоев передают ошибки RUM, дополненные актуальным контекстом RUM на момент сбоя, включая сеанс и последнее активное представление. Вы можете использовать этот контекст для исследования сбоев наряду с остальными данными сеанса в системе отслеживания ошибок (Error Tracking). Временная шкала сеанса RUM также позволяет просмотреть действия пользователя, загрузки представлений и сетевые запросы, предшествовавшие сбою, что поможет восстановить картину произошедшего перед тем, как приложение завершилось с ошибкой.

Выявляйте повторяющиеся сбои и отслеживайте обработанные ошибки

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

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

Отслеживайте активность пользователей с помощью контекста сеансов RUM

Поскольку SDK не привязан к конкретному UI-фреймворку, вы самостоятельно определяете события, отражающие взаимодействие пользователей с вашим приложением, а SDK связывает их с сеансами RUM. Например, вы можете настроить инструментирование настольного приложения для сбора следующих данных:

  • Представления: Экраны или состояния приложения, такие как редактор документов, страница настроек или файловый менеджер

Представления: Экраны или состояния приложения, такие как редактор документов, страница настроек или файловый менеджер

  • Действия: Пользовательские взаимодействия, такие как выбор файла, нажатие кнопки или запуск экспорта

Действия: Пользовательские взаимодействия, такие как выбор файла, нажатие кнопки или запуск экспорта

  • Ресурсы: Сетевые запросы и их результаты, включая тайм-ауты и другие сбои

Ресурсы: Сетевые запросы и их результаты, включая тайм-ауты и другие сбои

  • Операции: Многоэтапные рабочие процессы, такие как открытие документа, аутентификация пользователя или выгрузка файла

Операции: Многоэтапные рабочие процессы, такие как открытие документа, аутентификация пользователя или выгрузка файла

  • Длительные задачи: Задержки, блокирующие основной поток на длительное время, например, если обновление кадра или обработчик событий превышают допустимый лимит времени

Длительные задачи: Задержки, блокирующие основной поток на длительное время, например, если обновление кадра или обработчик событий превышают допустимый лимит времени

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

Интегрируйте RUM в нативные C и C++ приложения

SDK предоставляет C++ API для кодовых баз, ориентированных на C++17 и выше, а также совместимый с C99 C API. Оба варианта работают со стандартными средами сборки, включая проекты на базе CMake. Вы также можете обернуть C API в привязки внешнего интерфейса функций (FFI) для инструментирования приложений, написанных на других языках и рантаймах.

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

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

Начните мониторинг нативных приложений с помощью Datadog RUM

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

Информацию по настройке см. в документации по настройке C++ SDK и в репозитории open source C++ SDK на GitHub.

Если вы еще не являетесь клиентом Datadog, зарегистрируйтесь для получения бесплатной 14-дневной пробной версии, чтобы начать мониторинг нативных C и C++ приложений с помощью Datadog RUM.

О чём эта статья

Ещё в разделе «Данные и аналитика»

Все →

Ещё от Datadog