Я пытаюсь вставить журналы, поступающие из 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"
}
У вас есть представление о том, что я делаю неправильно?
ли формат даты единственная проблема? Потому что странно, что имена полей разные, вы их жестко закодировали. И имея дату в качестве имени программы/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 –
@RaduGheorghe Спасибо за ваш ответ. К сожалению, реальная проблема связана с именами свойств. Событие, если они жестко запрограммированы, полученный результат совершенно другой, как вы можете видеть. Что касается даты, я знаю об этом, это может быть исправлено благодаря функции форматирования. –
Это действительно странно. Это либо странная ошибка в системе шаблонов, либо используется неправильный шаблон. Можете ли вы опубликовать весь файл rsyslog.conf? –