Logstash — как разделить массив по запятой?

#logstash #kibana #logstash-grok

#logstash #kibana #logstash-grok

Вопрос:

Мое сообщение выглядит следующим образом

 [Metric][methodName: someName][methodParams: [ClassName{field1="val1", field2="val2", field3="val3"}, ClassName{field1="val1", field2="val2", field3="val3"}, ClassName{field1="val1", field2="val2", field3="val3"}]]
  
  1. Есть ли способ разделить этот журнал на более мелкие и отфильтровать их отдельно?

  2. Если первый вариант невозможен, как я могу выполнить синтаксический анализ, чтобы получить все элементы массива?

    (?<nameOfClass>[A-Za-z] ){field1='%{DATA:textfield1}',sfield2='%{DATA:textfield2}',sfield3='%{DATA:textfield3}'}

Ответ №1:

Поскольку все, что следует после methodParams: , выглядит как JSON, вы могли бы использовать фильтр JSON для его анализа. Что-то вроде:

 filter{
  # Parse your JSON out here using GROK to a field called myjson
  grok {
    match => {
      "message" => "methodParams: %{GREEDYDATA:myjson}"
    }
  }
  #
  json{
    source => "myjson"
  }
}