LoginSignup
0
0

More than 1 year has passed since last update.

マイクロサービスデモ(Astronomy Shop)をSplunk Observability Cloudで可視化してみた

Last updated at Posted at 2023-04-17

はじめに

Splunk Observability Cloud(以下、Splunk o11y)でのマイクロサービスの可視化方法を説明したいと思います。

Splunk o11yはエージェントとしてOpenTelemetry(以下、Otel)を採用しており、Kubernetesに特化したSplunk OpenTelemetry Collector for Kubernetesを提供しています。
これを使ってサクッと可視化したいと思います。

OpenTelemetry Demo

Otelプロジェクトが提供しているデモがあります。
これを使ってSplunk o11yへトレース送信できるようにしましょう。

構成

こちらの図の通り、Otelはアプリに計装するためのAPI・SDKと、テレメトリーデータをバックエンドに送るためのCollectorに分かれています。
image.png

通信はこのように行われます。

アプリへOpenTelemetry SDK/API計装

では、まずOtel SDKはアプリからどのようにトレースデータを取得するかですが、方法は言語によります。
大まかにはAuto InstrumentationとManual Instrumentationに分かれます。

  • Auto Instrumentation(自動計装)
    コード自体には手をいれず、アプリ起動時のコマンドを変えることでOtel SDK/APIを動的にアプリに組み込みます。
    例えばJavaであればOtel用のJava Agentをインストールし、それを引数として渡します。ホストでは通常のコマンド、コンテナであればDockerファイルに記述するのが一般的です。Auto Instrumentationにまだ対応していない言語もあります。
Java Auto Instrumentation
java -javaagent:./splunk-otel-javaagent.jar -jar <myapp>.jar
  • Manual Instrumentation(手動計装)
    Otel SDK、APIをコードに組み込みます。

なお、Auto InstrumentationとManual Instrumentationの併用は可能です。
まず利用可能な言語であればAuto Instrumentationから始めて、より詳細なデータが必要になればManual Instrumentationでトレースを追加したり、Spanに内部値(ユーザーID、テナントIDなど)をAttributeとして付与するなど拡張するがスモールスタートとしてよいと思います。

今回のデモで言語ごとにどのような計装を行っているかは以下のページにまとまっています。

image.png

各言語の計装方法の詳細情報はOtel公式、またはSplunk Otelを使う場合はSplunk Docsを確認ください。

ちなみに、、、Instrumentation = 計装 = インストルメンテーション | インスツルメンテーション | インストゥルメンテーションです。
インストルメンテーションがITで、インスツルメンテーション | インストゥルメンテーションが医療でよく使われている表記のようです。
別にどれでもいいんですが私は一番書きやすく言いやすい「計装」を普段使っています。

Instrumentationとは by ChatGPT

インストルメンテーション(Instrumentation)は、ソフトウェアの実行時に動作や性能を監視、計測、分析するためにコードに計測用の機能を追加することを指します。特に、アプリケーションのパフォーマンスモニタリング(APM)や分散トレーシングシステムでは、アプリケーションやシステムの各部分の実行時間、呼び出し回数、エラー率などの情報を収集するためにインストルメンテーションが利用されます。

OpenTelemetry Collectorを使用してテレメトリーデータ送信

各計装では送り先をカスタムにしない限りはデフォルトポートに送られます。

デモはもうOtelは計装が完了しているので、後はOtel Collectorからの送り先を指定するだけです。

まだデモを立ち上げていませんでしたね。
やっていきたいと思います。

デモのデプロイ

Kubernetesへのデプロイ手順はこちらです。

デモではOtel CollectorやJeagerなどバックエンドも含まれていますが、今回は自前のOtelとバックエンド(Splunk o11y)を使うのでそれぞれを非活性にし、Otel SDKからCollectorへの送り先も自前用に指定します。
以下をoteldemo.yamlとして保存します。

default: 
  envOverrides: 
    - name: OTEL_COLLECTOR_NAME 
      valueFrom: 
        fieldRef: 
          fieldPath: status.hostIP 

opentelemetry-collector: 
  enabled: false 
jaeger: 
  enabled: false 
prometheus: 
  enabled: false 
grafana: 
  enabled: false 

次にhelmでインストールします。

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install my-otel-demo open-telemetry/opentelemetry-demo --values oteldemo.yaml

どんなサイトが見たい場合はFrontend ProxyをExposeします。

kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080
# リモートアクセスの場合
kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080 --address 0.0.0.0

いい感じの天体観測ショップサイトが立ち上がりました。
なお、Loadgeneratorも作られているのでトランザクションについては自分で発生させる必要はありません。

image.png

Otel Collectorのデプロイ

次に同じKubernetesクラスタにOtel Collectorをデプロイしましょう。
SplunkがOtelを機能拡張したり、Splunk o11y用に使いやすくしたOpenTelemetry Collector for Kubernetesを使います。

helmでインストールできます。Kubernetesからのテレメトリーデータ送信用設定が自動化されています。

helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart
helm install my-local-splunk-o11y-otel-collector --set="splunkObservability.realm=<REALM名>,splunkObservability.accessToken=<アクセストークン>,clusterName=<クラスター名>" splunk-otel-collector-chart/splunk-otel-collector

設定のカスタム方法についてはこちら。

トレースデータからサービスマップが生成されました。
image.png

APMの使い方はこの辺りをご参照ください。

インフラ観点でのKubernetesのNodeやPodのモニタリングも行えています。想定外の状態(Nodeのリソース不足、DeploymentのSpecとの差異など)があればアラートも上がるようになっています。

image.png

なお、既にOtel Collectorが入っている場合はExporterを変えてあげればOKです。

メトリクス

トレース

OpenTelemetry Collector for Kubernetesも結局はこのExpoterを使っており、その他ProcessorなどがKubernetes環境に最適化されているというものです。

まとめ

マイクロサービスデモであるAstronomy ShopをSplunk Observability Cloudで可視化してみました。
色々ごちゃごちゃ書きましたが、計装した後、Splunk Otel Collectorを以下で入れればOKです。

git clone https://github.com/signalfx/splunk-otel-collector-chart
helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart
helm install my-local-splunk-o11y-otel-collector --set="splunkObservability.realm=<REALM名>,splunkObservability.accessToken=<アクセストークン>,clusterName=<クラスター名>" splunk-otel-collector-chart/splunk-otel-collector

肝は計装です。
これはOtel以外のAPMツールでも避けられないタスクです。
ならば工数をかけるなら、標準化されておりバックエンドを自由に選べるOtelを使うのが理にかなっていると思います。

0
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
0
0