1.2.0 • Published 5 months ago

node-red-contrib-logger-vh v1.2.0

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

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.

logger

Testen

De unittesten maken gebruik van het Mocha framework.

Om de testen te laten lopen, moet je volgend commando uitvoeren:

$ npm run test