LogStash рассечь с ключом = значение, запятая - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть шаблон журналов, которые содержат производительность и статистические данные.Я настроил LogStash для разбора этих данных в формате CSV, чтобы сохранить значения в ES.

<1>,www1,3,BISTATS,SCAN,330,712.6,2035,17.3,221.4,656.3

Я использую следующий фильтр LogSTash и получаю желаемые результаты ..

grok {
  match => { "Message" => "\A<%{POSINT:priority}>,%{DATA:pan_host},%{DATA:pan_serial_number},%{DATA:pan_type},%{GREEDYDATA:message}\z" }
  overwrite => [ "Message" ]
}
csv {
  separator => ","
  columns => ["pan_scan","pf01","pf02","pf03","kk04","uy05","xd06"]
}

В настоящее время это работает хорошо для меня, пока порядок столбцов не испорчен.

Однако я хочу сделать этот файл журнала более значимым и иметь каждое имя столбца в исходном журнале.пример-- <1>,www1,30000,BISTATS,SCAN,pf01=330,pf02=712.6,pf03=2035,kk04=17.3,uy05=221.4,xd06=656.3

Таким образом, я могу продолжать вставлять или добавлять ключи / значения в середине процесса, не повреждая данные.(С использованием LogStash5.3)

1 Ответ

0 голосов
/ 26 ноября 2018

Используя рекомендации @baudsp, я смог сформулировать следующее.Я полностью удалил блок csv{} и заменил его блоком kv{}.kv{} автоматически создал все значения ключей, оставляя мне только mutate{} поля с плавающей точкой и целыми числами.

 json {
  source => "message"
  remove_field => [ "message", "headers" ]
 }
 date {
   match => [ "timestamp", "YYYY-MM-dd'T'HH:mm:ss.SSS'Z'" ]
   target => "timestamp"
 }
 grok {
   match => { "Message" => "\A<%{POSINT:priority}>,%{DATA:pan_host},%{DATA:pan_serial_number},%{DATA:pan_type},%{GREEDYDATA:message}\z" }
   overwrite => [ "Message" ]
 }
 kv {
  allow_duplicate_values => false
  field_split_pattern => ","
 }

Используя указанный выше блок, я смог вставить пары K = V в любом месте сообщения.Еще раз спасибо всем за помощь.Я добавил пример блока кода для всех, кто пытается выполнить эту задачу.

Примечание. Я использую NLog для ведения журнала, который выдает выходные данные JSON.Из кода C # формат выглядит следующим образом.

var logger = NLog.LogManager.GetCurrentClassLogger();
logger.ExtendedInfo("<1>,www1,30000,BISTATS,SCAN,pf01=330,pf02=712.6,pf03=2035,kk04=17.3,uy05=221.4,xd06=656.3");
...