Отслеживание Java-движка второго поколения
Я пытаюсь получить некоторую пользовательскую трассировку и трассировку Firestore, добавленную в Java-движок приложения второго поколения.
Из коробки я уже вижу, что мои WebServlets вызываются и обращаются к клиентской библиотеке задач в моей облачной консоли.
Но добавление новых следов не работает, а также я не вижу следов в пожарном депо.
Я попытался добавить новые следы в соответствии с документацией Google и OpenCencus
try (Scope scope = tracer.spanBuilder("myTrace").startScopedSpan()) {
// do some http requests
}
Когда я регистрируюсь StackdriverTraceExporter.createAndRegister()
я получаю сообщение об ошибке, которое говорит мне, что оно уже настроено. Что имеет смысл, так как я уже вижу следы HttpServlet. Но я не могу найти свои собственные следы.
Также, когда я проверяю источник клиентской библиотеки firestore, он также добавляет следы, как и ожидалось, но они не отображаются в облачной консоли.
У кого-нибудь есть идея, что мне не хватает или где можно получить помощь?
0 ответов
Обратите внимание, что OpenCensus на App Engine является документально не поддерживается. Однако в тех случаях, которые я пробовал, это действительно работает.
Я попытался выполнить трассировку из App Engine Standard Java 8 с OpenCensus и смог заставить его работать без ошибок. Тестовое приложение, которое я пробовал, основано на Quickstart for Java 8 for App Engine Standard Environment с трассировкой на основе OpenCensus Tracing Quickstart и Stackdriver Export library. Проблема, с которой вы столкнулись, может быть связана с использованием библиотек Firestore и Spanner, которые я не пробовал. Spanner и многие другие библиотеки GCP API имеют встроенные инструменты с OpenCensus, но это не должно останавливать вас от добавления собственной трассировки. Я также пробовал работать с Datastore, используя клиентскую библиотеку App Engine Datastore. Он работал без ошибок, но я обнаружил, что для вызовов Datastore не было создано никаких интервалов.
/*
* Copyright 2019 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.appengine.java8;
import com.google.appengine.api.utils.SystemProperty;
import io.opencensus.common.Scope;
import io.opencensus.exporter.trace.stackdriver.StackdriverTraceConfiguration;
import io.opencensus.exporter.trace.stackdriver.StackdriverTraceExporter;
import io.opencensus.trace.AttributeValue;
import io.opencensus.trace.Span;
import io.opencensus.trace.Status;
import io.opencensus.trace.Tracing;
import io.opencensus.trace.Tracer;
import io.opencensus.trace.config.TraceConfig;
import io.opencensus.trace.config.TraceParams;
import io.opencensus.trace.samplers.Samplers;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "OCAppEngineTest", value = "/main")
public class OCAppEngineTest extends HttpServlet {
@Override
public void destroy() {
Tracing.getExportComponent().shutdown();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
Tracer tracer = Tracing.getTracer();
try (Scope scope = tracer.spanBuilder("main").startScopedSpan()) {
Properties properties = System.getProperties();
response.setContentType("text/plain");
response.getWriter().println("Hello App Engine - Standard using "
+ SystemProperty.version.get() + " Java "
+ properties.get("java.specification.version"));
}
}
public static String getInfo() {
return "Version: " + System.getProperty("java.version")
+ " OS: " + System.getProperty("os.name")
+ " User: " + System.getProperty("user.name");
}
@Override
public void init() throws ServletException {
try {
setupOpenCensusAndStackdriverExporter();
} catch (IOException e) {
// log message
}
}
private void setupOpenCensusAndStackdriverExporter()
throws IOException {
String appId = SystemProperty.applicationId.get();
StackdriverTraceExporter.createAndRegister(
StackdriverTraceConfiguration.builder()
.setProjectId(appId)
.build());
TraceConfig traceConfig = Tracing.getTraceConfig();
TraceParams activeTraceParams = traceConfig.getActiveTraceParams();
traceConfig.updateActiveTraceParams(
activeTraceParams.toBuilder().setSampler(
Samplers.alwaysSample()).build());
}
}
Тестовое приложение генерирует такие следы. Обратите внимание, что агент трассировки - это opencensus-java, который отличается от встроенной интеграции App Engine Cloud Trace.