IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Golang OpenTelemetry: фиксация ошибки span.RecordError(err)

span.RecordError(err) — это метод OpenTelemetry, который позволяет зафиксировать информацию об ошибке в текущем Span. Эта информация станет частью трассировки и поможет разработчикам проанализировать, что пошло не так.


Как работает RecordError?

  • Фиксация ошибки в Span: Метод записывает ошибку (err) как событие типа exception в Span.
  • Добавление стандартных атрибутов: OpenTelemetry автоматически добавляет к событию стандартные атрибуты, такие как тип ошибки и её текстовое сообщение.

Когда использовать RecordError?

  1. Обработка ошибок: Если во время выполнения кода возникает ошибка, её стоит записать в текущий Span.
  2. Дополнительная информация: RecordError полезен для анализа ошибок, так как записанные данные будут видны в системе мониторинга.

Что записывает RecordError?

  1. Тип ошибки (exception.type):
    • Отражает тип ошибки (например, *errors.errorString).
  2. Сообщение об ошибке (exception.message):
    • Текст ошибки (err.Error()).
  3. (Опционально) Стек-трейс (exception.stacktrace):
    • Если стек-трейс доступен, его можно передать вручную.

Как добавить стек-трейс вручную?

OpenTelemetry не всегда автоматически добавляет стек-трейс. Вы можете использовать библиотеку runtime/debug или другие инструменты для этого.

Пример:

Использование:

Чем полезен RecordError?

  1. Улучшает видимость ошибок:
    • Ошибки становятся частью трассировки, их легко просмотреть в системах мониторинга (например, Jaeger, Zipkin).
  2. Сопоставление ошибок с контекстом:
    • Ошибки связываются с конкретным Span, что помогает понять, где именно произошла ошибка.
  3. Снижение ручной работы:
    • Атрибуты ошибок добавляются автоматически.

Частые ошибки при использовании

  1. Неуказание статуса Error:
    • Запись ошибки с помощью RecordError не устанавливает статус Error. Для этого нужно явно вызвать:

       

  1. Избыточное количество записей:
    • Не стоит записывать одну и ту же ошибку несколько раз. Это может загрязнить трейс.
  2. Игнорирование контекста:
    • Убедитесь, что контекст правильно передаётся, чтобы ошибка была записана в нужный Span.

Итог

Метод span.RecordError(err) — это эффективный способ записать ошибки в OpenTelemetry. Используйте его для:

  • Фиксации подробностей об ошибках.
  • Добавления ошибок в трейс.
  • Улучшения диагностики в распределённых системах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *