Назад | Перейти на главную страницу

Как я могу настроить syslog-ng для отправки только недействительных журналов JSON в пункт назначения

Я настроил syslog-ng 3.25.1 для чтения сообщений журнала из файла, анализа их как JSON и пересылки их в кластер ElasticSearch.

Это хорошо работает, когда сообщения правильно отформатированы как JSON, но в случаях, когда json-parser не удается найти действительный объект JSON в моем сообщении журнала, я хотел бы обернуть сообщение журнала, отличное от JSON, в объект JSON (через format-json template) и отправьте его в другой индекс в ElasticSearch.

Я это понимаю json-parser может действовать как фильтр для передачи только действительных сообщений JSON. Есть ли способ создать фильтр, который пропускает только недействительным Сообщения JSON?

Я не уверен, что это лучший способ заставить его работать, но в итоге я использовал if / else управление потоком в моем пути регистрации, как показано ниже.

source s_json_source {
 ...
};

destination d_valid_json {
  ... // includes template definition
};

destination d_invalid_json {
  ... // includes template definition that wraps the ${MSG} in a timestamped json object
};

parser p_json {
  json-parser();
};

log {
  source(s_json_source)
  if {
    parser(p_json);
    destination(d_valid_json);
  } else {
    destination(d_invalid_json);
  };
};