DUICUO

Kubernetes 上でエンドツーエンド、非侵入型、オープンソース、監視可能なソリューションを構築する

Odigos (https://github.com/keyval-dev/odigos) は、企業が独自の可観測性パイプラインを構築・維持するためのオープンソースの可観測性コントロールプレーンです。Odigos を利用することで、アプリケーションはトレース、メトリクス、ログを数分で配信できます。重要なのは、コードの変更を必要とせず、完全に非侵入的な処理であることです。

アプリケーションが世界中の数十のノードにまたがる数百のポッド上で実行される場合、アプリケーション全体の完全な状況把握は困難です。これらの環境のパフォーマンスと可用性を追跡、管理、最適化する必要があるチームにとって、可観測性は重要なタスクとなります。

適切に統合された可観測性ツールは、データを一元化し、パフォーマンス、使用状況、ユーザー行動といった主要な指標に関するよりスマートな洞察を提供することで、問題を監視およびトラブルシューティングできます。可観測性ツールは、お客様が使用する言語とフレームワークをサポートし、コンテナプラットフォームやその他のツール(通信やアラートを含む)と容易に統合できる必要があります。問題は、実装、保守、スケーリングが継続的なタスクであり、適切な実行と継続的な構成がなければ、可観測性ツールは限界があり、多くの場合、効果を発揮しないことです。

R&Dチームにとって、クラウドにおけるオブザーバビリティ機能の適用には、特にOpenTelemetryとeBPFへの移行が進む中で、特別なスキルセットが求められます。企業は、限られた人材プールの中で、競争の激しい人材を確保し、この特別なスキルセットを習得できるようにする必要があります。SDKの学習、(各言語に対応した)自動化ツールの追加、コードの記述、データコレクターの導入と保守など、これらはすべて膨大な時間と知識を必要としますが、ほとんどの組織にはそれらが不足しています。

こうした統合の課題に対処するため、一部の大手オブザーバビリティツールベンダーは独自のエージェントを提供し、独自のカスタマイズされたソリューションを提供しています。しかし、独自のエージェントは独自の形式でデータを取り込み、保存するため、特定のベンダーに縛られてしまうという問題があります。企業はオープンソース標準との互換性や、部門間でのデータ共有・アクセスを求める傾向が高まっていますが、データを単一のベンダーに縛り付けることは、こうした取り組みを阻害し、コスト増大につながります。

Odigos Observability Control Planeは、組織が数分でオブザーバビリティ・パイプラインを構築できる包括的かつ完全自動化されたソリューションを提供します。Odigosは、サードパーティとの統合、オープンソース、オープンスタンダード、そしてより包括的なアプローチに注力しており、複数のオブザーバビリティ・ソフトウェア・プラットフォームとオープンソース・ソリューションを組み合わせる際の複雑さを軽減します。

Odigosは、クラスター内の各アプリケーションのプログラミング言語を自動検出し、対応する自動検出を実行します。コンパイル言語(Goなど)の場合はeBPF、仮想マシン言語(Javaなど)の場合はOpenTelemetryを使用してアプリケーションを検出します。さらに、Odigosによって作成されるパイプラインは、APIキーをKubernetesシークレットとして永続化したり、最小限のコレクターイメージを使用したりするなど、ベストプラクティスに準拠しています。オープンソースで依存しないObservabiityコントロールプレーンをインストール、構成、保守できるため、あらゆる規模の組織は、いつでもニーズに合ったツールを導入し、必要に応じてツールを追加することができます。

Odigos は、観測可能性をシンプルにし、誰でもアクセスできるようにします。

使用

準備する

次に、Googleが作成したサンプル銀行アプリケーションであるbank-of-athnos(https://github.com/keyval-dev/bank-of-athnos)アプリケーションをインストールします。検出コードを含まない修正版を使用して、Odigosがアプリケーションから観測データを自動的に収集する方法を説明します。

もちろん、これにはKubernetesクラスターが必要です。ローカル開発環境を使用している場合は、「kind」キーワードを使用してテストクラスターを作成することを強くお勧めします。「 ​kind create cluster​コマンドを実行するだけでクラスターを作成できます。クラスターを作成したら、以下のコマンドでテストアプリケーションをデプロイします。

 kubectl apply -f https://raw.githubusercontent.com/keyval-dev/bank-of-athnos/main/release/kubernetes-manifests.yaml

次のステップに進む前に、すべてのポッドが実行されていることを確認してください (これには時間がかかる場合があります)。

Odigosをインストールする

次に、Odigosをインストールする必要があります。最も簡単な方法は、Helm Chartを使ってインストールすることです。

 Helm リポジトリに odigos を追加 https://keyval-dev.github.io/odigos-charts/
helm install my-odigos odigos/odigos --namespace odigos-system --create-namespace

odigos-system 名前空間内のすべてのポッドが実行されたら、次のコマンドを実行して Odigos UI を開くことができます。

 kubectl ポートフォワード svc/odigos-ui 3000:3000 -n odigos-system

次に、ブラウザで http://localhost:3000 経由で Odigos UI にアクセスすると、次のようなページが表示されます。

Odigos が観察に使用するアプリケーションを選択するには、次の 2 つの方法があります。

  • オプトアウト(推奨):導入されるすべての新規アプリケーションを含むすべてのプログラムを検出します。検出されないアプリケーションは、ユーザーが手動でマークできます。
  • オプトイン: ユーザーが手動で選択したアプリケーションのみを検出します。

ここでは、オプトアウト モードを使用することを選択します。

構成

次に、Odigosに独自のObservableバックエンドへのアクセス方法を伝える必要があります。Odigosは多くのバックエンドサービスをサポートしています。

例えば、Prometheus、Tempo、Lokiという3つのサービスをセルフホストすることにしました。もちろん、これら3つのサービスは事前にデプロイしておく必要があります。

次の 3 つの宛先を追加します。

テンポ:

  • 名前:テンポ
  • URL : http://observability-tempo.observability

Prometheus : 追加の宛先を追加するには、サイドバーから宛先を選択し、「新しい宛先の追加」をクリックします。

  • 名前:プロメテウス
  • URL : http://observability-prometheus-server.observability

ロキ

  • 名前:ロキ
  • URL : http://observability-loki.observability

選択後、Odigos が必要なコレクターのデプロイを完了し、対象アプリケーションを検出するまで数秒お待ちください。以下のプログラムを実行することで、進行状況を監視できます。

 kubectl ポッドを取得 -w

すべてのポッドが実行されるまで待ちます(transactionservice アプリケーションは起動に時間がかかるため、特に注意してください)。最後に、Grafana で観測可能なデータを確認します。Grafana では、メトリクスとトラッキングデータ、ログデータとの相関関係を確認できるようになります。

Grafana インスタンスへのポート転送を実行することもできます。

 kubectl ポートフォワード svc/observability-grafana -n オブザーバビリティ 3100:80

http://localhost:3100 に移動し、ユーザー名として「admin」を入力し、パスワードとして次のコマンドの出力を入力します。

 kubectl get secret -n observability observability-grafana -o jsnotallow=”{.data.admin-password}” | base64 --decode

サービスグラフ

これで、マイクロサービスのサービス グラフを表示できるようになりました。

  1. サイドバーの「エクスプローラー」をクリックします。
  2. データソースとしてTempoを選択
  3. [サービス グラフ] タブを選択します。
  4. 「クエリを実行」ボタンをクリックしてクエリを開始します。

索引

次に、いくつかのメトリクスを確認します。サービスグラフのコンタクトノードをクリックし、「リクエストレート」を選択します。

すると、以下に示すような非常によく知られたグラフが表示されます。

Odigos によって収集される他の多くのメトリックは、Prometheus データ ソースから簡単にクエリできます。完全なリストについては、このドキュメント ( ​https://odigos.io/docs/telemetry-types/​ ) を参照してください。

追跡

サービスグラフで連絡先アプリケーションをもう一度クリックし、今度はリクエストヒストグラムを選択します。指標とトラッキングをリンクするには、「エグザンプラ」と呼ばれる機能を使用します。エグザンプラを表示するには、以下の手順に従ってください。

  1. オプションメニューを開きます。
  2. サンプルを開きます。
  3. ヒストグラムに緑色のダイヤモンドが追加されていることに注意してください。

追加されたポイントのいずれかにマウスを移動し、「テンポでクエリ」をクリックします。以下のようなトラッキングデータが表示されます。

このトレースにより、リクエスト全体の各部分にかかった時間を正確に確認でき、1 つの部分を詳しく調べると、データベース クエリなどの他の情報が明らかになります。

ログ

特定の操作をさらに詳しく調査するには、小さなファイルアイコンを押すだけで関連ログを表示できます。バランサーの横にあるファイルアイコンを押すと、関連ログが表示されます。

要約

オープンソースソリューションのみを使用して、ログ、トレース、メトリクスを抽出・転送することがいかに簡単かをお見せしました。さらに、単一のアプリケーションからトレース、メトリクス、ログデータを数分で生成できるようになり、さらに、さまざまなシグナルを相関させる機能も追加されました。メトリクスはトレースと、トレースはログと相関させることができるため、対象アプリケーションの本番環境における問題を迅速に検出・修正するために必要なすべてのデータが得られます。