前回、Google Functions: console.infoやconsole.errorなどとログビューアの「重大度」の関係性という記事を投稿しました。そこではconsole.error
やconsole.info
などのConsole APIでは、GCP上のログの重要度(severity)は、DEFAULT
かERROR
の二択になるということを説明しました。
GCP上の重要度はこの2つしか無いわけではなく、以下の9つのレベルがあります。
この投稿では、Google Cloudのロギングクライアントライブラリを使って、Cloud Functionsでも重要度を指定したロギングをする方法を説明します。
この投稿で学ぶこと
- Google Cloud Function & Node.jsで@google-cloud/loggingを使って重要度をつけたログを記録する方法
- そして、その面倒くささ。
-
console.log
と@google-cloud/loggingで記録されるログ内容の違い。
ロギングクライアントライブラリをインストールする
まず必要となるロギングクライアントライブラリをインストールします。
yarn add @google-cloud/logging
ライブラリをCloud Functionsに組み込む
次にこのロギングライブラリをCloud Functionsの実装に組み込みます。
下のコードが組み込んだものです。console.log
を使ってロギングするのと打って変わって、いろいろな下準備が必要なのと、ログを記録するごとにログエントリーオブジェクトを作る必要があるのが分かります。ちょっとめんどくさそうですね。
const { Logging } = require('@google-cloud/logging')
exports.loggingWithClient = async (req, res) => {
// クライアントを作る
const logging = new Logging()
// ログ出力先を決めてロガーを作る
const log = logging.log('my-name')
// ログエントリーを作る
const entry = log.entry(
{
resource: { type: 'global' },
severity: 'INFO', // 重要度「INFO」を指定
},
'ログをクライアントで書き込むテスト',
)
// ログを書き込む
await log.write(entry)
res.send('OK')
}
ひとまずこれをデプロイして、
gcloud functions deploy loggingWithClient --runtime=nodejs12 --trigger-http
呼び出してみます:
curl https://asia-northeast1-${PROJECT}.cloudfunctions.net/loggingWithClient
どのようにログが記録されたか、ログビューアを開いてみます。console.log
で記録したログは、自動的にどの関数のものか関連付けされるため、管理コンソールの「Cloud Functions」から当該関数の「ログを表示」から行く導線が使えましたが、上のコードで記録したログは関数に紐づけてロギングしていないので、「ロギング」の「ログビューア」から探しに行きます:
この導線からだと、プロジェクトの全ログが出るので、たくさんログがある場合は「直近の3分」などで絞り込むと見つけやすいです。
このように、console.info
などではできなかった重要度「INFO」でロギングされているのが確認できます:
今回試したサンプルコードでは、ログエントリーのメタデータを色々省いたため、かなり質素な内容になっています:
下は普通にconsole.log
しただけのログエントリーですが、それと比べると情報の少なさが分かります:
まとめ
この投稿を通じて、次のことが分かったと思います。
- Google Cloud Function & Node.jsで@google-cloud/loggingを使って重要度をつけたログを記録する方法
- そして、その面倒くささ。
-
console.log
と@google-cloud/loggingで記録されるログ内容の違い。
@google-cloud/loggingはかなり低レベルなロギングができる一方、使い勝手が良くなく、どの関数で実行されたかなどは自動的に記録されないので、次回はもっと利便性の高い方法について投稿したいと思います。