コンテンツに移動
DevOps & SRE

Node.js ライブラリの新しいバージョンでより多くの分析情報を引き出す

2022年5月21日
https://storage.googleapis.com/gweb-cloudblog-publish/images/nodejs.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2022 年 5 月 21 日に、Google Cloud blog に投稿されたものの抄訳です。

Google Cloud は、主な新機能として、Google Functions のようなサーバーレス環境でアプリケーションを実行する際に役立つ、エラー処理の改善と標準出力への構造化ロギングを備えた Node.js 用の Cloud Logging ライブラリの新しいアップデートのリリースをお知らせいたします。

Node.js 用の Cloud Logging ライブラリの最新バージョン v9.9.0 を使用すると、Node.js デベロッパーは Google Cloud からより簡単にログを送受信し、Log Explorer のような包括的なツールを使用することで、アプリケーションの状況に関するリアルタイムの分析情報を把握できます。Google Cloud を使用している Node.js デベロッパーの皆さんは、この機会にぜひ Cloud Logging をお試しください。

Node.js ライブラリの最新機能は、Node.js 用の Cloud Logging ライブラリに基づいた次のパッケージにも統合され利用できます。

Node.js 用の Cloud Logging ライブラリに慣れていない場合は、以下のコマンドを実行して、ライブラリをプロジェクトに追加することから始めてください。
読み込んでいます...

ライブラリのインストールが完了したら、プロジェクトで使用できます。以下では、Cloud Logging ライブラリの初期化、プロジェクト ID が割り当てられ構成されたクライアントの作成、単一のエントリ「Your log message」を記録する方法をご紹介します。

読み込んでいます...

このコードの実行によって生成されたログ メッセージはログ エクスプローラで次のように表示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_nodejs_library.max-1200x1200.jpg

最新の Node.js 用の Cloud Logging ライブラリでリリースされる重要な 2 つの機能は、標準出力への構造化ログエントリの書き込みと、デフォルトのコールバックによるエラー処理です。詳しく見ていきましょう。

構造化ログエントリを標準出力に書き込む

ユーザーは、LogSync クラスを使用することで、stdout やその他の Writable インターフェースにコンテキストリッチな構造化ログを書き込むことができます。このクラスは、HTTP ヘッダーからトレース コンテキストといった追加のログプロパティを抽出し、ローカルでの開発中に Cloud Logging エンドポイントと stdout への書き込みの切り替えに使用できます。

また、stdout への構造化ロギングは、Logging エージェントと統合できます。stdout にログが書き込まれると、Logging エージェントでは、それらのログを受け取り、プロセス外で Cloud Logging に配信します。Logging エージェントを使用すると、Logging API にストリーミングする前に各エントリーにより多くのプロパティを追加できます。

サーバーレス アプリケーション(Cloud Functions や Cloud Run で実行されているアプリケーション)では、LogSync クラスを使用することをおすすめします。CPU 不足やその他の環境要因により、ログがすぐに Logging API に送信されないために非同期ログの配信が中断される可能性があるためです。Cloud Functions と Cloud Run アプリケーションは性質上エフェメラルで、ログが Cloud Logging サーバーに送信される前にインスタンスがシャットダウンされると寿命が短くなり、ロギングデータの欠落の原因になる場合があります。

現在、Google Cloud のマネージド サービスでは、プロビジョニングするリソースに、すべての Google のサーバーレス環境用 Logging エージェントを自動的にインストールします。つまり、ご自身のアプリケーションで LogSync を使用し、標準出力で Cloud Logging にシームレスにログを配信できます。

以下は、LogSync クラスの使用方法のサンプルです。

読み込んでいます...

@google-cloud/logging-winston または @google-cloud/logging-bunyan ライブラリを使用する場合、LoggingWinstonLoggingBunyan の各コンストラクタ オプションに、redirectToStdout パラメータを設定できます。以下は、LoggingWinston クラスの構造化ログ出力を stdout にリダイレクトする方法を示したサンプルコードです。

読み込んでいます...

デフォルトのコールバックによるエラー処理

ユーザーは、Log クラスを使用することで、ログの書き込みと削除を非同期で行うことができます。しかし、ログエントリの書き込みや削除ができず、エラーがスローされる場合があります。このエラーを適切に処理しないと、アプリケーションがクラッシュする可能性があります。

エラー処理の一つの方法として、ログの書き込み / 削除の呼び出しを待ち、try/catch でラップする方法が考えられます。しかし、書き込みや削除の呼び出しを毎回待つと、遅延が発生する可能性があります。これは、以下に示すようにコールバックを追加するだけで回避できます。

読み込んでいます...

書き込みや削除を呼び出すたびにコールバックを追加するとコードが重複し、特にエラーを処理するコードが常に同じである場合は、呼び出しごとに忘れずにコールバックを含めることは面倒な場合があります。この負担をなくすために、Google Cloud は Log コンストラクタに渡される LogOptions で設定できる Log クラスのデフォルトのコールバックを提供する機能を導入しました。以下に例を示します。

読み込んでいます...

@google-cloud/logging-winston または @google-cloud/logging-bunyan ライブラリを使用する場合、LoggingWinstonLoggingBunyan の各コンストラクタ オプションに、defaultCallback パラメータを使用してコールバックを設定できます。以下の例は、LoggingWinston クラスにデフォルトのコールバックを設定する方法を示したものです。

読み込んでいます...

次のステップ

  • Node.js 用の Cloud Logging ライブラリをプロジェクトに統合すると、最新機能が使用できるようになります。

  • Google Cloud で最新の Node.js ライブラリを試すには、以下のクイックスタート チュートリアル ガイドに従ってください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/guide_me_button.max-400x400.jpg


- デベロッパーリレーション エンジニア Alexander Losovsky

投稿先