RailwayにOpenTelemetryコレクターとバックエンドをデプロイする
RailwayにOpenTelemetryコレクターとバックエンドをデプロイして、アプリケーションを監視およびトレースします。
著者: AIイノベーションズ 阿部隼也(X / Twitter)RailwayにOpenTelemetryコレクターとバックエンドをデプロイする
このチュートリアルでは、Railwayを使用して、アプリケーションの可観測性(オブザーバビリティ)を向上させるためのOpenTelemetryスタックをセットアップする方法を説明します。
OpenTelemetryとは?
OpenTelemetry (OTel)は、テレメトリーデータ(メトリクス、ログ、トレース)を計測、生成、収集、エクスポートするためのオープンソースの標準およびツールのセットです。これにより、アプリケーションのパフォーマンスと動作を深く理解することができます。
このチュートリアルについて
このチュートリアルでは、以下のコンポーネントをRailwayにデプロイします。
- バックエンドサービス: Jaeger(分散トレーシング用)、Zipkin(同じくトレーシング用)、Prometheus(メトリクス収集用)
- OpenTelemetryコレクター: アプリケーションからテレメトリーデータを受け取り、処理し、適切なバックエンドにエクスポートします。
- サンプルアプリケーション: テレメトリーデータを生成するExpress (Node.js)アプリ。
1. バックエンドサービスのデプロイ
Railwayのテンプレートマーケットプレイスを使用して、Jaeger、Zipkin、Prometheusをワンクリックでデプロイします。
Jaegerサービスの追加
Zipkinサービスの追加
Prometheusサービスの追加
2. OpenTelemetryコレクターのデプロイ
OpenTelemetryコレクターのリポジトリをフォークし、それをRailwayにデプロイします。コレクターの設定ファイル (otel-collector-config.yaml
) で、各バックエンド(Jaeger, Zipkin, Prometheus)へのエクスポーターを設定します。
Open Telemetry Collectorリポジトリのフォーク
Open Telemetryサービスの追加
チェックポイント
この時点で、Jaeger、Zipkin、Prometheus、およびOTelコレクターがRailwayプロジェクトで実行されているはずです。
3. Expressアプリのビルドと計測
OpenTelemetry SDKを使用してテレメトリーを生成するように、Expressアプリケーションを計測します。
プロジェクトの作成と初期化
アプリのビルド
計測SDKのビルド
4. Expressアプリのデプロイ
空のサービスを作成し、環境変数を設定して、計測されたExpressアプリをRailwayにデプロイします。
空のサービスの作成と環境の設定
Railway CLIからのデプロイ
5. テストと確認
デプロイしたExpressアプリにリクエストを送信し、JaegerやZipkinのUIでトレースデータが表示されること、またPrometheusでメトリクスが収集されていることを確認します。
ボーナス - NextJS
同様の計測アプローチは、Next.jsなどの他のフレームワークにも適用できます。
役立つリソース
結論
これで、Railway上に完全なOpenTelemetry可観測性スタックが構築されました。これにより、アプリケーションのパフォーマンスをプロアクティブに監視し、問題が発生した際に迅速にトラブルシューティングを行うことができます。
PR