Добрый день.
Есть лог вида MethodName, Level, Process, A=Value1,B=Value2,C=Иванов Иван Иванович,D=Value3,E=Value4.
Поля(подстроки лога) A=Value1,B=Value2,C=Иванов Иван Иванович,D=Value3,E=Value4 являются необязательными и кажое поле может как присутствовать в логе, так и отсутствовать в нем.
Для разбора использую grok:
т.е. именно для поля со значением ",Иванов Иван Иванович" использую ?(?:,C=%{DATA:log_C})
Проблема в том, что в grok debugger указанное поле принимает значение пустой строки, а все последующие за ним поля значение null (хотя все поля(подстроки) ДО разбираются без ошибок):
Игорь, вроде kv - то, что нужно, но по дефолту разбор строки лога выполняется некорректно - поля разбиваются по пробелу в строке "Иванов Иван Иванович", игнорируются запятые.
Делаю следующую настройку:
kv
{
field_split => ","
}
Получаю ошибку logstash при обработке лога:
Could not index event to Elasticsearch..."Limit of total fields [1000] has been exceeded"
Даже если в принципе вернуть все настройки по дефолту и дать лог среднего размера (в моем случае примерно 15Mb), то logstash выводит ту же ошибку о превышении лимита на 1000 полей.
Есть ли вариант, как обработать приведенное содержимое с помощью grok ?
Это ошибка означает, что в совокупности, по всем записям количество разных названий полей превысило 1000. То есть если одно поле содержит guid в названии, то вы получите эту ошибку через меньше чем 1000 записей.
Я бы посоветовал создать отдельную конфигурацию для отладки, заменить там elasticsearch на stdout и посмотреть, а какие, собственно записи ваши фильтры формируют.
Я думаю, что полей действительно очень много, guid не участвует в формировании имени поля.
Сейчас реализована следующая цепочка: Filebeat -> Logstash -> ElasticSearch.
В таком случае, есть ли возможность отправлять из Filebeat в Logstash только строки лога, содержащие определенные значения методов: MethodA, MethodB MethodC...MethodX?
Т.е. анализировать в Logstash строки, относящиеся только к интересующим меня методам; остальное в принципе и не нужно.
Игорь, подскажите пожалуйста, каким образом в Logstash можно отсечь ненужные нам строки и не отправлять их в ElasticSearch и при этом не получить указанную выше ошибку.
Т.е., если в message нет любого из MethodA,...MethodX, то эту строку:
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.