2015-09-02 2 views
0

Я пытаюсь вставить журналы, поступающие из RSyslog в базу данных MongoDB.Шаблон для хранения журналов Rsyslog с MongoDB

Журналы хранятся в MongoDB должны соблюдать следующую структуру:

{ 
    "_id" : ObjectId("55b8c845a671d907a0ab9e0b"), 
    "receptionTime" : "2015-06-12 14:29:45", 
    "reportedTime" : "2015-06-12 14:29:45", 
    "priority" : "6", 
    "facility" : "23", 
    "host" : "uacm3-3a-fscr01", 
    "service" : "apacheaccess", 
    "message" : "My messsage", 
    "syslogTag" : "apache-access-fscr:" 
} 

Согласно Rsyslog документации (http://www.rsyslog.com/doc/v8-stable/configuration/templates.html#standard-template-for-writing-to-files), я разработал следующий шаблон:

template(name="BSON" type="list") { 
    constant(value="\"receptionTime\": \"") 
    property(name="timegenerated") 
    constant(value="\", \"reportedTime\": \"") 
    property(name="timereported") 
    constant(value="\", \"priority\": \"") 
    property(name="syslogseverity") 
    constant(value="\", \"facility\": \"") 
    property(name="syslogfacility") 
    constant(value="\", \"host\": \"") 
    property(name="hostname") 
    constant(value="\", \"service\": \"") 
    property(name="programname") 
    constant(value="\", \"message\": \"") 
    property(name="msg") 
    constant(value="\", \"syslogTag\": \"") 
    property(name="syslogtag") 
    constant(value="\"") 
    } 

К сожалению, журналы хранимых в MongoDB вообще не соблюдают требуемую структуру. Вот что хранится:

{ 
    "_id" : ObjectId("55e715b25ea0c0a9fbbf8b0f"), 
    "timegenerated" : "Sep 2 17:28:50", 
    "timereported" : "Sep 2 15:27:57", 
    "syslogseverity" : "5", 
    "syslogfacility" : "21", 
    "hostname" : "uacm3-3b-acd01", 
    "programname" : "Sep", 
    "msg" : "Some message", 
    "syslogtag" : "Sep" 
} 

У вас есть представление о том, что я делаю неправильно?

+0

ли формат даты единственная проблема? Потому что странно, что имена полей разные, вы их жестко закодировали. И имея дату в качестве имени программы/syslogtag - можете ли вы отправить сообщение, написанное через шаблон RSYSLOG_ForwardFormat, в файл? Для отметки времени попробуйте добавить dateFormat = "rfc3339". Вам нужно будет использовать position.from и position.to, чтобы получить нужные вам биты, например property (name = "timereported" dateFormat = "rfc3339" position.from = "1" position.to = "10") # дает дату константа (значение = "") # вставить пробел property (name = "timereported" dateFormat = "rfc3339" position.from = "12" position.to = "19") # rest –

+0

@RaduGheorghe Спасибо за ваш ответ. К сожалению, реальная проблема связана с именами свойств. Событие, если они жестко запрограммированы, полученный результат совершенно другой, как вы можете видеть. Что касается даты, я знаю об этом, это может быть исправлено благодаря функции форматирования. –

+0

Это действительно странно. Это либо странная ошибка в системе шаблонов, либо используется неправильный шаблон. Можете ли вы опубликовать весь файл rsyslog.conf? –

ответ

1

Я нашел решение, но я до сих пор не понимаю, почему первый метод не работает:

template(name="BSON" type="list") { 
    property(name="timegenerated" outname="receptionTime") 
    property(name="timereported" outname="reportedTime") 
    property(name="syslogseverity" outname="priority") 
    property(name="syslogfacility" outname="facility") 
    property(name="hostname" outname="host") 
    property(name="programname" outname="service") 
    property(name="msg" outname="message") 
    property(name="syslogtag" outname="syslogTag") 
    } 
Смежные вопросы