Topik ini menjelaskan latar belakang, skenario, dan fitur inti Managed Service for OpenTelemetry di Function Compute. Topik ini juga menunjukkan cara mengonfigurasi aturan pengambilan sampel dan mengaktifkan Managed Service for OpenTelemetry.
Informasi latar belakang
Managed Service for OpenTelemetry mengadopsi standar OpenTracing dan kompatibel dengan komunitas sumber terbuka. Managed Service for OpenTelemetry menyediakan berbagai fitur bagi pengembang aplikasi terdistribusi, seperti kemampuan untuk menanyakan dan mendiagnosis jejak terdistribusi, menemukan topologi terdistribusi secara dinamis, serta merangkum kinerja aplikasi secara real-time.
Function Compute terintegrasi dengan Managed Service for OpenTelemetry. Anda dapat menggunakan Jaeger untuk mengunggah informasi jejak sehingga Anda dapat melacak pemanggilan fungsi. Managed Service for OpenTelemetry membantu Anda menganalisis dan mendiagnosis hambatan kinerja dalam arsitektur serverless, meningkatkan efisiensi pengembangan dan diagnosis dalam skenario serverless.
Skenario
Setelah mengonfigurasi Managed Service for OpenTelemetry untuk layanan di Function Compute, Anda dapat mencatat waktu eksekusi permintaan di Function Compute, termasuk waktu cold start dan waktu eksekusi fungsi. Managed Service for OpenTelemetry membantu Anda menyelesaikan masalah berikut:
Mengidentifikasi hambatan kinerja suatu fungsi jika setiap eksekusi fungsi tersebut mengalami timeout.
Mengidentifikasi penyebab latensi ujung-ke-ujung yang lama jika waktu eksekusi fungsi tersebut singkat.
Menganalisis dan mendiagnosis hambatan kinerja suatu fungsi jika permintaan melibatkan beberapa layanan cloud dalam sistem terdistribusi.
Fitur inti
Managed Service for OpenTelemetry di Function Compute menghubungkan seluruh jejak dan menyediakan fitur inti berikut:
Secara otomatis mencatat waktu yang dihabiskan pada langkah-langkah kunci di Function Compute. Untuk informasi lebih lanjut, lihat Secara otomatis mencatat waktu yang dihabiskan pada langkah-langkah kunci di Function Compute.
Menghubungkan ke layanan upstream. Jika header permintaan berisi SpanContext, Function Compute membuat rentang anak berdasarkan SpanContext. Untuk informasi lebih lanjut, lihat Menghubungkan ke layanan upstream.
Menghubungkan ke layanan downstream. Function Compute mengimpor SpanContext ke konteks fungsi untuk membantu Anda melacak jejak internal fungsi. Untuk informasi lebih lanjut, lihat Menghubungkan ke layanan downstream.
Memungkinkan Anda melihat topologi aplikasi.
Memungkinkan Anda melihat eksekusi Operasi API yang tidak valid dan mengidentifikasi penyebab kesalahan.
Secara otomatis mencatat waktu yang dihabiskan pada langkah-langkah kunci di Function Compute.
Gambar berikut menunjukkan jejak default yang dapat Anda lihat setelah mengaktifkan Managed Service for OpenTelemetry untuk layanan.

Item berikut menjelaskan nama rentang:
InvokeFunction: Total waktu eksekusi permintaan saat ini di Function Compute.
ColdStart: Durasi cold start sistem untuk fungsi tersebut. Cold start hanya terjadi ketika lingkungan eksekusi diinisialisasi ulang.
PrepareCode: Waktu yang diperlukan untuk mengunduh kode atau gambar kustom untuk fungsi tersebut. Jika waktu yang ditunjukkan oleh rentang PrepareCode terlalu lama, sederhanakan paket kode untuk mengurangi waktu persiapan.
RuntimeInitialization: Waktu yang diperlukan untuk memulai lingkungan eksekusi, termasuk waktu pemeriksaan kesehatan instance. Untuk runtime kustom dan gambar kustom, jika waktu yang ditunjukkan oleh rentang RuntimeInitialization terlalu lama, periksa perilaku startup server HTTP dan gambar yang sesuai.
Initializer: Waktu yang diperlukan untuk mengeksekusi fungsi inisialisasi. Fungsi inisialisasi hanya dieksekusi ketika cold start terjadi di dalam kontainer.
Invocation: Waktu yang diperlukan untuk mengeksekusi fungsi. Anda dapat memeriksa konteks Invocation di dalam fungsi untuk mendapatkan durasi pemanggilan.
Fungsi yang dihasilkan oleh Function Compute diberi nama dalam format FC:ServiceName/FunctionName.
Jika permintaan tidak mengalami cold start, jejak tersebut tidak akan berisi durasi cold start dan Initializer. Gambar berikut menunjukkan jejak tersebut.

Menghubungkan ke layanan upstream
Setelah Managed Service for OpenTelemetry diaktifkan untuk layanan, Function Compute membuat rentang anak berdasarkan SpanContext jika header permintaan berisi SpanContext.
Function Compute mengenali header SpanContext berikut:
x-fc-tracing-opentracing-span-context: Mentransmisikan SpanContext.x-fc-tracing-opentracing-span-context-baggage-: Mentransmisikan baggage lintas konteks.Jika beberapa item baggage harus ditransmisikan, Anda harus mentransmisikan beberapa header, seperti
x-fc-tracing-opentracing-span-context-baggage-key1: val1dantracing-opentracing-span-context-baggage-key2: val2.
SpanContext dapat disuntikkan dengan menambahkan header SpanContext saat fungsi dipanggil.
Node.js digunakan dalam contoh berikut:
'use strict';
const FCClient = require('@alicloud/fc2');
/*
Pasangan AccessKey dari akun Alibaba Cloud memiliki izin untuk semua Operasi API. Menggunakan pasangan AccessKey untuk melakukan operasi adalah operasi berisiko tinggi. Kami merekomendasikan agar Anda menggunakan pengguna RAM untuk memanggil Operasi API atau melakukan O&M rutin.
Kami merekomendasikan agar Anda tidak menyimpan ID AccessKey dan Rahasia AccessKey di kode proyek Anda. Jika tidak, pasangan AccessKey mungkin bocor dan keamanan semua sumber daya di bawah akun Anda mungkin terganggu.
Dalam contoh ini, pasangan AccessKey disimpan ke variabel lingkungan untuk otentikasi.
Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET di lingkungan lokal Anda sebelum menjalankan kode contoh.
Variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasikan secara otomatis setelah Anda mengonfigurasikan izin eksekusi di runtime Function Compute.
*/
var client = new FCClient('<account id>', {
accessKeyID: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
region: 'cn-shanghai',
});
var serviceName = '<service name>';
var funcName = '<function name>';
async function test() {
try {
// Suntikkan informasi header SpanContext.
var headers = {
'x-fc-tracing-opentracing-span-context': '124ed43254b54966:124ed43254b5****:0:1',
'x-fc-tracing-opentracing-span-context-baggage-key': 'val'
};
var resp = await client.invokeFunction(serviceName, functionName, 'event', headers = headers);
} catch (err) {
console.error(err);
}
}Menghubungkan ke layanan downstream
Function Compute mengimpor SpanContext ke fungsi untuk membantu Anda melacak jejak internal fungsi tersebut.
Dalam runtime bawaan, SpanContext dapat diperoleh dengan menggunakan
context.tracing.Dalam runtime kustom atau kontainer kustom, SpanContext di Function Compute dapat diperoleh dari header permintaan.
x-fc-tracing-opentracing-span-context: SpanContext dari InvokeFunction di Function Compute. Rentang dibuat berdasarkan SpanContext di dalam fungsi.x-fc-tracing-opentracing-span-baggages: Baggage lintas konteks yang dikodekan Base64.x-fc-tracing-jaeger-endpoint: Titik akhir server Jaeger. Anda dapat langsung mengunggah rentang di dalam fungsi ke titik akhir ini.
Sebagai contoh, context.tracing memiliki struktur berikut:
{
"openTracingSpanContext": "5f22f355044a957a:5708f3a95a4ed10:5f22f355044a****:1",
"openTracingSpanBaggages": {
"key1": "val1",
"key2": "val2"
},
"jaegerEndpoint": "http://tracing-analysis-dc-zb-internal.aliyuncs.com/adapt_fcfc@fcfc@fcfc/api/traces"
}Kode berikut memberikan contoh tentang cara memperoleh SpanContext dari fungsi:
Node.js:
exports.handler = (event, context, callback) => { var params = { openTracingSpanContext: context.tracing.openTracingSpanContext, openTracingSpanBaggages:context.tracing.openTracingSpanBaggages, // jaegerEndpoint bersifat rahasia, jangan mudah mencetaknya // jaegerEndpoint:context.tracing.jaegerEndpoint } console.log('tracing params',params) callback(null,'success'); }PHP:
function handler($event, $ctx) { $logger = $GLOBALS['fcLogger']; $openTracingSpanContext = $ctx['tracing']['openTracingSpanContext']; $openTracingSpanBaggages = $ctx['tracing']['openTracingSpanBaggages']; // jaegerEndpoint bersifat rahasia, jangan mudah mencetaknya $jaegerEndpoint = $ctx['tracing']['jaegerEndpoint']; $logger->info($openTracingSpanContext); $logger->info($openTracingSpanBaggages['key1']); return 'success'; }Java:
package example; import com.aliyun.fc.runtime.Context; import com.aliyun.fc.runtime.StreamRequestHandler; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class HelloFC implements StreamRequestHandler { public void handleRequest( InputStream inputStream, OutputStream outputStream, Context context) throws IOException { String spanContext = context.getTracing().getOpenTracingSpanContext(); String jaegerEndpoint = context.getTracing().getJaegerEndpoint(); String spanBaggage = context.getTracing().getOpenTracingSpanBaggages().get("key1"); outputStream.write(new String("success").getBytes()); } }Dalam runtime kustom atau kontainer kustom, Anda hanya perlu memperoleh header. Go digunakan dalam contoh berikut:
spanContext := req.Header.Get('x-fc-tracing-opentracing-span-context') spanBaggages := req.Header.Get('x-fc-tracing-opentracing-span-baggages') jaegerEndpoint := req.Header.Get('x-fc-tracing-jaeger-endpoint')
Menyesuaikan aturan pengambilan sampel
Untuk menyesuaikan aturan pengambilan sampel, masuk ke Konsol Managed Service for OpenTelemetry dan konfigurasikan aturan pengambilan sampel jarak jauh. Setelah konfigurasi selesai, Function Compute menggunakan aturan pengambilan sampel jarak jauh yang telah Anda konfigurasikan untuk melakukan pengambilan sampel.
Nama layanan yang sesuai dengan Function Compute di Managed Service for OpenTelemetry adalah fc-tracing. Secara default, RatelimitingSampler digunakan, dan pengambilan sampel dilakukan pada laju satu permintaan per detik.
Secara default, Function Compute menggunakan aturan pengambilan sampel berikut:
{
"default_strategy": {
"type": "ratelimiting",
"param": 1,
}
}Metode pengaktifan
Untuk informasi tentang cara mengaktifkan Managed Service for OpenTelemetry, lihat Aktifkan Analisis Tracing.