OpenTelemetryによるアプリへの計装を全自動化する

Observability 山村 悟史

APMを利用するにあたって、対象のアプリへのエージェントの計装(インストルメンテーション)という作業が必要となります。

この作業について、何をすべきか、アプリへのどのような変更が必要か、ということについて特に関心があります。

Splunk Observability Cloudが採用しているOpenTelemetryでは、各言語に応じた計装方法が用意されています。まずそちらを解説し、更にSplunkはどのような追加機能を提供しているかを解説したいと思います。

計装の種類

OpenTelemetryにおける計装には主に以下の二種類(+複合)があります。

1. 自動計装(Auto Instrumentation)、ゼロコード計装(Zero-code Instrumentation)とも言います

コードに手を入れる必要がなく、アプリの起動オプションなのでAPMエージェントを指定することで自動的に標準的なトレース、スパンデータ(主に外部アプリやサービスへの通信)を取得します。

対応言語:Java、Node.js、.NET、Python、Ruby、PHP

例えばJavaの場合は、`java -javaagent:./splunk-otel-javaagent.jar -jar <myapp>.jar`のように、`-javaagent`のオプションでAPMエージェントのパスを指定します。

詳細はこちらをご参照ください。

また、自動計装であっても、データに共通的に属性付与させたい場合(サービス名やアプリバージョンなど)もコードに手を入れる必要はなく、OpenTelemetry Collectorでの設定で可能です。

2. 手動計装(Manual Instrumentation)

APMエージェントのSDK・APIを使用し、コードにトレース、スパンのデータを生成するためのロジックを追加します。

対応言語:上記の自動計装対応言語に加え、Go、C++、etc

Goの例はこちらをご参照ください。

3. 自動 + 手動計装

自動計装が対応している言語について、自動計装をしつつ、追加のデータを生成したい場合にはピンポイントにコードを追加します。

自動計装が対応している言語は、一般的にはまず自動計装を試し、必要に応じて手動計装してデータを追加します。「必要に応じて」というのは、例えば標準では取得できないデータ、つまり追加で任意の関数に対してトレースを取得したい場合や、ビジネスロジック上のデータや別アプリに通信を行う場合に渡される引数を追加取得したい場合などです。

Automatic discovery and configurationによる計装の自動化

SplunkはOpenTelemetry Collectorに対して機能追加したSplunk Distribution of OpenTelemetry Collectorを提供しています。いくつか拡張されており、その中の一つにAutomatic discovery and configuration(以下、Auto Discovery)という機能があります。

これは、自動計装の自動化を更に一歩先に進めたものです。

OpenTelemetryの自動計装では、アプリの実行時の引数に設定が必要など、場合によっては起動スクリプトの変更などが必要になるものでしたが、Auto Discoveryでは、ホスト上に動作しているアプリの起動を自動的に検出し自動計装を行います。これによりAPMの利用開始が更に容易になります。
※対応言語はJava、.Net、Node.js(2024年9月時点)で、拡張が続けられています。

この機能を利用するためのステップを見ていきたいと思います。

  1. Splunk Observability CloudのData Management > Available Integrations > Deploy the Splunk OpenTelemetry Collectorを選択します。 Data Management
  2. Nextをクリックします。 Splunk OpenTelemetry Collector
  3. Platformを選択します。今回はLinuxを選択してみます。 Install Configuration
  4. Autoinstrumentationで検出したい言語を選択します。動作していない言語にチェックを入れていても大丈夫です。 Autoinstrumentation
  5. 最後にインストール用のスクリプトが出力されます。
    これを対象アプリが動作しているホスト(またはコンテナ)上で実行することで、Auto Discoveryが有効化したOpenTelemetry Collectorがインストールされます。 INSTALLER SCRIPT
  6. その後アプリを再起動することでAuto Discoveryによる自動計装とSplunk Observability Cloudへのデータ送信が開始されます。

Auto Discoveryの高度な設定などについてはドキュメントページを参照ください。

ミドルウェアのメトリクス自動取得

本題からはそれますが、Auto Discoveryにはアプリへの計装以外にもミドルウェアの自動検出も可能です。

Autoinstrumentation

Supported third-party applicationをチェックすることで、ホストやコンテナ上で動作しているミドルウェア(MySQLやNginxなど)を検出し、そのメトリクスを取得することもできます。

詳細はこちらを参照ください。

まとめ

本記事ではSplunk Observability CloudでAPMをクイックに開始するためのアプリの自動計装について解説しました。

Splunk Distribution of OpenTelemetry Collectorを使用することで、グローバルスタンダードであるOpenTelemetryを使用しつつ、利用の利便性を更に高めることができます。Auto DiscoveryによりAPMの利用も非常に簡単であることがお伝え出来たかと思います。

オブザーバビリティにご関心のある方は無料トライアルを始めてみませんか?是非ご連絡ください!

関連記事

Splunk APMのAlwaysOn Profilingの一般提供を開始
オブザーバビリティ
4 分程度

Splunk APMのAlwaysOn Profilingの一般提供を開始

Splunk APMに、Javaアプリケーション向けのAlwaysOn Profilingが追加されました。この機能を使用すれば、アプリケーション開発者やサービスオーナーは、パフォーマンスをコードレベルで可視化して、本番環境の問題のトラブルシューティングを迅速化できます。
Splunk ITSI Content Pack for Cisco Data Center Networkingでネットワークのレジリエンスを実現
オブザーバビリティ
3 分程度

Splunk ITSI Content Pack for Cisco Data Center Networkingでネットワークのレジリエンスを実現

Splunk ITSI Content Pack for Cisco Data Center Networkingを活用することで、フルスタックのネットワークレジリエンスを実現できます。
Snowflake DB:クラウド上のSnowflakeをグラフで監視
オブザーバビリティ
4 分程度

Snowflake DB:クラウド上のSnowflakeをグラフで監視

Splunk Observability Cloudのダッシュボードとディテクターで、Snowflakeデータベースの使用状況に関するインサイトを取得できます。