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. 
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.0Laporkan 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
traceruntuk 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_contextBuat
tracerdan 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)