アプリケーションの健全性を維持し、問題を迅速に特定し、パフォーマンスを向上させるには、効果的なロギングと監視が不可欠です。この記事では、Node.js アプリケーションのロギングと監視について詳しく説明し、ロギング レベルの選択、構造化ログの設定、監視ツールとの統合、Winston と Elasticsearch を使用するためのベスト プラクティスなどの重要なトピックを取り上げます。
ロギングは、アプリケーションからリアルタイムのイベント、エラー、その他の重要な情報を取得するのに役立ちますが、モニタリングにはアプリケーションのパフォーマンス メトリクスを長期にわたって追跡することが含まれます。これらを組み合わせることで、アプリケーションの健全性に関する重要な洞察が提供され、プロアクティブな問題解決が可能になります。
組み込みのコンソール オブジェクトは単純なログ機能を提供しますが、実稼働アプリケーションでは専用のログ ライブラリの方が堅牢です。
console.log("Server started on port 3000"); console.warn("This is a warning"); console.error("Error occurred while processing request");
ただし、複雑なアプリケーションでは、コンソール ログには、ログ レベル制御の欠如やログの永続性の欠如などの制限があります。
Winston は、複数のログ レベル、トランスポート (ログ宛先)、および構造化ログを提供する Node.js の人気のログ ライブラリです。
npm install winston
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");
ログ レベルは、重要性に基づいてログ メッセージを分類します。一般的なログ レベルは次のとおりです:
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 は、一元的なログ管理と検索機能に広く使用されています。
console.log("Server started on port 3000"); console.warn("This is a warning"); console.error("Error occurred while processing request");
npm install winston
この設定により Elasticsearch にログが送信され、リアルタイムのログ検索と分析に Kibana を使用できるようになります。
モニタリングは、CPU 使用率、メモリ、応答時間などのアプリケーションのパフォーマンス指標を追跡し、アプリケーションの安定性を確保します。
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");
logger.level = "debug"; // Sets the minimum log level to debug, capturing all messages.
logger.info("User login successful", { user_id: "12345" }); logger.error("Failed to fetch user data", { user_id: "12345", error: "Database unavailable" });
Grafana は、Prometheus メトリクスからダッシュボードを作成するための強力なツールです。 Prometheus を Grafana のデータ ソースとして統合し、応答時間やエラー率などの指標を視覚化します。
高いパフォーマンスと信頼性を維持するためにログ記録と監視が重要である電子商取引プラットフォームを考えてみましょう。
この設定により、アプリケーションの健全性を包括的に把握できるようになり、問題を事前に検出して解決できるようになります。
Node.js での堅牢なログ記録と監視の実装は、信頼性を維持し、迅速なトラブルシューティングを確実に行うために不可欠です。 Winston、Elasticsearch、Prometheus、Grafana などのツールを使用すると、構造化ログをキャプチャして一元管理し、重要なパフォーマンス メトリクスを効果的に監視できます。
以上がNode.js でのログ記録とモニタリング: ベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。