Отслеживание движка Java-приложений второго поколения

Я пытаюсь добавить некоторую настраиваемую трассировку и трассировку Firestore в Java-приложение движка приложений второго поколения.

Из коробки я уже вижу, что мои WebServlets вызываются и обращаются к клиентской библиотеке задач в моей облачной консоли.

Но добавление новых следов не работает, и я также не вижу следов от firestore.

Я попытался добавить новые трассировки в соответствии с google и документация по opencencus

try (Scope scope = tracer.spanBuilder("myTrace").startScopedSpan()) {
  // do some http requests
}

Когда я регистрируюсь StackdriverTraceExporter.createAndRegister(), я получаю сообщение об ошибке, в котором говорится, что он уже настроен. Это имеет смысл, поскольку я уже вижу следы HttpServlet причала. Но я не могу найти своих следов.

Также, когда я проверяю источник клиентской библиотеки firestore Он также добавляет трассировки, как и ожидалось, но они не отображаются в облачной консоли.

Кто-нибудь знает, что мне не хватает или где получить помощь?


person Carsten Rietz    schedule 23.05.2019    source источник


Ответы (1)


Обратите внимание, что OpenCensus в App Engine задокументирован как неподдерживаемый. Однако в тех случаях, которые я пробовал, это действительно работает.

Я попытался выполнить трассировку из App Engine Standard Java 8 с OpenCensus и смог заставить его работать без ошибок. Тестовое приложение, которое я пробовал, основано на Quickstart for Java 8 for App Engine Standard. Среда с трассировкой на основе краткого руководства по трассировке OpenCensus и библиотека Stackdriver Export. Проблема, с которой вы столкнулись, может быть связана с использованием библиотек Firestore и Spanner, которые я не пробовал. Spanner и многие другие библиотеки GCP API имеют встроенные инструменты с OpenCensus, но это не должно останавливать вас от добавления собственной трассировки. Я также пробовал работать с Datastore, используя клиентскую библиотеку App Engine 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.  введите описание изображения здесь

person alexamies    schedule 28.06.2019