このトピックでは、Java アプリケーションから ApsaraDB for ClickHouse Enterprise Edition に可観測性データを配信し、ワンストップの可観測性サービスを使用してデータを分析する方法について説明します。これにより、開発者と O&M エンジニアは、アプリケーションのパフォーマンスをリアルタイムでモニターし、問題をより効率的に解決できます。
前提条件
ApsaraDB for ClickHouse Enterprise Edition インスタンスで、ワンストップの可観測性サービスが有効化されていること。
手順
この例では、ビジネスサービスと Otel Collector は同じ ECS インスタンスにデプロイされます。本番環境では、ビジネスサービスと Otel Collector を別々にデプロイすることをお勧めします。
ステップ 1: Otel Collector のデプロイ
ECS インスタンスを構成します。
ECS インスタンスを購入します。インスタンスを購入する際に、パブリック IP アドレスを割り当てて、パブリックネットワークアクセスを有効にします。
ECS インスタンスの IP アドレスを ApsaraDB for ClickHouse インスタンスのホワイトリストに追加します。
プライベート IP: ECS インスタンスと ApsaraDB for ClickHouse Enterprise Edition インスタンスが同じ VPC にある場合は、ECS インスタンスのプライベート IP アドレスをホワイトリストに追加します。次のステップでは、ApsaraDB for ClickHouse インスタンスのエンドポイントに VPC アドレスを使用します。
パブリック IP: ECS インスタンスと ApsaraDB for ClickHouse Enterprise Edition インスタンスがプライベートネットワーク経由で接続できない場合は、ECS インスタンスのパブリック IP アドレスをホワイトリストに追加します。次のステップでは、ApsaraDB for ClickHouse インスタンスのエンドポイントにパブリックアドレスを使用します。
ECS インスタンスに接続し、次のコマンドを実行して ApsaraDB for ClickHouse インスタンスへの接続性をテストします。コマンドが
Ok.を返した場合、接続は成功です。curl http://cc-xxxxxxx-clickhouse.clickhouseserver.pre.rds.aliyuncs.com:8123
ECS インスタンスに接続し、次のコマンドを実行して 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.rpmgRPC および HTTP プロトコルで可観測性データを受け入れ、HTTP プロトコルで ApsaraDB for ClickHouse インスタンスにデータを配信するように Otel Collector を構成します。
次の内容をコピーして構成ファイルを作成し、必要に応じて構成を変更します:
「receivers」セクションで、OTLP レシーバーのエンドポイントを Otel Collector サービスのエンドポイントに置き換えます。
「exporters」セクションで:
ApsaraDB for ClickHouse インスタンスのエンドポイント、ユーザー名、パスワードなどの接続情報を構成します。
ApsaraDB for ClickHouse インスタンスに可観測性データを格納するためのデータベース名とテーブル名を構成します。これには、「database」、「traces_table_name」、「logs_table_name」、および「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] EOFOtel Collector を起動します。
service otelcol-contrib restart
ステップ 2: Java アプリケーションの作成
このセクションでは、簡単な Spring Boot のサイコロを振るサービスを例に、アプリケーションの作成方法を説明します。
Java 環境を構成します。
Java 環境をデプロイします。Java 17 以降をインストールする必要があります。
この例では、フォルダ名は
java-simpleです。初期化後、フォルダは次の構造になります: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.ktsjava-simpleフォルダで、次のファイルを変更または作成します: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") }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); } }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); } }
ステップ 3: OpenTelemetry Java Agent の構成
OpenTelemetry Java Agent をダウンロードします。
curl -L -O https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar環境変数を構成します。
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: 値をダウンロードした Java Agent ファイルへのパスに置き換えます。エンドポイント構成:
http://<IP address>:4318は、Java アプリケーションがアクセスできる Otel Collector サービスのエンドポイントです。その他のパラメーターの詳細については、「properties-exporters」をご参照ください。
ステップ 4: Java アプリケーションの起動とアクセス
プロジェクトのアプリケーションフォルダで、次のコマンドを実行してアプリケーションを起動します。
この例では、プロジェクトのアプリケーションフォルダは
../java-simple/appです。gradle assemble java -jar ./build/libs/app.jarブラウザで
http://<IP address>:8080/rolldiceにアクセスします。URL の IP アドレスは、Java アプリケーションが実行されているサーバーのアドレスです。
ステップ 5: 可観測性データのクエリと分析
ApsaraDB for ClickHouse インスタンスの詳細ページで、左側のナビゲーションウィンドウにある ワンストップ可観測 をクリックして、サービスポータルに移動します。
ホームページで、Java アプリケーションからの可観測性データをクエリおよび分析できます。
