В Winston 3.x отсутствует поддержка logstash? - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь интегрировать фиктивное приложение nodejs в стек ELK. Я использую Winston в качестве библиотеки журналов, так как это мой предпочтительный выбор при разработке на стеке JS. Я пытался написать этот кусочек кода, используя Winston 3.x версии

var winston = require('winston');
require('winston-logstash');


var logger =  winston.createLogger({
    level: 'info',
    transports: [
        new winston.transports.Console(),
        new winston.transports.Logstash({
            port: 5000,
            node_name: 'my node name',
            host: '127.0.0.1'
        })
    ]
});

logger.info('ciao mondo')

Результат был

> node index.js

logstash is a legacy winston transport. Consider upgrading: 
- Upgrade docs: https://github.com/winstonjs/winston/blob/master/UPGRADE-3.0.md

Итак, я прочитал официальные инструкции, в которых говорится, что поддержка logstash теперь имеет формат

var winston = require('winston');
require('winston-logstash');


var logger =  winston.createLogger({
    level: 'info',
    format : winston.format.logstash(),
    transports: [
         new winston.transports.Console()/*,
         new winston.transports.Logstash({
           port: 5000,
           node_name: 'my node name',
           host: '127.0.0.1'
         })*/
      ]
  });

  logger.info('ciao mondo')

Теперь вывод

> node index.js

{"@message":"ciao mondo","@fields":{"level":"info"}}

Это нормально, но, поскольку я не рассказал, как подключиться к сокету logstash, централизованная система ведения журнала не получила это событие.

Я попытался понизить winston до 2.4.1, и он работает нормально, за исключением того факта, что я теряю некоторые хорошие функции, представленные в более поздних версиях. Я не нашел никакой документации, которая сообщала бы о поддержке logstash в версии 3.x. Я что-то упустил или мне нужно написать что-то нестандартное?

1 Ответ

1 голос
/ 07 июля 2019

Здесь есть две концепции, в Winston 3.

A format просто выполняет некоторые преобразования объекта, который вы регистрируете.

A transport - это "канал", который определяет способ взять ваш объект журнала и отправить его куда-нибудь.

В мире Уинстон-2 эти два понятия часто объединялись; например, модуль winston-logstash был транспортным, но также неявно отформатированным объектами способом, приемлемым для Logstash. В Winston 2 или 3 нет ничего, что ограничивало бы возможности с точки зрения транспорта или форматов, поэтому Winston 3 не является «отсутствующей поддержкой» для Logstash.

Однако Winston 3 внес некоторые изменения в транспортный API (а также, как уже упоминалось, в отдельные форматы - хотя транспорт может по-прежнему выполнять форматирование). Вот почему вы видите предупреждения о том, что winston-logstash является устаревшим транспортом: авторы winston-logstash не обновили свой модуль для использования новых интерфейсов в стиле Winston 3. В проекте Winston есть thread с некоторой полезной информацией для авторов транспорта по обновлению их транспортов.

Таким образом, вы можете написать авторам сообщение об ошибке, чтобы обновить их транспорт, обновить / обернуть его самостоятельно (см. Связанный поток) или - я думаю, что предупреждение legacy - это просто предупреждение, поэтому оно все равно должно работать с Winston 3.

На самом деле, я думаю, что уже открыт PR , чтобы сделать winston-logstash 3.x совместимым, хотя сопровождающий репозитария, кажется, призрачный; Я полагаю, вы могли бы попробовать использовать PR-ветку / форк. Вы также можете попробовать winston-logstash-transport , который, кажется, достигает тех же целей, но, похоже, предназначен для 3.x. Не стесняйтесь комментировать, что работает лучше всего.

...