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
  }
}

Надеюсь, поможет,

Другие вопросы по тегам