node-red / node-red/node-red-nodes

node-red-node-tail causes node-red termination after size check for /var/log/messages error: ENOENT: no such file or directory, stat '/var/log/messages'

Open
#795 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
1.1k
Forks
612
Avg merge
13h 57m
Merged PRs (30d)
3

Description

Which node are you reporting an issue on?

node-red-node-tail is used in this flow for displaying error messages in a node-red-dashboard

image
[{"id":"e84c1031.b43f2","type":"tail","z":"d14800ce.426d4","name":"","filetype":"text","split":"true","filename":"/var/log/messages","inputs":0,"x":130,"y":1140,"wires":[["15fbcaac.5e0b35"]]},{"id":"15fbcaac.5e0b35","type":"switch","z":"d14800ce.426d4","name":"Filter Errors","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"Error","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":1140,"wires":[["34b6985e.3703f","62b4aeaa.115f78"]]},{"id":"34b6985e.3703f","type":"counter","z":"d14800ce.426d4","name":"Count Errors","init":"0","step":"1","lower":"","upper":"","mode":"increment","outputs":2,"x":510,"y":1140,"wires":[["ec3d71c8.81c3c8","990394e1.b136a"],["fdf03a43.c8ac2","59598d5a.a91a9c"]]},{"id":"ec3d71c8.81c3c8","type":"ui_gauge","z":"d14800ce.426d4","name":"CCU Fehler","group":"b2a5740.e3c2f1","order":1,"width":6,"height":4,"gtype":"gage","title":"Anzahl","label":"Fehler","format":"{{value}}","min":0,"max":"500","colors":["#00b500","#e6e600","#ca3838"],"seg1":"125","seg2":"250","x":690,"y":1080,"wires":[]},{"id":"fdf03a43.c8ac2","type":"function","z":"d14800ce.426d4","name":"Rotate Entries","func":"var dashboardLog = context.get('dashboardLog')|| [];\n \ndashboardLog.push(msg);\nif (dashboardLog.length > 20) {\n    // Delete oldest message if > 20\n    dashboardLog.shift();\n    dashboardLog.length = 20;\n} \n\nif (msg.resetlog) {\n    dashboardLog = [];\n}\n \n// store the value back\ncontext.set('dashboardLog',dashboardLog);\n \n// make it part of the outgoing msg object\nmsg = {};\nmsg.payload = dashboardLog;\nreturn msg;","outputs":1,"noerr":0,"x":700,"y":1200,"wires":[["f3be4f6c.225958"]]},{"id":"59598d5a.a91a9c","type":"join","z":"d14800ce.426d4","name":"Prepare Message","mode":"custom","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\r\\n","joinerType":"str","accumulate":false,"timeout":"","count":"5","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":710,"y":1140,"wires":[[]]},{"id":"f3be4f6c.225958","type":"ui_template","z":"d14800ce.426d4","group":"97aaa7e1.c96128","name":"Error Dashboard Log","order":1,"width":12,"height":7,"format":"<ul>\n   <li ng-repeat=\"x in msg.payload\">\n       <p style=\"color:red\">{{x.topic}}</p>\n       <ul>\n           <li><p style=\"font-size:11px\">{{x.payload}}</p></li>\n       </ul>\n   </li>\n</ul>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":false,"templateScope":"local","x":940,"y":1200,"wires":[[]]},{"id":"9688061b.b2dc48","type":"ui_button","z":"d14800ce.426d4","name":"Reset Error Count","group":"b2a5740.e3c2f1","order":5,"width":0,"height":0,"passthru":false,"label":"Zurücksetzen","tooltip":"","color":"","bgcolor":"","icon":"mi-clear","payload":"true","payloadType":"bool","topic":"","x":130,"y":1080,"wires":[["229fc580.c38dc2"]]},{"id":"229fc580.c38dc2","type":"change","z":"d14800ce.426d4","name":"Set Reset Message","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"},{"t":"set","p":"topic","pt":"msg","to":"Reset Error Count","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":1080,"wires":[["34b6985e.3703f"]]},{"id":"83893482.d56ca8","type":"ui_button","z":"d14800ce.426d4","name":"Clear DashLog","group":"97aaa7e1.c96128","order":2,"width":0,"height":0,"passthru":false,"label":"Protokoll leeren","tooltip":"Anzeige der letzten 20 gespeicherten Fehler löschen","color":"","bgcolor":"","icon":"mi-delete_sweep","payload":"true","payloadType":"bool","topic":"","x":120,"y":1200,"wires":[["ad9da38f.553c98"]]},{"id":"ad9da38f.553c98","type":"change","z":"d14800ce.426d4","name":"Set Reset Message","rules":[{"t":"set","p":"resetlog","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":1200,"wires":[["fdf03a43.c8ac2"]]},{"id":"990394e1.b136a","type":"ui_text","z":"d14800ce.426d4","group":"3917802.e83608","order":2,"width":0,"height":0,"name":"","label":"CCU Fehler:","format":"{{value}}","layout":"row-left","x":690,"y":1040,"wires":[]},{"id":"62b4aeaa.115f78","type":"debug","z":"d14800ce.426d4","name":"Filtered Errors","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":700,"y":1260,"wires":[]},{"id":"b2a5740.e3c2f1","type":"ui_group","name":"Fehler","tab":"a46e92f.58191f","order":6,"disp":true,"width":"6","collapse":false},{"id":"97aaa7e1.c96128","type":"ui_group","name":"Fehlermeldungen","tab":"a46e92f.58191f","order":7,"disp":true,"width":"12","collapse":false},{"id":"3917802.e83608","type":"ui_group","name":"Ereignisse","tab":"4e9b13b2.12840c","order":6,"disp":true,"width":"6","collapse":false},{"id":"a46e92f.58191f","type":"ui_tab","name":"System","icon":"settings","order":10,"disabled":false,"hidden":false},{"id":"4e9b13b2.12840c","type":"ui_tab","name":"Home","icon":"home","order":1}]
What are the steps to reproduce?

There seems not to be an easy way to reproduce. I experience this problem several times with no visible cause. The only guess I have could be the daily rotation of the /var/log/messages file executed by a cron job. But this happens at a different time (each Midnight) as the crash of the node-red daemon process. May be a simultaneous access by a second process, since the relevant file is used for logging messages from the system running node-red.

What happens?

node-red-node-tail log a node-red error, after that the node-red daemon terminates:

Apr  9 01:56:12 {{HOSTNAME}} node-red[7898]: [tail:e84c1031.b43f2] size check for /var/log/messages failed: Error: ENOENT: no such file or directory, stat '/var/log/messages'
Apr  9 01:56:12 {{HOSTNAME}} node-red: 9 Apr 01:56:12 - [red] Uncaught Exception:
Apr  9 01:56:12 {{HOSTNAME}} node-red: 9 Apr 01:56:12 - Error: ENOENT: no such file or directory, stat '/var/log/messages'
Apr  9 01:56:12 {{HOSTNAME}} node-red:     at Object.statSync (fs.js:1086:3)
Apr  9 01:56:12 {{HOSTNAME}} node-red:     at Tail.latestPosition (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:74:23)
Apr  9 01:56:12 {{HOSTNAME}} node-red:     at Tail.change (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:118:22)
Apr  9 01:56:12 {{HOSTNAME}} node-red:     at Tail.watchEvent (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:183:18)
Apr  9 01:56:12 {{HOSTNAME}} node-red:     at FSWatcher.<anonymous> (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:143:101)
Apr  9 01:56:12 {{HOSTNAME}} node-red:     at FSWatcher.emit (events.js:315:20)
Apr  9 01:56:12 {{HOSTNAME}} node-red:     at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:186:12)
Apr  9 01:56:12 {{HOSTNAME}} node-red: Node-RED exited with non-zero exit status 1
...
Apr  9 12:15:48 {{HOSTNAME}} node-red[24971]: [tail:e84c1031.b43f2] size check for /var/log/messages failed: Error: ENOENT: no such file or directory, stat '/var/log/messages'
Apr  9 12:15:49 {{HOSTNAME}} node-red: 9 Apr 12:15:49 - [red] Uncaught Exception:
Apr  9 12:15:49 {{HOSTNAME}} node-red: 9 Apr 12:15:49 - Error: ENOENT: no such file or directory, stat '/var/log/messages'
Apr  9 12:15:49 {{HOSTNAME}} node-red:     at Object.statSync (fs.js:1086:3)
Apr  9 12:15:49 {{HOSTNAME}} node-red:     at Tail.latestPosition (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:74:23)
Apr  9 12:15:49 {{HOSTNAME}} node-red:     at Tail.change (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:118:22)
Apr  9 12:15:49 {{HOSTNAME}} node-red:     at Tail.watchEvent (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:183:18)
Apr  9 12:15:49 {{HOSTNAME}} node-red:     at FSWatcher.<anonymous> (/usr/local/addons/redmatic/var/node_modules/node-red-node-tail/node_modules/tail/lib/tail.js:143:101)
Apr  9 12:15:49 {{HOSTNAME}} node-red:     at FSWatcher.emit (events.js:315:20)
Apr  9 12:15:49 {{HOSTNAME}} node-red:     at FSEvent.FSWatcher._handle.onchange (internal/fs/watchers.js:186:12)
Apr  9 12:15:49 {{HOSTNAME}} node-red: Node-RED exited with non-zero exit status 1

What do you expect to happen?

Even if the log file is not accessible by node-red-node-tail, the error should be caught and not causing termination of node red daemon. There is no indication of deletion of the message log file, neither by a process nor manually while node-red is running.

Please tell us about your environment:
  • Node-RED version: 1.2.9
  • node.js version: 14.16.0
  • npm version: 5.6.0
  • Platform/OS: Linux 4.14.34 arm LE
  • Browser: Safari, Chrome, Firefox on macOS 11.2.3

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the reported stack trace in node-red-node-tail/node_modules/tail/lib/tail.js, especially latestPosition, change, and watchEvent. Review how the missing /var/log/messages error is handled during the size check and file-watch path. Done means an inaccessible or missing log file no longer terminates the Node-RED daemon; add or run the relevant package tests if available.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, node.js
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.