Topik ini menjelaskan cara mengirimkan data observabilitas dari aplikasi Java ke ApsaraDB for ClickHouse Enterprise Edition dan menganalisis data tersebut menggunakan layanan observabilitas terpadu. Hal ini membantu pengembang dan insinyur O&M memantau kinerja aplikasi secara real-time serta menyelesaikan masalah dengan lebih efisien.
Prasyarat
Layanan observabilitas terpadu telah diaktifkan untuk instans ApsaraDB for ClickHouse Enterprise Edition Anda.
Prosedur
Dalam contoh ini, layanan bisnis dan Otel Collector ditempatkan pada Instance ECS yang sama. Di lingkungan produksi, kami merekomendasikan agar Anda menempatkan layanan bisnis dan Otel Collector secara terpisah.
Langkah 1: Menempatkan Otel Collector
Konfigurasikan Instance ECS.
Beli Instance ECS. Saat membeli instans, tetapkan alamat IP publik agar dapat diakses melalui jaringan publik.
Tambahkan alamat IP Instance ECS ke daftar putih instans ApsaraDB for ClickHouse.
IP pribadi: Jika Instance ECS dan instans ApsaraDB for ClickHouse Enterprise Edition berada dalam VPC yang sama, tambahkan alamat IP pribadi Instance ECS ke daftar putih. Pada langkah-langkah berikutnya, gunakan alamat VPC sebagai titik akhir instans ApsaraDB for ClickHouse.
IP publik: Jika Instance ECS dan instans ApsaraDB for ClickHouse Enterprise Edition tidak dapat terhubung melalui jaringan pribadi, tambahkan alamat IP publik Instance ECS ke daftar putih. Pada langkah-langkah berikutnya, gunakan alamat publik sebagai titik akhir instans ApsaraDB for ClickHouse.
Sambungkan ke Instance ECS dan jalankan perintah berikut untuk menguji konektivitas ke instans ApsaraDB for ClickHouse. Jika perintah mengembalikan
Ok., koneksi berhasil.curl http://cc-xxxxxxx-clickhouse.clickhouseserver.pre.rds.aliyuncs.com:8123
Sambungkan ke Instance ECS dan jalankan perintah berikut untuk menginstal otelcol-contrib.
mkdir llm-demo cd llm-demo wget -O otelcol-contrib.rpm https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.136.0/otelcol-contrib_0.136.0_linux_amd64.rpm yum install otelcol-contrib.rpmKonfigurasikan Otel Collector untuk menerima data observabilitas melalui protokol gRPC dan HTTP serta mengirimkan data tersebut ke instans ApsaraDB for ClickHouse melalui protokol HTTP.
Salin konten berikut untuk membuat file konfigurasi dan sesuaikan konfigurasi sesuai kebutuhan:
Pada bagian `receivers`: Ganti titik akhir penerima OTLP dengan titik akhir layanan Otel Collector.
Pada bagian `exporters`:
Konfigurasikan informasi koneksi untuk instans ApsaraDB for ClickHouse, termasuk titik akhir, nama pengguna, dan kata sandi.
Konfigurasikan nama database dan tabel untuk menyimpan data observabilitas di instans ApsaraDB for ClickHouse. Ini mencakup `database`, `traces_table_name`, `logs_table_name`, dan `metrics_tables`.
cat > /etc/otelcol-contrib/config.yaml << EOF receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: timeout: 5s send_batch_size: 5000 exporters: clickhouse: endpoint: http://cc-xxxxxx-clickhouse.clickhouseserver.pre.rds.aliyuncs.com:8123?dial_timeout=10s&compress=lz4&async_insert=1 username: test password: password # ttl: 72h traces_table_name: otel_traces logs_table_name: otel_logs metrics_tables: gauge: name: otel_metrics_gauge sum: name: otel_metrics_sum summary: name: otel_metrics_summary histogram: name: otel_metrics_histogram exponential_histogram: name: otel_metrics_exp_histogram create_schema: false timeout: 5s database: clickobserve_service sending_queue: queue_size: 1000 retry_on_failure: enabled: true initial_interval: 5s max_interval: 30s max_elapsed_time: 300s service: pipelines: traces: receivers: [otlp] processors: [batch] exporters: [clickhouse] metrics: receivers: [otlp] processors: [batch] exporters: [clickhouse] logs: receivers: [otlp] processors: [batch] exporters: [clickhouse] EOFJalankan Otel Collector.
service otelcol-contrib restart
Langkah 2: Membuat aplikasi Java
Bagian ini menggunakan layanan pelemparan dadu sederhana berbasis Spring Boot sebagai contoh untuk menunjukkan cara membuat aplikasi.
Konfigurasikan lingkungan Java.
Tempatkan lingkungan Java. Anda harus menginstal Java 17 atau versi yang lebih baru.
Unduh dan instal Gradle. Anda harus menginstal Gradle 8 atau versi yang lebih baru.
Dalam contoh ini, folder diberi nama
java-simple. Setelah inisialisasi, struktur foldernya adalah sebagai berikut:java-simple ├── app │ ├── build.gradle.kts │ └── src │ ├── main │ │ ├── java │ │ │ └── org │ │ │ └── example │ │ │ └── App.java │ │ └── resources │ └── test │ ├── java │ │ └── org │ │ └── example │ │ └── AppTest.java │ └── resources ├── gradle │ ├── libs.versions.toml │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle.ktsPada folder
java-simple, ubah atau buat file-file berikut:Ubah build.gradle.kts
plugins { id("java") id("org.springframework.boot") version "3.0.6" id("io.spring.dependency-management") version "1.1.0" } sourceSets { main { java.setSrcDirs(setOf(".")) } } repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot-starter-web") }Ubah App.java
package org.example; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication app = new SpringApplication(App.class); app.setBannerMode(Banner.Mode.OFF); app.run(args); } }Buat RollController.java
package org.example; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class RollController { private static final Logger logger = LoggerFactory.getLogger(RollController.class); @GetMapping("/rolldice") public String index(@RequestParam("player") Optional<String> player) { int result = this.getRandomNumber(1, 6); if (player.isPresent()) { logger.info("{} is rolling the dice: {}", player.get(), result); } else { logger.info("Anonymous player is rolling the dice: {}", result); } return Integer.toString(result); } public int getRandomNumber(int min, int max) { return ThreadLocalRandom.current().nextInt(min, max + 1); } }
Langkah 3: Konfigurasi OpenTelemetry Java Agent
Unduh OpenTelemetry Java Agent.
curl -L -O https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jarKonfigurasikan variabel lingkungan.
export JAVA_TOOL_OPTIONS="-javaagent:/../opentelemetry-javaagent.jar" \ OTEL_TRACES_EXPORTER=otlp \ OTEL_METRICS_EXPORTER=otlp \ OTEL_LOGS_EXPORTER=otlp \ OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \ OTEL_EXPORTER_OTLP_ENDPOINT=http://<IP address>:4318 \ OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://<IP address>:4318/v1/traces \ OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://<IP address>:4318/v1/metrics \ OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://<IP address>:4318/v1/logs \ OTEL_METRIC_EXPORT_INTERVAL=15000JAVA_TOOL_OPTIONS: Ganti nilai dengan path ke file Java Agent yang telah diunduh.Konfigurasi titik akhir:
http://<IP address>:4318adalah titik akhir layanan Otel Collector yang dapat diakses oleh aplikasi Java Anda.Untuk informasi selengkapnya tentang parameter lainnya, lihat properties-exporters.
Langkah 4: Jalankan dan akses aplikasi Java
Pada folder aplikasi proyek, jalankan perintah berikut untuk menjalankan aplikasi.
Dalam contoh ini, folder aplikasi proyek adalah
../java-simple/app.gradle assemble java -jar ./build/libs/app.jarPada browser, akses
http://<IP address>:8080/rolldice. Alamat IP pada URL adalah alamat server tempat aplikasi Java dijalankan.
Langkah 5: Kueri dan analisis data observabilitas
Pada halaman detail instans ApsaraDB for ClickHouse, klik All-in-one Observe Suite di panel navigasi sebelah kiri untuk menuju portal layanan.
Pada halaman utama, Anda dapat melakukan kueri dan menganalisis data observabilitas dari aplikasi Java.
