概要

Next.jsアプリケーションを本番環境で安定して運用するためには、適切な監視とロギングの基盤が必要です。AWSのサービスやOpenTelemetryを活用することで、アプリケーションのパフォーマンスやエラーのトラッキングが可能になります。本記事では、Next.jsアプリケーションにおける監視とロギングのベストプラクティスを紹介します。

ロギングの実装

Next.jsでのロギングには、winstonのようなライブラリを使うことが一般的です。以下の例では、logger.jsファイルを作成し、APIリクエストやサーバーサイドのイベントを記録する方法を示します。

import winston from "winston";
const { combine, timestamp, json } = winston.format;
const logger = winston.createLogger({
  level: "info",
  format: combine(timestamp(), json()),
  transports: [
    new winston.transports.File({ filename: "app.log" })
  ],
});
export { logger };

これにより、アプリケーション内の重要な操作やエラーログを記録し、後で分析やトラブルシューティングに役立てることができます。これをNext.jsのAPIルートやサーバーコンポーネントに組み込むことで、各種イベントを適切にログに残すことが可能です。

OpenTelemetryによるモニタリング

OpenTelemetryは、分散トレーシングやメトリクスの収集に特化したオープンソースのフレームワークで、Next.jsアプリケーションのパフォーマンスを詳細に監視できます。Next.jsにOpenTelemetryを導入するには、@vercel/otelパッケージを使用して自動的にサーバーサイドのトレースを取得します。

OpenTelemetryのセットアップ

  1. next.config.jsinstrumentationHookを有効化します。

    const nextConfig = {
      experimental: { instrumentationHook: true }
    };
    module.exports = nextConfig;
    
  2. 必要なパッケージをインストールします。

    npm install @vercel/otel @opentelemetry/api
    
  3. instrumentation.jsファイルを作成し、OpenTelemetryを設定します。

    import { registerOTel } from '@vercel/otel';
    export function register() {
      registerOTel('my-next-app');
    }
    

この設定により、Next.jsのルートやAPIハンドラーに対してトレースが自動的に適用され、パフォーマンスのボトルネックやエラートラッキングが簡単に行えるようになります。

AWSを使った監視・ロギング基盤の構築

AWSのCloudWatchX-Rayを利用することで、Next.jsアプリケーションのモニタリングとロギングを強化できます。CloudWatchは、ログの集約とリアルタイムのメトリクスモニタリングを提供し、X-Rayはアプリケーション全体のリクエストフローを可視化します。

AWS CloudWatchの活用

CloudWatchを使用して、APIリクエストやエラーログ、パフォーマンスメトリクスを収集・分析します。さらに、アラームを設定することで、異常な動作をリアルタイムで検出し、迅速に対応できます。

aws logs create-log-group --log-group-name /nextjs/app
aws logs create-log-stream --log-group-name /nextjs/app --log-stream-name error-stream

これにより、Next.jsアプリケーションのエラーログを一元管理し、必要に応じて通知を受け取ることが可能です。

まとめ

Next.jsの監視・ロギング基盤をAWSやOpenTelemetryで構築することで、アプリケーションのパフォーマンスを最適化し、問題発生時に迅速に対応できる環境を整えられます。適切なロギングとモニタリングを通じて、安定した運用を実現しましょう。