Node.js でのログ記録とモニタリング: ベスト プラクティス

Mary-Kate Olsen
リリース: 2024-11-07 00:56:02
オリジナル
983 人が閲覧しました

Logging and Monitoring in Node.js: Best Practices

アプリケーションの健全性を維持し、問題を迅速に特定し、パフォーマンスを向上させるには、効果的なロギングと監視が不可欠です。この記事では、Node.js アプリケーションのロギングと監視について詳しく説明し、ロギング レベルの選択、構造化ログの設定、監視ツールとの統合、Winston と Elasticsearch を使用するためのベスト プラクティスなどの重要なトピックを取り上げます。

ロギングとモニタリングの概要

ロギングは、アプリケーションからリアルタイムのイベント、エラー、その他の重要な情報を取得するのに役立ちますが、モニタリングにはアプリケーションのパフォーマンス メトリクスを長期にわたって追跡することが含まれます。これらを組み合わせることで、アプリケーションの健全性に関する重要な洞察が提供され、プロアクティブな問題解決が可能になります。

Node.js での基本的なログの設定

組み込みのコンソール オブジェクトは単純なログ機能を提供しますが、実稼働アプリケーションでは専用のログ ライブラリの方が堅牢です。

基本的なコンソールのロギング

console.log("Server started on port 3000");
console.warn("This is a warning");
console.error("Error occurred while processing request");
ログイン後にコピー
ログイン後にコピー

ただし、複雑なアプリケーションでは、コンソール ログには、ログ レベル制御の欠如やログの永続性の欠如などの制限があります。

ウィンストンの紹介

Winston は、複数のログ レベル、トランスポート (ログ宛先)、および構造化ログを提供する Node.js の人気のログ ライブラリです。

  1. ウィンストンをインストールします:
   npm install winston
ログイン後にコピー
ログイン後にコピー
  1. ウィンストンのセットアップ
   const winston = require("winston");

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

   // Logging examples
   logger.info("Server started on port 3000");
   logger.error("Database connection failed");
ログイン後にコピー
ログイン後にコピー

適切なログレベルの選択

ログ レベルは、重要性に基づいてログ メッセージを分類します。一般的なログ レベルは次のとおりです:

  • エラー: データベースやサーバーの障害など、即時の対応が必要な重大な問題。
  • 警告: 非推奨の API など、重大ではない問題。
  • 情報: サーバーの起動やシャットダウンなどの一般的なアプリケーション情報。
  • デバッグ: 変数値など、開発中に役立つ詳細情報。

Winston でのログ レベルの構成

logger.level = "debug"; // Sets the minimum log level to debug, capturing all messages.
ログイン後にコピー
ログイン後にコピー

本番環境では、不要なログ データを避けるために、ログ レベルを info または warn に保つことが最善です。

一貫性を保つための構造化されたロギング

構造化ログにより、一貫した形式を維持することで、ログのフィルタリングと分析が容易になります。

ログへのメタデータの追加

user_id や request_id などのメタデータは、ログ内の特定のアクションを追跡するのに役立ちます:

logger.info("User login successful", { user_id: "12345" });
logger.error("Failed to fetch user data", { user_id: "12345", error: "Database unavailable" });
ログイン後にコピー
ログイン後にコピー

Elasticsearch との統合による一元的なロギング

Elasticsearch は、一元的なログ管理と検索機能に広く使用されています。

  1. Elasticsearch と Elasticsearch Transport をインストールします
console.log("Server started on port 3000");
console.warn("This is a warning");
console.error("Error occurred while processing request");
ログイン後にコピー
ログイン後にコピー
  1. Elasticsearch トランスポートを構成する
   npm install winston
ログイン後にコピー
ログイン後にコピー

この設定により Elasticsearch にログが送信され、リアルタイムのログ検索と分析に Kibana を使用できるようになります。

Prometheus と Grafana を使用したアプリケーション メトリクスの監視

モニタリングは、CPU 使用率、メモリ、応答時間などのアプリケーションのパフォーマンス指標を追跡し、アプリケーションの安定性を確保します。

Node.js を使用した Prometheus のセットアップ

  1. Prometheus クライアント ライブラリをインストールします
   const winston = require("winston");

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

   // Logging examples
   logger.info("Server started on port 3000");
   logger.error("Database connection failed");
ログイン後にコピー
ログイン後にコピー
  1. メトリクスの作成とエクスポート
logger.level = "debug"; // Sets the minimum log level to debug, capturing all messages.
ログイン後にコピー
ログイン後にコピー
  1. メトリクスエンドポイントを公開
logger.info("User login successful", { user_id: "12345" });
logger.error("Failed to fetch user data", { user_id: "12345", error: "Database unavailable" });
ログイン後にコピー
ログイン後にコピー

Grafana で視覚化する

Grafana は、Prometheus メトリクスからダッシュボードを作成するための強力なツールです。 Prometheus を Grafana のデータ ソースとして統合し、応答時間やエラー率などの指標を視覚化します。

実際の使用例: 電子商取引でのログ記録と監視

高いパフォーマンスと信頼性を維持するためにログ記録と監視が重要である電子商取引プラットフォームを考えてみましょう。

  1. すべてのトランザクションをログに記録: order_id や user_id などのメタデータを含む、構造化されたログを使用して注文と支払いのイベントをキャプチャします。
  2. エラー追跡: Winston を使用して、支払い失敗などのエラーをスタック トレースやメタデータとともにログに記録し、デバッグを高速化します。
  3. サーバーの状態を監視: 応答時間とリクエスト数を監視するように Prometheus を設定し、Grafana で視覚化してリアルタイムの洞察を得ることができます。
  4. アラートの設定: メトリクスに基づいてアラートを構成します。たとえば、リクエスト期間がしきい値を超えた場合、管理者にアラートを送信します。

この設定により、アプリケーションの健全性を包括的に把握できるようになり、問題を事前に検出して解決できるようになります。

結論

Node.js での堅牢なログ記録と監視の実装は、信頼性を維持し、迅速なトラブルシューティングを確実に行うために不可欠です。 Winston、Elasticsearch、Prometheus、Grafana などのツールを使用すると、構造化ログをキャプチャして一元管理し、重要なパフォーマンス メトリクスを効果的に監視できます。

以上がNode.js でのログ記録とモニタリング: ベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!