Grok Parse Failure в пользовательском формате журнала и регулярное выражение в logstash
У меня есть собственный формат журнала, я новичок в этом, поэтому пытаюсь выяснить, как он работает. Это не анализируется в logstash . Может кто-то помочь определить проблему.
Логформат выглядит следующим образом
{u'key_id': u'1sdfasdfvaa/sd456dfdffas/zasder==', u'type': u'AUDIO'}, {u'key_id': u'iu-dsfaz+ka/q1sdfQ==', u'type': u'HD'}], u'model': u'Level1', u'license_metadata': {u'license_type': u'STREAMING THE SET', u'request_type': u'NEW', u'content_id': u'AAAA='}, u'message_type': u'LICENSE', u'cert_serial_number': u'AAAASSSSEERRTTYUUIIOOOasa='}
Мне нужно разобрать его в logstash и затем сохранить его в asticsearch
Проблема в том, что ни один из существующих шаблонов grok не позаботился об этом, и я не знаю о пользовательской конфигурации regex
2 ответа
Комментарий Алена может быть полезен для вас, если этот журнал на самом деле идет как JSON, вы можете захотеть взглянуть на JSON-фильтр, чтобы автоматически проанализировать сообщение JSON в эластичный дружественный формат или использовать кодек JSON во входных данных.
Если вы хотите придерживаться Grok, отличный ресурс для создания пользовательских шаблонов Grok - Grok Constructor.
Похоже, вы выгружаете хэш json из python 2.x в файл журнала, а затем пытаетесь проанализировать его из logstash.
Во-первых, исправьте формат и кодировку json: ваш файл не исправляет сгенерированные строки json. Я рекомендую исправить это в вашем приложении, прежде чем пытаться использовать данные из Logstash, в противном случае вам придется использовать некоторые приемы, чтобы сделать это оттуда:
# Disable accii default charset and encode to UTF-8
js_string = json.dumps(u"someCharactersHere", ensure_ascii=False).encode('utf8')
# validate that your new string is correct
print js_string
Второе - используйте фильтр Logstash JSON
Grok - это модуль, предназначенный для анализа любого типа текста с использованием регулярных выражений. Каждое выражение преобразуется в переменную, и эти переменные могут быть преобразованы в поля событий. Вы можете сделать это, но это будет намного сложнее и обречено на ошибки.
Ваш вход уже имеет формат (json), поэтому вы можете использовать Logstash JSON Filter. Он сделает всю тяжелую работу за вас, преобразовав структуру json в поля:
filter {
json {
# this is your default input. you shouldn't need to touch it
source => "message"
# you can map the result into a variable. Simply uncomment the
# following:
# target => "doc"
# note: if you don't use the target option. the filter will try to
# map the json string into fields into the 'root' of your event
}
}
Надеюсь, поможет,