Как добавить информацию в каждый промежуток времени с помощью Spring Cloud Sleuth

В настоящее время я пытаюсь понять, как я могу настроить Spring Cloud Sleuth масштабируемым образом, чтобы добавить информацию к каждому Span.

Что я уже пробовал:

Используя мою собственную реализацию GenericFilterBean а также HandlerInterceptorAdapterдай им Tracer в конструкторе и пишите теги каждый раз, когда они вызываются с tracer.addTag("key", "value")

Я взглянул на идею новой информации о багаже ​​- однако я интерпретирую ее так, чтобы она была глобальной для всей трассы - и поскольку трасса имеет несколько запросов к различным службам / машинам, она не подходит для моей цели добавления информации на уровне обслуживания / машины.

Пока что теги из фильтра и перехватчика устанавливаются для некоторых диапазонов, но не для всех, когда я проверяю JSON, записанный в моей теме кафки через spring-cloud-stream-binder-kafka

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

1 ответ

Решение

Таких мест много... но на самом деле мы можем решить проблему под другим углом. Есть одно место, где вы можете подключиться - когда промежуток закрыт. https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/SpanReporter.java - вы можете создать свою собственную реализацию SpanReporter что перед делегированием, например, Zipkin span reporter добавит тег. Еще проще будет просто зарегистрировать SpanAdjuster bean-компонент, который корректирует диапазон до того, как о нем сообщат Таким образом, вы можете добавить тег только в одном месте.

Другие вопросы по тегам