node-red-contrib-logger-vh
Een module voor Node-RED waarmee je naar de volgende outputs kan loggen:
- ELK-stack (ElasticSearch & Logstash) via HTTP
- Bestanden
- System Console
- Debug window
Hiervoor werden de winston
en winston-logging
libraries gebruikt.
Dit project is gebaseerd op node-red-contrib-advanced-logger en node-red-contrib-log-elk.
Installatie
Voer het volgende commando uit in je node-red directory:
npm i node-red-contrib-logger-vh
Dit commando kan ook ingebakken worden in een Dockerfile, naast eventuele andere installaties van NPM packages.
Features
Vier logging levels worden ondersteund: 'Debug', 'Info', 'Warning' en 'Error'. Daarnaast kan je kiezen of je een specifieke property van het msg
object wilt loggen of het gehele binnenkomende object. Ten slotte heb je ook twee optionele velden:
- Group (zelf in te vullen): Hierin kan je bv. de naam van de huidige flow in meegeven.
- Action (zelf in te vullen): Hierin kan je bv. de naam van de node in meegeven.
ELK Stack
- Willekeurige index definiëren
- Instellen data-stream
- Loggen via logstash
De configuratie node kan ook environment variabelen inlezen via ${ENV_VARIABELE}
indien je deze definieert in Node-RED of in je docker container.
Daarnaast wordt ook meta data naar elastic meegestuurd. Deze worden standaard opgevuld via env-variabelen
, maar kunnen ook overschreven worden indien aanwezig in het msg object. Zie volgende tabel (opmerking: variabelen in upper-case zijn environment variabelen):
Property | Variabele (in volgerde van overschrijven) | Default |
---|---|---|
user |
msg.user ¹, ELASTIC_USERNAME
|
"node-red" |
server |
msg.server ¹, INSTANCE_NAME , SERVER
|
Hostname server |
application |
msg.application ¹, CONTAINER_NAME , APPLICATION
|
"Node-red instance" |
¹ Deze parameter zal enkel gebruikt worden indien het volledige msg object wordt gelogd. Indien je een gedeelte van het msg object logt, zal dit niet overschreven worden. Wél geldt dit indien in het gedeelte ook de user property zit. Bv.:
msg = {
"payloadToLog" = {
"key1" = "value1",
"user" = "node-red user"
}
}
-> In elastic zal het veld "user" opgevuld zijn met node-red user
indien je msg.payloadToLog
selecteert om te loggen.
msg = {
"payloadToLog" = {
"key1" = "value1",
},
"user" = "node-red user"
}
-> In elastic zal het veld "user" door de default waarde opgevuld worden indien je msg.payloadToLog
selecteert om te loggen. Indien je het gehele object logt, zal het veld "user" wel opgevuld zijn met node-red user
Loggen naar Logstash
Indien de parameter 'Logstash' is aangevinkt, kan je hiermee loggen naar logstash. Een voorbeeld van een werkende logstash.conf
configuratie kan zijn:
input {
http {
port => 5000
codec => "json"
}
}
filter {
if ![url][path] or [url][path] == "/" {
mutate {
add_field => { "index" => "logs" }
}
} else {
grok {
match => { "[url][path]" => "/(?<index>.*)" }
}
}
}
output {
elasticsearch {
hosts => ["${ELASTIC_HOSTS}"]
user => "${ELASTIC_USER}"
password => "${ELASTIC_PASSWORD}"
index => "%{index}"
action => "create"
}
}
Hierbij wordt de het path van de url genomen als naam van de index. Bv:
POST http://logstash:5000/index
Zal loggen naar elastic naar index index
. Indien de index niet gedefinieerd is, zal logstash deze defaulteren op logs
.
Bestanden
- Keuze bestandsnaam
- Instellen maximale grootte
- Instellen maximum aantal log bestanden
Voorbeelden
Zie directory examples
.
Testen
De unittesten maken gebruik van het Mocha framework.
Om de testen te laten lopen, moet je volgend commando uitvoeren:
$ npm run test