Как получить идентификатор трассировки из кода?

Я запускаю приложение Java в стандартной среде Google App Engine.

Глядя на журналы (в частности, request_log), я вижу несколько интересных идентификаторов, таких как trace_id и request_id для каждого запроса.

Пара вопросов:

  • Насколько они разные? Они уникальны?
  • Как получить их в коде приложения (для текущего запроса)? Я хотел бы записать их в другой набор данных Stackdriver и иметь возможность сопоставить данные

person Nikola Mihajlović    schedule 20.06.2018    source источник


Ответы (3)


В обработчике запросов вы можете получить доступ к заголовкам и вытащить X-Cloud-Trace-Context из HttpServletRequest

@WebServlet(name = "requests", description = "Requests: Trivial request", urlPatterns = "/requests")
public class RequestsServlet extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    req.getHeader("X-Cloud-Trace-Context")
  }
}
person Kirk Kelsey    schedule 29.06.2018
comment
Я хочу включить документацию для полноты картины: cloud.google.com/ appengine / docs / flexible / java / reference /. Этот документ не существует для стандартной среды, но он почти такой же - person Nikola Mihajlović; 28.07.2018

Вы можете установить идентификатор трассировки при выполнении HTTP-вызова с помощью X-Cloud-Trace-Context, а идентификатор запроса - это способ, которым GCP должен однозначно идентифицировать каждый запрос.

У всех запросов есть ID, и только у некоторых есть следы. Только отслеживаемые запросы отправят свою информацию в Stackdriver Trace API.

Что касается второго вопроса, я не совсем понимаю его, поскольку Stackdriver Trace API вернет всю информацию о отслеживаемых запросах, включая идентификатор запроса. APi Stackdriver Logging будет возвращать полный журнал для каждого запроса, что означает, что если они отслеживаются, вы получите как идентификатор запроса, так и идентификатор трассировки. Нет необходимости сопоставлять эти два поля, так как вы всегда будете собирать их вместе (если оба существуют).

person Jofre    schedule 20.06.2018
comment
Извините, если я не понял. Я хотел бы регистрировать дополнительные данные (в другой набор данных Stackdriver) из своего веб-приложения и хотел бы получить идентификатор запроса и идентификатор трассировки для текущего запроса программно в коде - person Nikola Mihajlović; 20.06.2018
comment
Да, я вас не понял. Я знаю, что Go может точно получить идентификатор запроса (это язык, который я использую), поэтому я предполагаю, что такая же опция должна быть доступна для Java. - person Jofre; 20.06.2018

TraceID - это просто идентификатор трассировки для конкретного запроса к вашему приложению App Engine, а RequestID - это глобальный уникальный идентификатор запроса. RequestID журнала Stackdriver зависит от времени начала запроса. Между тем TraceID идентифицирует связанную трассировку Stackdriver с определенной записью журнала запросов См. здесь.

Вы можете найти подробную информацию о терминологии, используемой для конкретного журнала запросов Stackdriver, в Ссылка.

RequestID - это уникальный идентификатор, уникальный в глобальном масштабе. TraceID, с другой стороны, уникален для Stackdriver Trace - подробнее здесь .

С помощью Stackdriver Trace API вы можете использовать метод GetTraceRequest в пакете google.devtools.cloudtrace.v1 для получить идентификатор трассировки и идентификатор запроса.

person oakinlaja    schedule 03.07.2018