@LakeForest

Как реализовать отслеживание производительности grpc сервиса на python с помощью sentry?

Полагаю, что мне нужно написать кастомные транзакции.
1. Что означает span? Никак не пойму.
transaction = sentry_sdk.Hub.current.scope.transaction
span = sentry_sdk.Hub.current.scope.span
2. do_task() - вместо этой функции я получается должен вызывать код обработки своих приходящих в grpc-сервер запросов? То есть теперь у меня любой запрос будет проходить через создание транзакции sentry?
Так?
import sentry_sdk

class TestService(
    stt_pb2_grpc.TestService
):

    def Method(
        self, request,
        context
    ):
          transaction = sentry_sdk.Hub.current.scope.transaction

          if transaction is None:
              with sentry_sdk.start_transaction(name="task_method"):
                  response = do_task(request)  # МОЯ ОБРАБОТКА ЗАПРОСА
          else:
              transaction.name = "new name"
              with transaction.start_child(op="task_method"):  # equivalent to `sentry_sdk.start_span`
                  response = do_task(request)
          return response


3. Дальше sentry сам замерит и вышлет в gui результаты?
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
  1. При использовании транзакции, в сентри попадет информация о времени исполнения части кода и операции от открытия этой транзакции до закрытия. Но операция может состоять из множества "тяжелых" секций кода, каждую из которых можно замерить отдельно в рамках транзакции, создав span. Т.е. транзакция может включать несколько span как дочерние операции для детализации происходящего процесса. К примеру, в транзакции "запрос на получение данных" длительностью 15 мс. может иметь span "запрос в БД" с длительностью 5 мс.
  2. Воспользуйтесь первыми двумя примерами - создавайте транзакцию перед вызовом обработки каждого из запросов (1ый пример) и добавляйте к транзакции span'ы по необходимости(2ой пример). Если у вашего сервиса одна точка входа - grpc, то у вас всегда ситуация определена. Входящие запросы гарантировано создадут транзакцию, которую будет использовать весь остальной код.
  3. Да, если если dsn указан корректно.


Не забудьте понизить traces_sample_rate для продакшена, чтобы это не сказалось на производительности сервиса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы