Node-RED:Руководство пользователя/Логирование
Логирование[1]
По умолчанию Node-RED использует для логирования инструмент («логгер»), отправляющий сообщения-логи в терминал. Он также поддерживает для логирования модули с пользовательскими настройками, в которых можно задать отправку сообщений куда угодно.
Логирование в терминал
Запись логов в терминал можно задать в свойстве «logging» в файле «settings.js».
// Настройка вывода логов:
logging: {
// Вывод логов в терминал:
console: {
level: "info",
metrics: false,
audit: false
}
}
Поведение логгера задается с помощью 3 свойств:
Свойство «level»
Здесь задается уровень логирования. Возможны следующие варианты:
- «fatal» – только сообщения об ошибках, делающих приложение непригодным к использованию
- «error» – сообщения об ошибках, считающихся фатальными при выполнении некоторых запросов
- «warn» – сообщения о не фатальных ошибках
- «info» – общая информация о работе приложения
- «debug» – более подробная информация, чем в «info»
- «trace» – очень подробная информация о работе приложения
- «off» – отключения логирования
Кроме того, на всех уровнях (кроме «off») дополнительно осуществляется отправка сообщений более высокого уровня. К примеру, при использовании уровня «warn» также будут отправляться сообщения уровней «error» и «fatal».
Свойство «metrics»
Если задать здесь «true», среда выполнения Node-RED начнет сообщать информацию о ходе выполнения потока и использовании памяти.
В логи будут записываться входящие и исходящие события каждой ноды. К примеру, сообщения ниже – это логи от потока, имеющего ноды «Inject» и «Debug».
9 Mar 13:57:53 - [metric] {"level":99,"nodeid":"8bd04b10.813f58","event":"node.inject.receive","msgid":"86c8212c.4ef45","timestamp":1489067873391}
9 Mar 13:57:53 - [metric] {"level":99,"nodeid":"8bd04b10.813f58","event":"node.inject.send","msgid":"86c8212c.4ef45","timestamp":1489067873392}
9 Mar 13:57:53 - [metric] {"level":99,"nodeid":"4146d01.5707f3","event":"node.debug.receive","msgid":"86c8212c.4ef45","timestamp":1489067873393}
Сообщения об использовании памяти пишутся в логи каждые 15 секунд.
9 Mar 13:56:24 - [metric] {"level":99,"event":"runtime.memory.rss","value":97517568,"timestamp":1489067784815}
9 Mar 13:56:24 - [metric] {"level":99,"event":"runtime.memory.heapTotal","value":81846272,"timestamp":1489067784817}
9 Mar 13:56:24 - [metric] {"level":99,"event":"runtime.memory.heapUsed","value":59267432,"timestamp":1489067784817}
Свойство «audit»
Если задать здесь «true», в логи начнут писаться сообщения о событиях, связанных с HTTP-доступом к админскому API. В этих сообщениях также будет информация о конечных точках, доступ к которым был получен, IP-адрес и метка времени.
Если у вас включена настройка «adminAuth», в этих сообщениях также будет информация о пользователе, запросившем доступ.
9 Mar 13:49:42 - [audit] {"event":"library.get.all","type":"flow","level":98,"path":"/library/flows","ip":"127.0.0.1","timestamp":1489067382686}
9 Mar 14:34:22 - [audit] {"event":"flows.set","type":"full","version":"v2","level":98,"user":{"username":"admin","permissions":"write"},"path":"/flows","ip":"127.0.0.1","timestamp":1489070062519}
Использование модуля с собственными настройками
Для логирования также можно использовать модуль с собственными настройками. К примеру, сообщения, отправка которых активируется в свойстве «metrics», можно перенаправить на другую систему, чтобы отслеживать на ней производительность проекта.
Чтобы воспользоваться собственным логгером, нужно будет отредактировать файл «settings.js», добавив в свойство «logging» новый блок:
// Настройка вывода логов:
logging: {
// Вывод логов в терминал:
console: {
level: "info",
metrics: false,
audit: false
},
// Мой логгер:
myCustomLogger: {
level: 'debug',
metrics: true,
handler: function(settings) {
return function(msg) {
console.log(msg.timestamp, msg.event);
}
}
}
}
Как видите, к логгеру по умолчанию, отправляющему логи в терминал (он имеет описанные выше свойства «level», «metrics» и «audit»), добавлен новый логгер с настройками пользователя. В нем есть свойство «handler», задающее обработчика логов с настройками пользователя. Это функция, которая вызывается один раз при запуске Node-RED и получающая данные о настройках логгера. Она должна вернуть функцию, записывающую сообщения в логи.
Если нужно, вы можете настроить несколько логгеров со своими настройками, но ни один из них не должен называться «console», т.к. это название уже зарезервировано.
Пример логгера
Пример ниже задает в настройках логгер, отправляющий metrics-события экземпляру Logstash через TCP-соединение.
Это очень примитивный пример – в нем нет ни обработки ошибок, ни кода для переподключения.
logging: {
console: {
level: "info",
metrics: false,
audit: false
},
logstash: {
level:'off',
metrics:true,
handler: function(conf) {
var net = require('net');
var logHost = '192.168.99.100',logPort = 9563;
var conn = new net.Socket();
conn.connect(logPort,logHost)
.on('connect',function() {
console.log("Logger connected")
// "Логгер подключился"
})
.on('error', function(err) {
// В целях проверки попробуйте подключиться
// к этой точке доступа не через Node-RED.
// Завершаем работу этой функции...
process.exit(1);
});
// Возвращаем функцию, выполняющую логирование:
return function(msg) {
var message = {
'@tags': ['node-red', 'test'],
'@fields': msg,
'@timestamp': (new Date(msg.timestamp)).toISOString()
}
try {
conn.write(JSON.stringify(message)+"\n");
}catch(err) { console.log(err);}
}
}
}
}
См.также
Внешние ссылки