LoginSignup
1
0

Application Performance MonitoringでWEBアプリを監視する②

Last updated at Posted at 2023-08-22

前回は、Spring BootとAPM Javaエージェントのデプロイを行いました。今回は、APM Java Tracerを用いて、APMでHelidonアプリケーションの監視を行う方法を紹介します。

image.png

OCI APMは、OpenTelemetryに対応しており、各フレームワークのトレーシング機能を有効化することによってAPM側でそのテレメトリーデータを受信し、APM Javaエージェントの場合と同様にトレースデータして表示させることが可能です。

まずは、Helidonベースのアプリケーションをデプロイすると同時にAPM Java Tracerを有効化しAPMで動作させる設定を行います。

アプリケーションのデプロイ & APM Java Tracerの有効化

#Dockerインストール
sudo dnf install -y docker

#アプリのダウンロード&解凍
wget https://github.com/western24/apmdemo/raw/main/helidonsedemo.zip
unzip helidonsedemo.zip

#アプリケーションの定義ファイルを開き
vi /home/opc/helidonsedemo/src/main/resources/application.yaml

 ##APMのEndpointとPrivateデータキーを編集
 data-upload-endpoint: https://xxxxxx.apm-agt.us-ashburn-1.oci.oraclecloud.com
 private-data-key: xxxxxxxx

#DockerイメージのBuild&Run 
cd helidonsedemo
docker build -t helidon-quickstart-se .
docker run --rm -p 8282:8282 helidon-quickstart-se:latest

  • アプリケーションへのアクセス(※VCNのセキュリティ・リストで8282をオープンしておく)
    image.png

  • 気象庁のAPIにアクセスした結果が表示される
    image.png

  • APMのトレースにHelidondemoのmainとHTTP Requestのトレース・データが表示されていればOK
    image.png

APM Java Tracerに必要な設定

まずは動作させるところまでの環境を構築できたところで、実際にHelidonのアプリケーションでAPMを使うためには、何の設定をしなければらないないかという観点で解説します。

APM Java Tracerの場合は、APM Java Agentのようにエージェントをダウンロードしてインストールするのではなく、フレームワークにあるトレーシング機能を有効にします。
Helidonの場合は、pom.xmlに以下の依存性を追加します。(Helidon 3 SEの場合)
※今回のアプリケーションのpom.xmlには既に追加されています。

<dependency>
    <groupId>io.helidon.tracing</groupId>
    <artifactId>helidon-tracing-opentracing</artifactId>
</dependency>         
<dependency>
    <groupId>com.oracle.apm.agent.java</groupId>
    <artifactId>apm-java-agent-helidon3</artifactId>
    <version>[1.8.3326,)</version>
</dependency>

そして、application.yamlには、テレメタリーデータの送信先に関する設定情報を追記します。APMのアップロードするためのAPMに表示するサービス名、エンドポイントとPrivateデータ・キーは必須項目です。

tracing:
  service: helidondemo
  data-upload-endpoint: https://xxxxxxx.apm-agt.us-ashburn-1.oci.oraclecloud.com
  private-data-key: xxxxxxxxxxxxxxxxxx

上記の設定を追加することによりHelidonのAPM Java Tracerが動作します。
トレーシングを有効化することでテレメタリデータを収集することをInstrumentation(計装)と呼びますが、これは自動計装(Automatic Instrumentation)手動計装(Manual Instrumentation)の2つの種類があります。
自動計装は、プログラム・コード内で実行される様々イベントにて自動的に計測されるもので、手動計装は、ユーザー自身でSpanの範囲を指定し、計測したい処理範囲を自身で決定することができます。

先ほど確認したAPMのトレースには、HelidondemoのmainとHTTP Requestの2つのトレースデータが取得されていたのですが、実はこれ、それぞれ自動計装と手動計装されたものでした。
ちょっとmain.javaのコードを見てみると

//気象庁のREST APIコールの部分には、特にトレーシングに関するコードは追記していない
try {
    HttpGet request = new HttpGet("https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json");
    CloseableHttpClient httpClient = HttpClients.createDefault();
    CloseableHttpResponse response = httpClient.execute(request);
    res.headers().add("Content-Type", "application/json");
    res.send(EntityUtils.toString(response.getEntity()));
    } catch (Exception e) {
  • APMには、HTTP RequestのSpanとして記録がされている -> 自動計装(Automatic Instrumentation)
    image.png
//明示的にSpanの範囲を指定している
try {
    Tracer tracer = webServer.configuration().tracer();
    Span span = tracer.spanBuilder("main").start();    // <----親Span Start
    for(int i = 0; i < 3; i++) {
        doWork(i, span);   // <----子Span
    }
    span.end(); // <---親Span End
} catch(Exception e) {
  • APMでは指定したSpan名で親・子Spanが記録されている -> 手動計装(Manual Instrumentation)
    image.png

プログラム・コードは最小限で記述していますので、ご自身でコードをカスタマイズしながらAPMの挙動を確認するとより理解しやすいのではないかと思います。また、ドキュメントには、Helidon以外のMicronautやMavenなどのフレームワークに対する設定も記述がありますので、こちらもご参考にして下さい。
次回は、Node.jsのアプリケーションのデプロイとOpenTelemetryの設定を紹介します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0