OpenTelemetry Operator を使って  Grafana Cloud Application Observability を  すばやく構築する方法

OpenTelemetry Operator を使って Grafana Cloud Application Observability を すばやく構築する方法

2024-10-182 min
Twitter
Facebook
LinkedIn

注: 2025年2月20日付で、Explore アプリ(Explore Metrics、Explore Logs、Explore Traces、Explore Profiles)は Drilldown アプリ(Metrics Drilldown、Logs Drilldown、Traces Drilldown、Profiles Drilldown)に名称変更されました。

アプリケーションの健全性を監視することは、私たち自身の健康を管理することによく似ています。心拍数、血圧、全身状態といったバイタルサインは、問題が深刻化する前に異常を察知し、健康維持に役立ちます。

同様に、アプリケーションの健全性を保つには、CPU 使用率、メモリ消費量、アプリケーションの応答時間などのパフォーマンス指標を継続的に監視する必要があります。体調不良の症状が出たときに、休養、生活習慣の改善、医療措置などで対処するのと同じです。アプリケーションで障害が発生した場合も、開発者と SRE は根本原因と影響範囲を迅速に評価し、同様のサービス停止を再発させないために必要な変更を特定する必要があります。

異常なリクエスト率、エラーの急増、応答時間の低下など、アプリケーションに不安定化や劣化の兆候が現れた場合、SRE と開発者は表面的な症状ではなく、その背後にある問題に対処しなければなりません。Grafana Cloud Application Observability を使用すると、SRE、開発者、運用担当者は、大規模な分散システムで発生している問題を迅速に特定できます。

このガイドでは、OpenTelemetry Operator と Kubernetes クラスターを使って Application Observability と Explore アプリを有効化する方法を、簡単な手順形式で説明します。わずか 20 分で、自動計装のコンポーネントをアプリケーションへ自動的に注入・構成・パッケージ化し、ほぼ「手放し」で利用できるようになります。

Video

アプリケーションの健全性監視で一般的に使われるシグナルとは?

アプリケーションの健全性を監視するには、どのシグナルを使えばよいのでしょうか。選択肢は多いため、順に見ていきましょう。

  • メトリクス: 「何が」「いつ」起きたのかを効率的かつ迅速に把握できます(例:どのサービスが、何時に壊れたか)。
  • ログ: アプリケーションで問題が起きた「理由」を読み解くのに役立ちます(例:なぜこのサービスでエラーが発生しているのか)。
  • トレース: 問題が「どこで」発生しているかを示します(例:分散システムのどこで障害が起きているのか)。

分散システムでは、どのサービスが劣化しているかを知るだけでは十分でない場合があります。正確な根本原因分析を行うには、分散システム内のどこで障害が発生しているかを把握する必要があります。ここで、メトリクスやログだけでは得られない詳細をトレーシングが提供します。

通常、トレースはコード内で手動設定する必要があり、手間がかかるうえにミスも起こりやすい作業です。この課題の解決策がゼロコード計装/自動計装です。アプリケーションからシグナルを送出するためのカスタムコードを追加する必要がなくなります。計装が自動で処理されるため、生産性が大きく向上し、追加コードの作成や保守にかかる負担を減らせます。

自動計装には多くの利点がありますが、導入時の作業負担を理由に採用をためらうユーザーも少なくありません。開発速度の速い DevOps チームは自動化を重視しますが、アプリケーションに自動計装を設定するには、SDK、エージェント、パッケージの追加など、複数の手作業が必要になるのが一般的です。これらはリスク、エラー、誤設定につながる可能性があります。そのため、導入の煩雑さが潜在的な利点を上回ると感じ、開発者が計装自体を避けてしまう傾向があります。

OpenTelemetry Operator は、Kubernetes の仕組みを使って複雑な作業を簡略化し、この問題を解決します。開発者は、コードやイメージを専用の SDK やエージェントに連携させるために何時間も費やす代わりに、コードの提供に集中できます。

はじめに

ここで、OpenTelemetry Operator 自体のセットアップや設定は簡単なのか、と疑問に思うかもしれません。そこで、ほとんど手間をかけずに、20 分未満で Kubernetes クラスターにこの自動化を有効化する方法を紹介します。それでは始めましょう。

背景

自動計装の設定方法に入る前に、まず何を指しているのか、そしてなぜ役立つのかを整理します。

ゼロコード計装とは?

ゼロコード計装は、コードを変更せずにアプリケーションへトレースシグナルの計装を行う方法です。

OpenTelemetry で自動計装を使う理由は?

ゼロコード計装をアプリケーションへ注入するための自動化された手段を利用できます。

OpenTelemetry Operator とは?

OpenTelemetry Operator は、自動計装を有効にするために必要なリソースを Kubernetes クラスターへデプロイできる Helm チャートです。

自動計装のセットアップ方法

このガイドの手順を正しく実施するため、以下の前提条件を満たしているものとします。

  • Grafana Cloud アカウント(お持ちでない場合は、無料アカウントに今すぐ登録してください)
  •  kubectl または Helm をコンソールから使用できる Kubernetes クラスター
  •  Kubernetes クラスターにデプロイ済みの Alloy Kubernetes Monitoring Helm チャート
  •  Grafana Cloud でメトリクス、ログ、トレースのシグナルが表示されることを確認できること
  •  Explore アプリを使って、これらのシグナルが正しく流れていることを確認できること
  •  Kubernetes のすべてのリソース/オブジェクトに対する管理者アクセス
  •  Kubernetes のデプロイとトラブルシューティングに関する知識
  •  Kubernetes を操作しやすくするための K9S
  •  テストを簡略化するため、Kubernetes クラスターでは default 名前空間のみを使用すること

1. OpenTelemetry Operator Helm チャートをデプロイする

OpenTelemetry Helm チャートは OpenTelemetry Operator をクラスターにインストールし、標準インストールの範囲を超えて Kubernetes API を拡張できるようにします。

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update

helm install opentelemetry-operator open-telemetry/opentelemetry-operator \
--set "manager.collectorImage.repository=OpenTelemetry/opentelemetry-collector-k8s" \
--set admissionWebhooks.certManager.enabled=false \
--set admissionWebhooks.autoGenerateCert.enabled=true

2. Kubernetes Instrumentation カスタムリソースをデプロイする

これは Kubernetes の特殊なオブジェクトで、アプリケーションが適切なエンドポイントへデータを送信できるよう、OpenTelemetry Operator がどのように構成するかを記述します。ここでは、OpenTelemetry Collector のベンダーニュートラルなディストリビューションである Grafana Alloy に送信します。

注: このコマンドを実行する前に、OpenTelemetry Operator のインストールが完全に完了するまで待ってください。完了前に実行すると、「webhook」エラーが発生します。 endpoint パラメーターは、適切な Alloy OpenTelemetry Protocol(OTLP) サービスエンドポイントに置き換える必要があります。以下の値は、標準的な Kubernetes Monitoring Alloy Helm チャートで使用できます。

kubectl apply -f - < **\*Note:** See the YAML section: `spec.template.metadata.annotations`. To view a list of possible language annotations, [click here](https://opentelemetry.io/docs/kubernetes/operator/automatic/#add-annotations-to-existing-deployments).\*

次のコマンドを実行して、アプリケーションを Kubernetes にロードします。

kubectl apply -f - < _Note: This may not be desired if apps in the namespace use different runtimes, in which case annotate the deployment manifests for each app in their deployment YAML and do not use this method._

そのためには、以下のコマンドを順番に実行します。

    kubectl create namespace helloworld-nodejs-app
    kubectl create annotation instrumentation.opentelemetry.io/inject-nodejs="default/demo-instrumentation" -n helloworld-nodejs-app

ここまでの手順を完了し、自動計装についてさらに知りたい場合は、Grafana Beyla もご覧ください。Grafana Beyla は、Application Observability を簡単に始められる、次世代の eBPF ベースのアプリケーション自動計装ツールです。

Tags