Regex не смог найти наличие всех сбоев - PullRequest
0 голосов
/ 06 февраля 2020

Статус ':' Сбой: сбой разрешения DNS: Rcode Domain (3) ',' CheckedTime ': datetime.datetime (2017, 2, 1, 14, 47, 38, 382000, tzinfo = tzlocal () )}}, {'Region': 'us-east-1', 'IPAddress': '01 .000.2.12 ',' StatusReport ': {' Status ':' Success: разрешение DNS Success: Rcode Domain (3) ', 'CheckedTime': datetime.datetime (2017, 2, 1, 14, 47, 35, 371000, tzinfo = tzlocal ())}}, {'Region': 'us-west-1', 'IPAddress': '01 .000 .14.10 ',' StatusReport ': {' Status ':' Ошибка: не удалось разрешить DNS: Rcode Domain (3) ',' CheckedTime ': datetime.datetime (2017, 2, 1, 14, 47, 34, 715000, tzinfo). = tzlocal ())}}, {'Region': 'us-west-2', 'IPAddress': '01 .000.22.10 ',' StatusReport ': {' Status ':' Ошибка: не удалось разрешить DNS: домен Rcode ( 3) ',' CheckedTime ': datetime.datetime (2017, 2, 1, 14, 47, 42, 801000, tzinfo = tzlocal ())}}, {' Region ':' us-west-2 ',' IPAddress ': '01 .000.18.10', 'StatusReport': {'Status': 'Ошибка: не удалось разрешить DNS: Rcode Domain (3)', 'CheckedTime': datetime.datetime (2017, 2, 1, 14, 47, 25 18 9000, tzinfo = tzlocal ())}}, {'Region': 'us-east-1', 'IPAddress': '01 .000.1.10 ',' StatusReport ': {' Status ':' Ошибка: не удалось выполнить разрешение DNS: Домен Rcode (3) ',' CheckedTime ': datetime.datetime (2017, 2, 1, 14, 47, 42, 293000, tzinfo = tzlocal ())}}]}

Проблема :

Мне нужно найти любую ошибку в строке и связанном сообщении, и она не должна искать какого-либо успеха в сообщении.

Состояние ':' Сбой: сбой разрешения DNS: Rcode Domain (3) ',' CheckedTime ': datetime.datetime (2017, 2, 1, 14, 47, 38, 382000, tzinfo = tzlocal ())}}, {'Region': 'us-east-1', 'IPAddress': '01 .000.2.12 ',' Status ':' Ошибка: не удалось разрешить DNS: Rcode Domain (3) ',' CheckedTime ': datetime.datetime (2017) , 2, 1, 14, 47, 34, 715000, tzinfo = tzlocal ())}}, {'Region': 'us-west-2', 'IPAddress': '01 .000.22.10 'et c.

Что я пробовал:

Status':.+Failure.*(?=Success)

и

'Status':.+

но это не дает мне что я хочу.

Пожалуйста, помогите !!

1 Ответ

1 голос
/ 11 февраля 2020

Одной из основных проблем является то, что данные тоже похожи, но не совсем JSON. Splunk будет обрабатывать JSON очень хорошо, либо во время индексации, либо с помощью такой команды, как spath.

. Учитывая, что ваши примеры данных не JSON, нам нужно вернуться к регулярным выражениям .

Это довольно простое c регулярное выражение, которое извлекает все от начального { до двойного }}, которое соответствует вашим данным. (?m) и max_match=0 говорят Splunk совпадать столько раз, сколько возможно.

| rex max_match=0 field=raw "(?m)(?<r>{.*}})"

Теперь, когда Splunk сопоставил каждую запись в событии, мы можем разделить их на отдельные события и удалить полное событие .

| mvexpand r | fields - raw

Затем выполните рекс над каждой записью, извлекая только status_msg

| rex field=r "'Status': '(?<status_msg>[^']+)'"

Наконец, отбросьте события / строки, в которых status_msg содержит Success* 1021. *

| where NOT status_msg LIKE "%Success%"

Вот пример регулярных выражений, работающих над вашими данными.

| makeresults | eval raw="{[{'Region': 'us-east-1', 'IPAddress': '01.000.2.12', 'StatusReport': {'Status': 'Success: DNS resolution Success: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 35, 371000, tzinfo=tzlocal())}},
  {'Region': 'us-west-1', 'IPAddress': '01.000.14.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 34, 715000, tzinfo=tzlocal())}},
  {'Region': 'us-west-2', 'IPAddress': '01.000.22.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 42, 801000, tzinfo=tzlocal())}}, 
  {'Region': 'us-west-2', 'IPAddress': '01.000.18.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 25, 189000, tzinfo=tzlocal())}},
  {'Region': 'us-east-1', 'IPAddress': '01.000.1.10', 'StatusReport': {'Status': 'Failure: DNS resolution failed: Rcode Domain(3)', 'CheckedTime': datetime.datetime(2017, 2, 1, 14, 47, 42, 293000, tzinfo=tzlocal())}}]}"
| rex max_match=9999 field=raw "(?m)(?<r>{.*}})"
| mvexpand r | fields - raw
| rex field=r "'Status': '(?<status_msg>[^']+)'"
| where NOT status_msg LIKE "%Success%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...