LoginSignup
0

More than 1 year has passed since last update.

posted at

Node-REDのログをCloud Loggingにキレイに出力したい

はじめに

こんにちは。
これは、2021年 NI+C Advent Calendar 12日目の記事です。
毎年のごとく、(Google Cloudのはずだけど)私はNode-RED絡めて書きます。

Node-RED Flowのログを出力する

Node-REDのフローからログを出力する際は、出力したいフローの箇所にDebug Nodeをつなげて出力します。GAE等でもこれは変わらずDebug Nodeの設定で「システムコンソール」にチェックを入れればCloud Loggingにちゃんと出力されるのですが、、、重要度指定なし、出力対象のオブジェクトは全てStringとして出力されてしまい、せっかくのCloud Loggingの便利さが活かせない残念な結果になってしまいます。お仕事で使うのであれば、こういったところも「運用しやすさ」を意識してやりたいですよね?でも、どうやればいいのでしょうか、、、?

Cloud Loggingにログをキレイに出力したい(前準備)

Google Cloud用にカスタムしたスターターを使いましょう。これを使うと、Cloud Loggingに合わせた出力が可能になります。もし、スターターコードは使わず進めたい場合は、以下を自分の環境に移植してください。

// settings.js
// 8行目
const logger = require('./utils/logger');
// 9行目
const logHelper = require('./utils/logHelper');
// 74-78行目
      handler: function () {
        return function (msg) {
          logHelper.log(msg);
        };
      },

Cloud Loggingにログをキレイに出力したい(フロー実装)

以下図のようにワイヤリングしてください。
スクリーンショット 2021-12-12 21.09.29.png
Function Nodeは以下のように記入ください
LOG_MSG(Function Node)

let logMsg = "ログタイトル(一言メッセージ)";

let logObj = {
    "LOG_SEVERITY": "info", // Cloud Loggingの重要度
    "LOG_MESSAGE": logMsg,
    "payload": msg.payload // ログの詳細
};

msg.log = JSON.stringify(logObj); // Cloud Logging出力用 ※1
msg.payload = logObj; // Node-REDデバッグタブ出力用

return msg;

※1: Version2.0.6以降(だったかしら、、)のNode-REDからDebug出力になにか手が入ったっぽく、Debug Nodeでシステムコンソール出力する前にJSONをStringに変換しないと、フォーマットが崩れて出力されてしまいます。。ですので、msg.log = JSON.stringify(logObj)は今は必ず行いましょう。(いつか、問題箇所見つけて修正します。。)

Cloud Loggingでログを確認

LOG NAMEは winston_log として出力されますので、winston_logで絞り込んでください。
LOG_MSG(Function Node)のコードとの対応は以下図のようになってますので、目的のログが出力されたか確認ください。
スクリーンショット 2021-12-12 21.57.45.png

まとめ

いかがでしたか??
Cloud LoggingはGCP上の様々なログを統合し確認できる、フィルタリング操作にも優れたツールで、Cloud Monitoringと組み合わせてログ条件でのalert設定も可能です。運用面で非常に役に立つこの機能にNode-REDも少しの工夫で対応できますのでぜひご活用ください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0