Tüm Ürünler
Search
Belge Merkezi

Application Real-Time Monitoring Service:Jaeger kullanarak Java uygulama verilerini raporlama

Son Güncelleme:Oct 06, 2026

Uygulamanızı Jaeger ile izlemeye aldıktan ve izleme verilerini Managed Service for OpenTelemetry hizmetine raporladıktan sonra, Managed Service for OpenTelemetry uygulamanızı izlemeye başlar. Uygulama topolojisi, izler, anormal işlemler, yavaş işlemler ve SQL analizi gibi bir dizi izleme verisini görüntüleyebilirsiniz. Bu konuda, manuel izleme ve Spring Cloud ile gRPC bileşenlerini kullanarak otomatik izleme adımları açıklanmaktadır.

Önemli

Gelişmiş özellikler ve izleme yetenekleri için uygulamanızı OpenTelemetry protokolünü kullanarak Managed Service for OpenTelemetry hizmetine bağlamanızı öneririz.

Ayrıntılı OpenTelemetry entegrasyon kılavuzlarımız ve en iyi uygulamalarımız, Managed Service for OpenTelemetry hizmetini kullanmaya başlamanıza yardımcı olur. Daha fazla bilgi için bkz. Uygulama bağlama.

Ön koşullar

Uç nokta bilgilerini alma

  1. ARMS konsolu adresinde oturum açın. Sol gezinme bölmesinde Integration Center seçeneğini tıklayın.

  2. Server-side Applications alanında Jaeger kartını tıklayın.

  3. Jaeger panelinde verileri raporlamak istediğiniz bölgeyi seçin.

    Not

    Kaynaklar, bir bölgeye ilk erişiminizde otomatik olarak sağlanır.

  4. Bir Connection Type ve bir Export Protocol seçin, ardından uç nokta bilgilerini kopyalayın.

    • Bağlantı Türü: Hizmetiniz Alibaba Cloud üzerinde dağıtılmışsa ve bölgesi seçilen entegrasyon bölgesiyle aynıysa Alibaba Cloud VPC ağını kullanın. Aksi takdirde genel ağı kullanın.

    • Dışa Aktarma Protokolü: İstemcinizin desteklediği protokolü seçin. Örneğin, gRPC'yi seçebilirsiniz.

    Uç nokta bilgileri sayfasında bölgeyi China (Hangzhou) olarak, Connection Type değerini Alibaba Cloud VPC network olarak ve Export Protocol değerini gRPC olarak ayarlayın. Uç noktayı almak için örnek komut: ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-hz-internal.aliyuncs.com:1883 --agent.tags=Authentication. Not: Jaeger Agent 1.15'ten önceki sürümler için --agent.tags ifadesini --jaeger.tags ile değiştirin.

Arka plan bilgileri

Jaeger, OpenTracing API ile uyumlu açık kaynaklı dağıtılmış bir izleme sistemidir ve Cloud Native Computing Foundation (CNCF) mezun projesidir. Çeşitli heterojen sistemlerden gerçek zamanlı izleme verilerini toplar. OpenTracing topluluğu, çok sayıda Java çerçevesini destekleyen birçok bileşen sağlar. Örnekler şunlardır:

Java uygulama verilerini Jaeger kullanarak Managed Service for OpenTelemetry konsoluna raporlamak için öncelikle uygulamayı izlemeye almanız gerekir. Manuel izleme yapabilir veya otomatik izleme için çeşitli mevcut eklentileri kullanabilirsiniz. Bu konuda aşağıdaki üç izleme yöntemi açıklanmaktadır.

  • Manuel izleme

  • Spring Cloud bileşeni kullanarak izleme

  • gRPC bileşeni kullanarak izleme

Veriler nasıl raporlanır?

  • Aşağıdaki şekilde Jaeger aracı kullanılmadan verilerin nasıl raporlandığı gösterilmektedir.

    image
  • Aşağıdaki şekilde Jaeger aracı kullanılarak verilerin nasıl raporlandığı gösterilmektedir.

    image

Java uygulamasını izlemeye alma

Bir Java uygulamasının verilerini Managed Service for OpenTelemetry hizmetine göndermek için Jaeger'i kullanmadan önce uygulamayı izlemeye almanız gerekir. Bu örnekte uygulama manuel olarak izlemeye alınmıştır.

  1. Demo projesini indirin. manualDemo dizinine gidin ve programı README.md dosyasındaki talimatlara göre çalıştırın.

  2. pom.xml dosyasına Jaeger istemcileri için aşağıdaki bağımlılığı ekleyin:

    <dependency>
        <groupId>io.jaegertracing</groupId>
        <artifactId>jaeger-client</artifactId>
        <version>0.31.0</version>
    </dependency>
  3. Başlatma parametrelerini yapılandırın ve bir izleyici oluşturun.

    Bir izleyici, dağıtılmış işlem süresini kaydetmek için span'lar oluşturmak, Extract veya Inject yöntemini kullanarak verileri sunucular arasında doğrudan iletmek veya geçerli span'ı belirtmek için kullanılabilir. İzleyici ayrıca veri raporlamada kullanılan uç nokta, yerel IP adresi, örnekleme oranı ve hizmet adı gibi verileri de içerir. Veri raporlamadan kaynaklanan ek yükleri azaltmak için örnekleme oranını ayarlayabilirsiniz.

    Not

    <endpoint> ifadesini bu konunun "Ön koşullar" bölümünde aldığınız uç nokta ile değiştirin.

    // Replace manualDemo with your application name.
    io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("manualDemo");
    io.jaegertracing.Configuration.SenderConfiguration sender = new io.jaegertracing.Configuration.SenderConfiguration();
    // Replace <endpoint> with the endpoint that you obtained in the "Prerequisites" section of this topic. 
    sender.withEndpoint("<endpoint>");
    config.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType("const").withParam(1));
    config.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withSender(sender).withMaxQueueSize(10000));
    // Set resource tags, such as the application version and deployment environment.
    Map<String, String> map = new HashMap<>();
    map.put("service.version", "1.0.0");
    map.put("deployment.environment", "test");
    config.withTracerTags(map);
    GlobalTracer.register(config.getTracer());
  4. İstek verilerini kaydedin.

    Tracer tracer = GlobalTracer.get();
    // Create a span. 
    Span span = tracer.buildSpan("parentSpan").withTag("myTag", "spanFirst").start();
    tracer.scopeManager().activate(span, false);
    tracer.activeSpan().setTag("methodName", "testTracing");
    // The business logic. 
    secondBiz();
    span.finish();
  5. İsteğe bağlı. Bir isteğin kök işlemini kaydetmek için bir kök span oluşturmak amacıyla önceki kodu çalıştırabilirsiniz. Bir isteğin önceki ve sonraki işlemlerini kaydetmek istiyorsanız bağlam bilgilerini belirtin.

    Tracer tracer = GlobalTracer.get();
    Span parentspan = tracer.activeSpan();
    Tracer.SpanBuilder spanBuilder = tracer.buildSpan("childSpan").withTag("myTag", "spanSecond");
    if (parentspan !=null) {
        spanBuilder.asChildOf(parentspan).start();
    }
    Span childSpan = spanBuilder.start();
    Scope scope = tracer.scopeManager().activate(childSpan); // The statement is executed once when the request starts.
    // The business logic.  The buildSpan function can be executed multiple times.
    childSpan.finish();
    tracer.activeSpan().setTag("methodName", "testCall");
    
    // The statement is executed once when the request ends.
    scope.close();
  6. İsteğe bağlı. Sorunları verimli bir şekilde gidermek için bir span'a özel etiketler ekleyebilirsiniz. Örneğin, bir hata oluşup oluşmadığını kontrol etmek veya bir isteğin döndürülen değerini kaydetmek için özel bir etiket ekleyebilirsiniz.

    tracer.activeSpan().setTag("methodName", "testCall");
  7. Dağıtılmış bir sistemde uzak yordam çağrısı (RPC) istekleri izleme verileriyle birlikte gönderilir. İzleme verileri TraceId, ParentSpanId, SpanId ve Sampled parametrelerinin değerlerini içerir. İzleme verilerini HTTP istek üstbilgilerinde doğrudan iletmek için Extract veya Inject yöntemini çağırabilirsiniz. Aşağıdaki şekil tüm süreci göstermektedir.

    1.jpg

    1. İstemcide bağlam bilgilerini belirtmek için Inject yöntemini çağırın.

      private void attachTraceInfo(Tracer tracer, Span span, final Request request) {
              tracer.inject(span.context(), Format.Builtin.TEXT_MAP, new TextMap() {
                  @Override
                  public void put(String key, String value) {
                      request.setHeader(key, value);
                  }
                  @Override
                  public Iterator<Map.Entry<String, String>> iterator() {
                      throw new UnsupportedOperationException("TextMapInjectAdapter should only be used with Tracer.inject()");
                  }
              });
          }
    2. Sunucuda bağlam bilgilerini çıkarmak için Extract yöntemini çağırın.

      protected Span extractTraceInfo(Request request, Tracer tracer) {
          Tracer.SpanBuilder spanBuilder = tracer.buildSpan("/api/xtrace/test03");
          try {
              SpanContext spanContext = tracer.extract(Format.Builtin.TEXT_MAP, new TextMapExtractAdapter(request.getAttachments()));
              if (spanContext !=null) {
                  spanBuilder.asChildOf(spanContext);
              }
          } catch (Exception e) {
              spanBuilder.withTag("Error", "extract from request fail, error msg:" + e.getMessage());
          }
          return spanBuilder.start();
      }
                                      

Spring Cloud ile Java uygulamasını izlemeye alma

Java uygulama verilerini Jaeger kullanarak Managed Service for OpenTelemetry konsoluna raporlamak için öncelikle izleme işlemi uygulamanız gerekir. Bu örnekte izleme için Spring Cloud bileşenleri kullanılır. Spring Cloud aşağıdaki bileşenler için izleme işlevi sağlar:

  • @Async, @Scheduled, Executors

  • Feign, HystrixFeign

  • Hystrix

  • JDBC

  • JMS

  • Mongo

  • RabbitMQ

  • Redis

  • RxJava

  • Spring Messaging - İzler mesaj kanalları üzerinden gönderilir.

  • Spring Web (RestControllers, RestTemplates, WebAsyncTask)

  • Standart Günlük Kaydı - Günlükler geçerli Span'a eklenir.

  • WebSocket STOMP

  • Zuul

Not

Demo projesini indirin, springMvcDemo/webmvc4-boot dizinine gidin ve programı README dosyasında açıklandığı gibi çalıştırın.

  1. pom.xml dosyasını açın ve JAR bağımlılıklarını ekleyin.

    <dependency>
       <groupId>io.opentracing.contrib</groupId>
      <artifactId>opentracing-spring-cloud-starter</artifactId>
      <version>0.5.8</version>
    </dependency>
    <dependency>
      <groupId>io.jaegertracing</groupId>
      <artifactId>jaeger-client</artifactId>
      <version>1.4.0</version>
    </dependency>
  2. OpenTracing Tracer bean nesnesini ekleyin.

    Not

    <endpoint> ifadesini bu konunun "Ön koşullar" bölümünde aldığınız uç nokta ile değiştirin.

    @Bean
    public io.opentracing.Tracer tracer() {
        io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("springFrontend");
        io.jaegertracing.Configuration.SenderConfiguration sender = new io.jaegertracing.Configuration.SenderConfiguration();
        sender.withEndpoint("<endpoint>");
        config.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType("const").withParam(1));
        config.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withSender(sender).withMaxQueueSize(10000));
        return config.getTracer();
    }

gRPC ile Java uygulamasını izlemeye alma

Java uygulama verilerini Jaeger kullanarak Managed Service for OpenTelemetry konsoluna göndermek için öncelikle uygulamanızı izlemeye almanız gerekir. Bu örnekte izleme için gRPC bileşeni kullanılır.

Not

Demo projesini indirin, grpcDemo dizinine gidin ve programı README dosyasında açıklandığı gibi çalıştırın.

  1. pom.xml dosyasını açın ve JAR bağımlılığını ekleyin.

    <dependency>
        <groupId>io.opentracing.contrib</groupId>
        <artifactId>opentracing-grpc</artifactId>
        <version>0.2.3</version>
    </dependency>
  2. Sunucuda Tracer nesnesini başlatın, bir ServerTracingInterceptor oluşturun ve bunu sunucu engelleyicisi olarak ekleyin.

    import io.opentracing.Tracer;
        public class YourServer {
            private int port;
            private Server server;
            private final Tracer tracer;
            private void start() throws IOException {
                ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor(this.tracer);
                // If GlobalTracer is used: 
                // ServerTracingInterceptor tracingInterceptor = new ServerTracingInterceptor();
                server = ServerBuilder.forPort(port)
                    .addService(tracingInterceptor.intercept(someServiceDef))
                    .build()
                    .start();
            }
        }
  3. İstemcide Tracer nesnesini başlatın, bir ClientTracingInterceptor oluşturun ve bunu istemci kanalı engelleyicisi olarak ekleyin.

    import io.opentracing.Tracer;
        public class YourClient {
            private final ManagedChannel channel;
            private final GreeterGrpc.GreeterBlockingStub blockingStub;
            private final Tracer tracer;
            public YourClient(String host, int port) {
                channel = ManagedChannelBuilder.forAddress(host, port)
                    .usePlaintext(true)
                    .build();
                ClientTracingInterceptor tracingInterceptor = new ClientTracingInterceptor(this.tracer);
                // If GlobalTracer is used: 
                // ClientTracingInterceptor tracingInterceptor = new ClientTracingInterceptor();
                blockingStub = GreeterGrpc.newBlockingStub(tracingInterceptor.intercept(channel));
            }
        }
                            

SSS

S: Demo programım hatasız çalışıyor ancak konsolda hiçbir veri görünmüyor. Sorun ne olabilir?

C: io.jaegertracing.thrift.internal.senders.HttpSender.send(Process process, List<Span> spans) yöntemini hata ayıklama modunda çalıştırın ve veriler raporlandığında dönüş değerini kontrol edin. 403 hatası alınıyorsa uç nokta yapılandırmasının hatalı olduğu anlamına gelir. Lütfen yapılandırmayı kontrol edin ve düzeltin.