Topik ini menjelaskan cara mengimpor data jejak dari aplikasi Java ke Layanan Log Sederhana menggunakan OpenTelemetry SDK for Java.
Prasyarat
Sebuah instance jejak telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instance Jejak.
Lingkungan pengembangan Java telah disiapkan. Versi Java adalah 8 atau yang lebih baru.
CatatanDisarankan untuk menggunakan Java Development Kit (JDK) 8u252 atau versi yang lebih baru.
Metode 1: (Direkomendasikan) Gunakan agen Java untuk mengunggah data jejak secara otomatis
Anda dapat menggunakan agen Java untuk mengunggah data jejak ke Layanan Log Sederhana di berbagai kerangka kerja Java. Untuk informasi lebih lanjut, lihat Pustaka, Kerangka Kerja, Server Aplikasi, dan JVM yang Didukung.
Agen Java tidak dapat digunakan bersamaan dengan agen SkyWalking atau Zipkin. Jika digunakan bersamaan, perilaku yang tidak terdefinisi mungkin terjadi.
Unduh versi terbaru dari agen Java. Untuk informasi lebih lanjut, lihat opentelemetry-java-instrumentation.
Konfigurasikan agen Java.
Kode berikut menunjukkan contoh konfigurasi variabel lingkungan untuk parameter -javaagent dari Java Virtual Machine (JVM). Untuk informasi lebih lanjut, lihat opentelemetry-java-instrumentation. Gantilah variabel seperti ${endpoint} dan ${project} dalam kode dengan nilai sebenarnya.
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc export OTEL_EXPORTER_OTLP_ENDPOINT=https://${endpoint} export OTEL_EXPORTER_OTLP_COMPRESSION=gzip export OTEL_EXPORTER_OTLP_HEADERS=x-sls-otel-project=${project},x-sls-otel-instance-id=${instance},x-sls-otel-ak-id=${access-key-id},x-sls-otel-ak-secret=${access-key-secret} java -javaagent:/path/to/opentelemetry-javaagent-all.jar -Dotel.resource.attributes=service.namespace=${service.namespace},service.name=${service},service.version=${version},host.name=${host},deployment.environment=${environment} -jar /path/to/your/app.jarTabel 1. Variabel
Variabel
Deskripsi
Contoh
${endpoint}
Titik akhir proyek Layanan Log Sederhana. Format: ${project}.${region-endpoint}:Port.
${project}: nama proyek Layanan Log Sederhana.
${region-endpoint}: Titik akhir Layanan Log Sederhana untuk wilayah tempat proyek berada. Anda dapat mengakses Layanan Log Sederhana menggunakan titik akhir internal atau publik. Titik akhir internal dapat diakses melalui jaringan klasik atau virtual private cloud (VPC). Titik akhir publik dapat diakses melalui Internet. Untuk informasi lebih lanjut, lihat Titik Akhir.
Port: nomor port. Nilainya tetap sebagai 10010.
test-project.cn-hangzhou.log.aliyuncs.com:10010
${project}
Nama proyek Layanan Log Sederhana.
test-project
${instance}
ID instance jejak. Untuk informasi lebih lanjut, lihat Buat instance jejak.
test-traces
${access-key-id}
ID AccessKey akun Alibaba Cloud Anda.
Kami merekomendasikan Anda menggunakan pasangan AccessKey dari Pengguna Resource Access Management (RAM) yang hanya memiliki izin tulis pada proyek Layanan Log Sederhana. Pasangan AccessKey terdiri dari ID AccessKey dan Rahasia AccessKey. Untuk informasi lebih lanjut tentang cara memberikan izin tulis pada proyek tertentu kepada pengguna RAM, lihat Gunakan kebijakan kustom untuk memberikan izin kepada pengguna RAM. Untuk informasi lebih lanjut tentang cara memperoleh pasangan AccessKey, lihat Pasangan AccessKey.
Tidak ada
${access-key-secret}
Rahasia AccessKey akun Alibaba Cloud Anda.
Kami merekomendasikan Anda menggunakan pasangan AccessKey dari pengguna RAM yang hanya memiliki izin tulis pada proyek Layanan Log Sederhana.
Tidak ada
${service.namespace}
Namespace tempat layanan berada.
order
${service}
Nama layanan. Tentukan nilai berdasarkan kebutuhan bisnis Anda.
payment
${version}
Versi layanan. Kami merekomendasikan Anda menentukan versi dalam format va.b.c.
v0.1.2
${host}
Nama host.
localhost
${environment}
Lingkungan penyebaran. Contoh: Lingkungan pengujian atau lingkungan produksi. Tentukan nilai berdasarkan kebutuhan bisnis Anda.
pre
Metode 2: Hasilkan dan unggah data jejak secara manual
Jika Anda menggunakan kerangka kerja yang dikelola sendiri atau memiliki persyaratan khusus, Anda dapat menghasilkan data jejak secara manual dan mengunggahnya ke Layanan Log Sederhana. Dalam contoh ini, Maven digunakan. Untuk informasi lebih lanjut, lihat Instrumentasi Manual.
Tambahkan dependensi Maven.
<dependencies> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-otlp</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-semconv</artifactId> <version>1.20.1-alpha</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-bom</artifactId> <version>1.20.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Tambahkan kode inisialisasi.
Gantilah variabel seperti ${endpoint} dan ${project} dalam kode berikut dengan nilai sebenarnya. Untuk informasi lebih lanjut tentang variabel, lihat Variabel.
Resource resource = Resource.getDefault() .merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, "service-name"))) .merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAMESPACE, "namespace"))) .merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_VERSION, "1.0.0"))) .merge(Resource.create(Attributes.of(ResourceAttributes.HOST_NAME, "host-name"))); SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder() .addSpanProcessor( BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().setEndpoint("https://${endpoint}") // Setel parameter .setEndpoint ke nilai yang dimulai dengan https://. Contoh: https://test-project.cn-hangzhou.log.aliyuncs.com:10010. .addHeader("x-sls-otel-project", "${project}") .addHeader("x-sls-otel-instance-id", "${instance}") .addHeader("x-sls-otel-ak-id", "${access-key-id}") .addHeader("x-sls-otel-ak-secret", "${access-key-secret}").build()).build()) .setResource(resource).build(); OpenTelemetry openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider) .buildAndRegisterGlobal(); Tracer tracer = openTelemetry.getTracer("instrumentation-library-name", "1.0.0"); Span parentSpan = tracer.spanBuilder("parent").startSpan(); try { Span childSpan = tracer.spanBuilder("child").setParent(Context.current().with(parentSpan)).startSpan(); childSpan.setAttribute("test", "vllelel"); childSpan.end(); } finally { parentSpan.end(); }
FAQ
Apa yang harus saya lakukan jika pesan kesalahan "Could not find TLS ALPN provider" dikembalikan oleh agen Java ketika versi JDK lebih awal dari 8u252?
Untuk menyelesaikan masalah ini, ikuti langkah-langkah berikut:
Jalankan perintah berikut untuk menambahkan file JAR yang diperlukan.
${youpath} menentukan jalur ke file JAR. Ganti setiap variabel ${youpath} dengan nilai sebenarnya.
java -Xbootclasspath/p:${youpath}/netty-tcnative-boringssl-static-2.0.25.Final.jar -javaagent:${youpath}/opentelemetry-javaagent-all.jar -jar ${youpath}/demo2-0.0.1-SNAPSHOT.jar