Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan visibilitas titik akhir HTTP
Halaman ini memberikan panduan untuk pelanggan Sinyal Aplikasi yang berharap untuk melihat operasi layanan HTTP mereka dipisahkan oleh nama titik akhir tertentu, tetapi sebaliknya melihat beberapa titik akhir dikelompokkan ke dalam metrik yang sama. Secara default, Application Signals memotong dimensi Operation metrik ke segmen jalur URL pertama untuk layanan HTTP (misalnya, /api/v1/users menjadiGET /api) untuk mempertahankan metrik kardinalitas rendah. Akibatnya, pengguna mungkin menemukan bahwa layanan dengan beberapa titik akhir yang berbagi awalan yang sama memiliki visibilitas terbatas ke kesehatan operasional titik akhir individu. Anda dapat mengikuti langkah-langkah di bawah ini untuk mengonfigurasi titik akhir operasi layanan ke perincian yang Anda inginkan.
penting
Memodifikasi visibilitas titik akhir adalah perubahan besar karena memengaruhi dimensi metrik Sinyal Aplikasi untuk operasi layanan. Ingatlah untuk memperbarui ambang batas SLO, alarm, dasbor yang sesuai. and/or
AWS Distro untuk solusi OpenTelemetry (ADOT)
Untuk pelanggan yang menggunakan AWS Distro for OpenTelemetry (ADOT), atur variabel OTEL_AWS_HTTP_OPERATION_PATHS lingkungan dengan daftar templat jalur URL yang dipisahkan koma untuk layanan HTTP:
export OTEL_AWS_HTTP_OPERATION_PATHS="/path/to/endpoint, /another/{placeholder}/endpoint"
Variabel ini menggunakan awalan pencocokan terpanjang terhadap url.path atribut rentang server HTTP untuk menentukan nama operasi. Pola wildcard cocok dengan segmen URL tunggal dan dapat dilambangkan dengan{placeholder},, :placeholder atau. * Setelah menyetel variabel, restart aplikasi Anda agar pengelompokan endpoint baru diterapkan.
Variabel ini didukung dalam ADOT untuk Java, Python Node.js, dan .NET.
Contoh
Pertimbangkan layanan API yang menerima lalu lintas berikut:
GET /api/users GET /api/users/42 GET /api/users/42/orders POST /api/users/99/orders POST /api/users/42/orders GET /api/users/42/orders/7/items GET /api/products
Secara default, Sinyal Aplikasi mengelompokkan semua ini ke dalam GET /api atau metrik POST /api layanan, sehingga tidak mungkin untuk membedakan kinerja antara titik akhir.
Untuk memperbaikinya, atur variabel lingkungan dengan templat jalur yang diinginkan:
export OTEL_AWS_HTTP_OPERATION_PATHS="/api/users/{userId}/orders/{orderId}/items, /api/users/{userId}/orders, /api/users/{userId}, /api/users, /api/products"
Dengan konfigurasi ini, Sinyal Aplikasi menunjukkan operasi yang berbeda. Beberapa permintaan dapat diselesaikan ke templat yang dikonfigurasi yang sama:
| Permintaan masuk | Operasi default | Dengan konfigurasi |
|---|---|---|
GET /api/users |
GET /api |
GET /api/users |
GET /api/users/42 |
GET /api |
GET /api/users/{userId} |
GET /api/users/42/orders |
GET /api |
GET /api/users/{userId}/orders |
POST /api/users/99/orders |
POST /api |
POST /api/users/{userId}/orders |
POST /api/users/42/orders |
POST /api |
POST /api/users/{userId}/orders |
GET /api/users/42/orders/7/items |
GET /api |
GET /api/users/{userId}/orders/{orderId}/items |
GET /api/products |
GET /api |
GET /api/products |
OpenTelemetry Solusi asli
Jika Anda menggunakan OpenTelemetry SDK asli (tanpa ADOT), Anda dapat mengganti nama rentang menggunakan prosesor transformasi di OpenTelemetry Collector Anda atau langsung dalam kode aplikasi.
catatan
Anda harus mengkonfigurasi kolektor Anda dengan eksportir OTLP untuk mempertahankan nama OpenTelemetry rentang sehingga CloudWatch dapat menguraikannya untuk nama operasi Sinyal Aplikasi. Untuk informasi selengkapnya, lihat Mengirim data OTLP ke. CloudWatch
Opsi 1 (disarankan): Collector-side transformasi
Gunakan prosesor transformasiname bidang span secara langsung.
Aturan urutan dari yang paling dangkal ke yang paling dalam — pernyataan berjalan secara berurutan, sehingga kecocokan yang lebih spesifik nanti dalam daftar akan menggantikan yang umum yang ditetapkan sebelumnya. Dalam contoh berikut, nilai atribut span url.path dicocokkan dan nama rentang yang dihasilkan diatur ke metode permintaan diikuti oleh pola URL yang diinginkan.
processors: transform/operation_names: trace_statements: - context: span conditions: - IsMatch(attributes["url.path"], "^/api/contests(/|$)") statements: - set(name, Concat([attributes["http.request.method"], "/api/contests"], " ")) - context: span conditions: - IsMatch(attributes["url.path"], "^/api/contests/[^/]+$") statements: - set(name, Concat([attributes["http.request.method"], "/api/contests/{id}"], " ")) - context: span conditions: - IsMatch(attributes["url.path"], "^/api/contests/[^/]+/leaderboard(/|$)") statements: - set(name, Concat([attributes["http.request.method"], "/api/contests/{id}/leaderboard"], " ")) service: pipelines: traces: receivers: [otlp] processors: [resourcedetection, transform/operation_names, batch] exporters: [otlphttp/xray]
Opsi 2: Mengatur nama rentang dalam kode aplikasi
Anda dapat secara manual mengatur nama rentang untuk rentang server dalam kode aplikasi Anda menggunakan OpenTelemetry API. Tetapkan nama ke {HTTP_METHOD} {route_template} tempat template rute menggunakan placeholder berparameter. Perhatikan bahwa ini adalah opsi fallback hardcode, dan Anda harus memperbarui nama rentang secara manual di setiap penangan permintaan HTTP untuk menerapkan perubahan ini.
Java
import io.opentelemetry.api.trace.Span; // Inside your request handler Span.current().updateName("GET /api/contests/{id}/leaderboard");
Python
from opentelemetry import trace # Inside your request handler span = trace.get_current_span() span.update_name("GET /api/contests/{id}/leaderboard")
Go
import "go.opentelemetry.io/otel/trace" // Inside your request handler span := trace.SpanFromContext(ctx) span.SetName("GET /api/contests/{id}/leaderboard")
Node.js
import { trace } from '@opentelemetry/api'; // Inside your request handler const span = trace.getActiveSpan(); if (span) { span.updateName('GET /api/contests/{id}/leaderboard'); }