nodered_settings.js¶
Node-RED自体の動作設定を行います。 既定では {ICE_HOME}/core/conf ディレクトリに配置されています。
Node-RED単体で動作する際の設定ファイル(settings.js)と同様の設定項目に対応しています。 設定項目の詳細は以下のURLを参照してください。
https://nodered.org/docs/user-guide/runtime/configuration
既定では以下のように設定されています。
const nodered_util = require('ddl/nodered_util');
module.exports = {
userDir: nodered_util.defaultUserDir,
flowFile: "flows.json",
httpAdminRoot: false,
httpNodeRoot: false,
disableEditor: true,
uiHost: "127.0.0.1",
uiPort: 22408,
logging: {
console: {
level: "off"
},
iceLogger: {
level: "info",
handler: nodered_util.iceLogger
}
}
};
注)userDirを既定値から変更する場合、Node-REDがICE提供ノードを参照できるように、{userDir}/node_modulesディレクトリを変更後のパスにコピ ーしておく必要があります。
ログ設定¶
Node-REDのカスタムロギングモジュールの機能を利用し、ICE CoreのロガーからNode-REDのログ出力を行います。
logging.iceLoggerがNode-RED側の設定となっており、ここでログレベルの変更が可能です。
ログ出力先やログローテートの設定はICE Coreのcore_logger.jsonで行います。 既定では以下のように設定されています。
"NODE-RED": {
"type": "file",
"filename": "/var/log/ice/node-red.log",
"maxLogSize":102400,
"backups":3
},
Node-REDフロー統計情報出力機能の有効化と動作設定¶
機能の有効化¶
次のコマンドを実行し、nodered_settings.jsをエディタで開きます。
# vi {ICE_HOME}/conf/nodered_settings.js
module.exports = {
<省略>
logging: {
<省略>
,
perfmon: {
level: "off",
metrics: true,
handler: nodered_util.perfLogger,
format: 'json',
interval: 10,
groups : [
{
id: "perf1",
send: [],
receive: [],
done: []
}
]
}
},
<省略>
};
上記のperfmonの箇所を追記してファイルを保存します。
続いて次のコマンドを実行し、core_logger.jsonをエディタで開きます。
# vi {ICE_HOME}/conf/core_logger.json
{
"appenders": {
<省略>
},
"PERFMON": {
"disabled": false,
"type": "file",
"filename": "/var/log/ice/flow_perf.log",
"maxLogSize": 10485760,
"backups": 3,
"layout" : {
"type" : "messagePassThrough"
}
}
},
"categories": {
<省略>
"SYSLOG": {"appenders": ["SYSLOG"], "level": "INFO"},
"PERFMON": {"appenders": ["PERFMON"], "level": "ALL"}
}
}
上記のappenders.PERFMONの箇所とcategories.PERFMONの箇所を追記し、ファイルを保存します。その後、ICE Coreを再起動します。
# systemctl restart ice-core
/var/log/ice/debug.logを確認し、以下の文章が表示されていればパフォーマンスモニタ機能が有効化されています。
"ICE performance monitor function is enabled."
動作設定と出力イメージ¶
簡単な統計情報の採取¶
Node-REDエディタを開き、統計情報を採取するノードのノードIDを確認します。 (対象ノードをクリックし、画面右側のペインから、ノードIDを確認する)
次のコマンドを実行し、nodered_settings.jsをエディタで開きます。
# vi {ICE_HOME}/conf/nodered_settings.js
確認したいノードIDをsend, receive, doneの配列に文字列型で追加します。
この操作を採取したいノードだけ繰り返し行い、ファイルを保存します。
ICE Coreを再起動します。
# systemctl restart ice-core
以下のファイルに統計情報を出力されることを確認します。
Linux /var/log/ice/flow_perf.log
Windows C:\ice\core\logs\flow_perf.log
出力イメージは以下になります。
(実際の出力では改行はなく1行で表示されます)
{
timestamp: 1609927931568,
memory : {
rss: 67118694.4,
heapTotal: 31305728,
heapUsed: 28940419.2
},
perf1 : {
send: 1.399,
receive: 1.399,
done: 0
}
}
出力は以下の意味を表します。
ラベル | 意味 | 単位 |
---|---|---|
timestamp | 情報採取時刻です | ミリ秒 |
memory.rss | プロセスのヒープメモリが使用する実メモリのサイズです | バイト |
memory.heapTotal | ヒープの総サイズです | バイト |
memory.heapUsed | ヒープの使用サイズです | バイト |
perf1.send | id: perf1のsendで指定ノードが採取期間に送信したメッセージ数の秒あたりの平均値です | 数 |
perf1.receive | id: perf1のreceiveで指定ノードが採取期間に受信したメッセージ数の秒あたりの平均値です | 数 |
perf1.done | id: perf1のdoneで指定ノードが採取期間に完了したメッセージ数の秒あたりの平均値です | 数 |
高度な使い方¶
① 対象ノードを複数指定する
send, receive, doneで対象ノードを指定する配列に、ノードIDを複数指定できます。
この場合、複数の指定ノードの総和の秒あたりの平均値が統計値として使われます。
設定は以下のように行います。
以下の例では、二つのノードのsendの合計値の統計情報を取得します。
module.exports = {
<省略>
logging: {
<省略>
,
perfmon: {
level: "off",
metrics: true,
handler: nodered_util.perfLogger,
format: 'json',
interval: 10,
groups : [
{
id: "perf1",
send: ["11111.11111", "22222.22222"],
receive: [],
done: []
}
]
}
},
<省略>
};
② 採取範囲(モニタリンググループ)を複数定義する
統計情報を採取するノードの組み合わせを複数指定できます。
例えばあるフローの開始部分と終了部分でモニタリンググループを分ける場合は、以下のように設定を行います。
module.exports = {
<省略>
logging: {
<省略>
,
perfmon: {
level: "off",
metrics: true,
handler: nodered_util.perfLogger,
format: 'json',
interval: 10,
groups : [
{
id: "head",
send: ["11111.11111"],
receive: [],
done: []
},
{
id: "tail",
send: [],
receive: ["22222.22222"],
done: []
}
]
}
},
<省略>
};
この場合、統計情報は以下のような出力になります。
(実際の出力では改行はなく1行で表示されます)
{
timestamp: 1609927931568,
memory : {
rss: 67118694.4,
heapTotal: 31305728,
heapUsed: 28940419.2
},
head : {
send: 1.399,
receive: 0,
done: 0
},
tail : {
send: 0,
receive: 1.399,
done: 0
}
}
③ 採取間隔を変更する
{ICE_HOME}/conf/nodered_settings.js内でintervalを設定することにより、採取間隔を秒単位の1(秒)以上86400(秒)以下の数値で指定できます。指定した間隔を一つの単位として、統計情報の算出を行います。
短くしすぎた場合、HW性能によってはCPUを一定量使用し続ける状態となる可能性があります。
本機能によりマシンの使用リソースがどのくらい増加するかを確認しながら値を変更してください。
この設定は任意で、既定値は10秒となります。
④ ファイル出力形式を変更する
出力フォーマットをJSONとCSVから選択できます。
{ICE_HOME}/conf/nodered_settings.js内のformatに'csv'を指定することで、統計情報の出力形式をCSVにすることができます。
この時の出力イメージは以下です。なお、実際にはヘッダ行は出力されません。
timestamp, rss, heapTotal, heapUsed, id1, send1, receive1, done1
1610087191548,34320383,16177151,14962551,perf1,0,0,0,
⑤ ファイル出力の動作設定
統計情報を出力するファイルの動作(ファイルのローテーション条件や保持数)を設定することができます。
設定は{ICE_HOME}/conf/core_logger.jsonで定義した"PERFMON"の設定を変更します。
この設定は必須で、既定値は以下となります。
ファイルアペンダ
ファイルサイズ 10MB
世代数 3
設定項目一覧¶
項目名 | 意味 | 値域 | 既定値 | 必須 |
---|---|---|---|---|
level | 内部で使用するパラメータです。変更できません。 | - | "off" | 〇 |
metrics | 内部で使用するパラメータです。変更できません。 | - | "metrics" | 〇 |
handler | 内部で使用するパラメータです。変更できません。 | - | "nodered_util.perfLogger" | 〇 |
format | 統計情報の出力フォーマットを設定します。 | "json"または"csv" | "json" | |
interval | 統計情報の採取間隔を秒で指定します。 | 1以上86400以下 | 10 | |
groups.id | モニタリンググループを区別するidを指定します。 他のモニタリンググループのidと重複できません。 |
任意の文字列 | "perf1" | 〇 |
groups.send | モニタリンググループで採取する送信メッセージを 送信するノードのidを指定します。複数の指定が可能です。 |
任意の文字列要素で構成される配列 | [] | |
groups.receive | モニタリンググループで採取する受信メッセージを 受信するノードのidを指定します。複数の指定が可能です。 |
任意の文字列要素で構成される配列 | [] | |
groups.done | モニタリンググループで採取する完了メッセージを 完了するノードのidを指定します。複数の指定が可能です。 |
任意の文字列要素で構成される配列 | [] |