全部产品
Search
文档中心

Function Compute:Analisis Tracing

更新时间:Jul 02, 2025

Tema ini menjelaskan fitur Analisis Tracing dalam lingkungan runtime Node.js.

Latar Belakang

Analisis Tracing Alibaba Cloud mengadopsi standar OpenTracing dan kompatibel dengan komunitas sumber terbuka. Fitur ini membantu pengembang aplikasi terdistribusi untuk menanyakan dan mendiagnosis jejak terdistribusi, menemukan topologi terdistribusi secara dinamis, serta merangkum kinerja aplikasi secara real-time.

Function Compute terintegrasi dengan Analisis Tracing. Anda dapat menggunakan Jaeger SDK atau OpenTelemetry untuk mengunggah informasi jejak sehingga dapat melacak pemanggilan fungsi. Analisis Tracing membantu menganalisis dan mendiagnosis hambatan kinerja dalam arsitektur serverless, meningkatkan efisiensi pengembangan dan diagnosis dalam skenario serverless.

Ikhtisar

Anda dapat mengonfigurasi Analisis Tracing di konsol Function Compute. Untuk informasi lebih lanjut, lihat Aktifkan Analisis Tracing.

Setelah mengaktifkan Analisis Tracing untuk layanan, Function Compute secara otomatis mencatat waktu yang dikonsumsi dalam sistem, termasuk waktu cold start, waktu eksekusi fungsi inisialisasi, dan waktu eksekusi fungsi. Untuk detail tentang rentang sistem pada gambar berikut, lihat Deskripsi nama rentang. Tracing Analysis

Anda juga dapat mencatat waktu yang dikonsumsi untuk fungsi di sisi bisnis. Sebagai contoh, Anda dapat mencatat waktu yang diperlukan untuk mengakses layanan seperti ApsaraDB RDS dan File Storage NAS dalam fungsi dengan menggunakan Buat rentang kustom.

Contoh kode

Analisis Tracing untuk Function Compute dalam lingkungan runtime Node.js memungkinkan Anda membuat rentang kustom menggunakan metode berikut berdasarkan implementasi Jaeger dari spesifikasi OpenTracing.

Gunakan SDK untuk OpenTelemetry (direkomendasikan)

Dalam kode Node.js, Anda dapat menggunakan SDK untuk OpenTelemetry untuk melakukan instrumentasi kode dan melaporkan data ke Analisis Tracing. Untuk kode contoh lengkap, lihat nodejs-tracing-openTelemetry.

Berikut adalah rincian dari kode contoh:
  • Konfigurasikan file dependensi package.json di direktori proyek.
      "dependencies": {
        "@opentelemetry/api": "^1.0.2",
        "@opentelemetry/exporter-jaeger": "0.25.0",
        "@opentelemetry/exporter-zipkin": "0.25.0",
        "@opentelemetry/instrumentation": "0.25.0",
        "@opentelemetry/instrumentation-http": "0.25.0",
        "@opentelemetry/resources": "0.25.0",
        "@opentelemetry/semantic-conventions": "0.25.0",
        "@opentelemetry/sdk-trace-node": "0.25.0",
        "@opentelemetry/sdk-trace-base": "0.25.0"
      }
  • Laporkan data ke Analisis Tracing.
    module.exports.handler = function(event, context, callback)
    {
        tracer = require('./tracer')('fc-tracer',context.tracing.jaegerEndpoint);
    
        var spanContext = contextFromString( context.tracing.openTracingSpanContext);
    
        startMySpan(spanContext);
    
        callback(null,'success');
    }
  • Buat objek tracer yang digunakan untuk membuat rentang.
    module.exports = (serviceName,endpoint) => {
      const provider = new NodeTracerProvider({
        resource: new Resource({
          [SemanticResourceAttributes.SERVICE_NAME]: serviceName,
        }),
      });
    
      let exporter = new JaegerExporter({endpoint:endpoint});
    
      provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
      provider.register();
    
      registerInstrumentations({
        instrumentations: [
          new HttpInstrumentation(),
        ],
      });
    
      return opentelemetry.trace.getTracer('http-example');
    };
  • Peroleh informasi tracing dari Context di Function Compute dan konversikan informasi tracing menjadi SpanContext.
    function contextFromString(value){
      const arr = value.split(`:`);
      const spanContext={
        traceId:`0000000000000000`+arr[0],
        spanId:arr[1],
        traceFlags:api.TraceFlags.SAMPLED,
        isRemote:true
      }
      return spanContext;
    }
  • Buat tracer dan gunakan konteks yang telah dikonversi untuk membuat rentang anak. Rentang mewakili potongan kode yang dapat dieksekusi secara terus-menerus yang diberi nama dan waktu dalam jejak pemanggilan. Anda juga dapat membuat rentang anak berdasarkan rentang tersebut.
    function startMySpan(spanContext){
      var FcSpan=api.trace.wrapSpanContext(spanContext);
      var ctx = api.trace.setSpan(api.ROOT_CONTEXT,FcSpan);
      tracer.startActiveSpan("fc-operation",undefined,ctx,parentSpan => {
        parentSpan.setAttribute("version","fc-v1");
        sleep(150);
        child();
        parentSpan.end()
      })
    }
    
    function child(){
      tracer.startActiveSpan("fc-operation-child",span =>{
        sleep(100);
        span.addEvent("timeout");
        span.end();
      })
    }

Gunakan SDK untuk Jaeger

Anda dapat menggunakan SDK untuk Jaeger untuk melakukan instrumentasi kode dan melaporkan data ke Analisis Tracing. Untuk kode contoh lengkap, lihat nodejs-tracing.

Berikut adalah rincian dari kode contoh:
  • Konfigurasikan file dependensi package.json di direktori proyek.
    "dependencies": {
      "jaeger-client": "^3.19.0"
    }
  • Laporkan data ke Analisis Tracing.
    module.exports.handler = function(event, context, callback)
    {
      tracer=newTracer(context);
    
      var invokeSpanContext = spanContext.fromString(context.tracing.openTracingSpanContext);
    
      startMySpan(invokeSpanContext);
    
      callback(null,'success')
    }
  • Buat objek tracer berdasarkan informasi tracing dalam Context.
    function newTracer(context){
      var config = {
        serviceName: 'fc-tracer',
        reporter: {
          // Berikan titik akhir jejak; ini memaksa klien untuk terhubung langsung ke Collector dan mengirim rentang melalui HTTP
          collectorEndpoint: context.tracing.jaegerEndpoint,
          flushIntervalMs: 10,
        },
        sampler: {
          type: "const",
          param: 1
        },
      };
      var options = {
        tags: {
          'version': 'fc-v1',
        },
      };
      var tracer = initTracer(config, options);
      return tracer
    }
  • Konversikan SpanContext dan buat rentang kustom. Anda juga dapat membuat rentang anak berdasarkan rentang tersebut.
    function startMySpan(spanContext){
      var parentSpan = tracer.startSpan("fc-operation", {
        childOf: spanContext
      });
      sleep(150);
      child(parentSpan.context())
      parentSpan.finish();
    }
    
    function child(spanContext){
      var childSpan = tracer.startSpan("fc-operation-child", {
        childOf: spanContext
      });
      childSpan.log({event:"timeout"});
      sleep(100);
      childSpan.finish();
    }