全部产品
Search
文档中心

Function Compute:Analisis Tracing

更新时间:Jul 02, 2025

Topik ini menjelaskan fitur Analisis Tracing dalam lingkungan runtime Python.

Latar Belakang

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

Function Compute terintegrasi dengan Analisis Tracing. Anda dapat menggunakan Jaeger SDK atau OpenTelemetry untuk mengunggah informasi jejak sehingga Anda dapat melacak pemanggilan fungsi. Analisis Tracing membantu Anda menganalisis dan mendiagnosis hambatan performa 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 informasi lebih lanjut tentang rentang sistem pada gambar berikut, lihat Deskripsi nama rentang. Tracing Analysis

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

Kode contoh

Analisis Tracing untuk Function Compute memungkinkan Anda membuat rentang kustom menggunakan OpenTelemetry berdasarkan implementasi Jaeger dari spesifikasi OpenTracing:

Dalam kode Python, Anda dapat menggunakan OpenTelemetry SDK untuk menandai data secara manual dan melaporkan data ke server Analisis Tracing. Untuk kode contoh lengkap, lihat python-tracing-openTelemetry.

Pada kode sebelumnya:

  • Konfigurasikan file dependensi requirements.txt di direktori proyek.

    opentelemetry-api==1.12.0
    opentelemetry-sdk==1.12.0
    opentelemetry-exporter-jaeger==1.12.0
  • Laporkan data ke server Analisis Tracing.

    trace.set_tracer_provider(
        TracerProvider(
            resource=Resource.create({SERVICE_NAME: "my-helloworld-service"})
        )
    )
    tracer = trace.get_tracer(__name__)
    def handler(event, context):
        init_tracer(context.tracing.jaeger_endpoint)
        span_context = get_fc_span(context.tracing.span_context)
        start_my_span(trace.set_span_in_context(NonRecordingSpan(span_context)))
        return 'hello world'
  • Inisialisasi objek tracer untuk memberikan akses ke tracer.

    def init_tracer(endpoint):
        jaeger_exporter = JaegerExporter(
            collector_endpoint=endpoint
        )
    
        span_processor = SimpleSpanProcessor(jaeger_exporter)
    
        trace.get_tracer_provider().add_span_processor(span_processor)
  • Dapatkan informasi tracing objek Context dan ubah menjadi objek SpanContext.

    def get_fc_span(jaeger_span_context):
        jaeger_span_context_arr = jaeger_span_context.split(":")
        tid = int(jaeger_span_context_arr[0], 16)
        sid = int(jaeger_span_context_arr[1], 16)
    
        span_context = trace.SpanContext(
            trace_id=tid,
            span_id=sid,
            is_remote=True,
            trace_flags=trace.TraceFlags(0x01),
        )
        return span_context
  • Buat tracer dan rentang anak menggunakan konteks yang telah diubah. Setiap rentang mewakili fragmen eksekusi berkelanjutan bernama dan bertiming dalam rantai panggilan. Anda juga dapat membuat rentang anak berdasarkan rentang tersebut.

    def start_my_span(context):
        with tracer.start_as_current_span(name="fc-operation", context=context):
            time.sleep(0.15)
            with tracer.start_as_current_span("child"):
                time.sleep(0.1)