Кибана, использующая регулярное выражение, не работает должным образом

Я новичок в использовании поиска Kibana и Elastic, но он у меня работает, и я могу без проблем выполнять поиск по строкам и т. д.

Но я хочу искать в этом регулярном выражении

threshold of 1000 ms: ([5-9],\d+|[1-9][0-9],\d+|[1-9][0-9][0-9],\d+)

Что работает, как было протестировано с использованием https://regex101.com/ и с помощью Notepad++. Но я не могу заставить его работать в Кибане, как бы я ни пытался.

Я попытался изменить индексированное поле на ключевое слово вместо текста, но все равно не работает.

Даже простое регулярное выражение, например

message:/192.168.99.[0-9]{3}/

Не работает, как вы ожидаете.

Может кто-нибудь предложить способ заставить это работать, пожалуйста? Это сводит меня с ума.

Я должен упомянуть, что использую Filebeat 6.4.2, Elasticsearch 6.4.2 и Kibana 6.4.2.

Спасибо

КАРТА

"mappings": {
  "doc": {
    "date_detection": false,
    "properties": {
      "@timestamp": {
        "type": "date"
      },
      "@version": {
        "type": "long"
      },
      "CorrelationId": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "InteractionNumber": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "RequestorId": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "alertType": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "app": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "beat": {
        "properties": {
          "hostname": {
            "type": "keyword",
            "ignore_above": 1024
          },
          "name": {
            "type": "keyword",
            "ignore_above": 1024
          },
          "version": {
            "type": "keyword",
            "ignore_above": 1024
          }
        }
      },
      "host": {
        "properties": {
          "name": {
            "type": "keyword",
            "ignore_above": 1024
          }
        }
      },
      "input": {
        "properties": {
          "type": {
            "type": "keyword",
            "ignore_above": 1024
          }
        }
      },
      "level": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "logger_name": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "message": {
        "type": "keyword"
      },
      "nodeId": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "offset": {
        "type": "long"
      },
      "pegathread": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "prospector": {
        "properties": {
          "type": {
            "type": "keyword",
            "ignore_above": 1024
          }
        }
      },
      "source": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "source_host": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "src-env": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "src-node": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "src-vm": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "stack": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "tenantid": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "thread_name": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "userid": {
        "type": "keyword",
        "ignore_above": 1024
      },
      "x-requested-with": {
        "type": "keyword",
        "ignore_above": 1024
      }
    }
  }
}

Пример содержимого поля сообщения

2018-10-20 23:10:21,068 GMT*8*PEGA0001*8087*1000*8ce767fc2b32*NA*NA*HKVZWM7PHSLMGR3ZXP4OEKEBG3DFFS30K*Test.User*Case-CAS-FS-Work-Svc*Solution:01.03.01*00cb8b6febb234d359369e54a60a865f*Y*3*HKVZWM7PHSLMGR3ZXP4OEKEBG3DFFS30K*35*http-apr-8080-exec-26*STANDARD*com.pega.pegarules.session.internal.engineinterface.service.HttpAPI*192.168.99.100|192.168.99.1*Activity=Pega-UI-CommandPalette.pzGetPaletteOptions*Rule-Obj-Activity:pzGetPaletteOptions*PEGA-UI-COMMANDPALETTE PZGETPALETTEOPTIONS #20161123T194957.445 GMT Step: 2 Circum: 0*NA*****pxRDBIOElapsed=0.03;pxRDBIOCount=4;pxRunStreamCount=811;pxTotalReqCPU=2.81;pxRunModelCount=270;pxOutputBytes=584,268;pxRunWhenCount=1,904;pxDeclarativePageLoadElapsed=6.84;pxRulesExecuted=3,471;pxOtherCount=314;pxDBInputBytes=3,553,909;pxTotalReqTime=8.09;pxActivityCount=967;pxAlertCount=1;pxOtherFromCacheCount=66;pxInteractions=1;pxLegacyRuleAPIUsedCount=1;pxRuleCount=254;pxInputBytes=101;pxRuleIOElapsed=0.09;pxRulesUsed=4,262;pxDeclarativePageLoadCount=6;pxRuleFromCacheCount=254;pxOtherIOElapsed=0.99;pxTrackedPropertyChangesCount=106;pxOtherIOCount=255;*NA*NA*NA*NA*NA*pyActivity=Pega-UI-CommandPalette.pzGetPaletteOptions;primaryPageClass=Data-Portal-DesignerStudio;*HTTP interaction has exceeded the elapsed time alert threshold of 1000 ms: 8088 ms.*

Добавлен тип сообщения в виде строки, и это результаты _analyze: -

{
  "token": "threshold",
  "start_offset": 1276,
  "end_offset": 1285,
  "type": "<ALPHANUM>",
  "position": 128
},
{
  "token": "of",
  "start_offset": 1286,
  "end_offset": 1288,
  "type": "<ALPHANUM>",
  "position": 129
},
{
  "token": "1000",
  "start_offset": 1289,
  "end_offset": 1293,
  "type": "<NUM>",
  "position": 130
},
{
  "token": "ms",
  "start_offset": 1294,
  "end_offset": 1296,
  "type": "<ALPHANUM>",
  "position": 131
},
{
  "token": "8088",
  "start_offset": 1298,
  "end_offset": 1302,
  "type": "<NUM>",
  "position": 132
},
{
  "token": "ms",
  "start_offset": 1303,
  "end_offset": 1305,
  "type": "<ALPHANUM>",
  "position": 133
}

person Craig    schedule 20.10.2018    source источник
comment
Как выглядит отображение для вашего индекса? Вы анализируете поля или не анализируете? См. timroes.de/2016/05/ 29/   -  person ben5556    schedule 20.10.2018
comment
Я не уверен, как проверить, проанализированы они или нет.   -  person Craig    schedule 21.10.2018
comment
Проверьте сопоставление индекса   -  person ben5556    schedule 21.10.2018
comment
Отображение изменено, но ничего не меняется.   -  person Craig    schedule 21.10.2018
comment
Пожалуйста, опубликуйте сопоставление индекса   -  person ben5556    schedule 21.10.2018
comment
Отображение индекса находится в моем посте. Это было экспортировано из файла, а затем изменено в соответствии с требованиями.   -  person Craig    schedule 21.10.2018
comment
ХОРОШО. Ваше сопоставление показывает поле сообщения как ключевое слово, поэтому оно не анализируется. Ваше простое регулярное выражение выше будет работать, если поле сообщения содержит только IP-адрес, соответствующий шаблону регулярного выражения. Что содержит ваше поле сообщения? Только IP-адрес или строка, содержащая IP-адрес?   -  person ben5556    schedule 22.10.2018
comment
Пока игнорируйте IP-адрес, это был пример. Мое поле сообщения содержит все виды вещей, но пример, который я смотрю, я обновил свой пост.   -  person Craig    schedule 22.10.2018
comment
Хорошо, ваше сопоставление говорит, что тип поля «сообщение» является ключевым словом, т. Е. Elasticsearch не анализирует его, и все содержимое поля помещается в инвертированный индекс как есть. В идеале тип сопоставления поля сообщения должен быть текстовым, чтобы Elasticsearch анализировал его с помощью стандартного анализатора (если вы не укажете явный пользовательский анализатор) и помещает токены в инвертированный индекс и доступен для поиска с использованием шаблонов регулярных выражений. К сожалению, вы не можете изменить тип отображения существующего поля в индексе. Вы должны создать новый индекс с правильным сопоставлением и переиндексировать свои данные.   -  person ben5556    schedule 22.10.2018
comment
Первоначально у меня было поле как текст, и оно не работает. Я столько раз воссоздавал этот индекс с разными вариациями, что ничего не работает так, как я ожидал. Итак, из документации: - Запрос регулярного выражения позволяет вам использовать запросы терминов регулярных выражений. Подробную информацию о поддерживаемом языке регулярных выражений см. в разделе Синтаксис регулярных выражений. Термин запросы в этом первом предложении означает, что Elasticsearch будет применять регулярное выражение к терминам, созданным токенизатором для этого поля, а не к исходному тексту поля.   -  person Craig    schedule 23.10.2018
comment
Означает ли это, что регулярное выражение применяется только к отдельным токенам, а не к комбинации токенов? Я обновил свой пост после изменения типа сообщения обратно на текст и добавил результаты _analyze.   -  person Craig    schedule 23.10.2018
comment
Таким образом, проблема с сообщением в виде строки заключается в том, что выделяются только слова, поэтому я не могу искать шаблоны, отличные от слов, такие как запятые. Я нашел это [stackoverflow.com/questions/50717706/ и думал, что это решит мою проблему, но, увы, это просто не работает. Я не могу быть единственным с этим требованием.   -  person Craig    schedule 23.10.2018
comment
Привет, сделал тест. Добавлю свои наблюдения в нижеследующий ответ по мере его тщательности.   -  person ben5556    schedule 23.10.2018


Ответы (1)


Проверено на версии 6.2.4

Добавлен приведенный ниже индекс с сопоставлением, как показано ниже.

    PUT test
{
  "mappings": {
    "_doc": {
      "properties": {
        "message": {
          "type": "text"
        },
        "message2": {
          "type": "keyword"
        }
      }
    }
  }
}

Добавлено 2 документа в индекс, как показано ниже

PUT test/_doc/1?refresh
{
  "message": "hellothere",
  "message2":"2018-10-20 23:10:21,068 GMT*8*PEGA0001*8087*1000*8ce767fc2b32*NA*NA*HKVZWM7PHSLMGR3ZXP4OEKEBG3DFFS30K*Test.User*Case-CAS-FS-Work-Svc*Solution:01.03.01*00cb8b6febb234d359369e54a60a865f*Y*3*HKVZWM7PHSLMGR3ZXP4OEKEBG3DFFS30K*35*http-apr-8080-exec-26*STANDARD*com.pega.pegarules.session.internal.engineinterface.service.HttpAPI*192.168.99.100|192.168.99.1*Activity=Pega-UI-CommandPalette.pzGetPaletteOptions*Rule-Obj-Activity:pzGetPaletteOptions*PEGA-UI-COMMANDPALETTE PZGETPALETTEOPTIONS #20161123T194957.445 GMT Step: 2 Circum: 0*NA*****pxRDBIOElapsed=0.03;pxRDBIOCount=4;pxRunStreamCount=811;pxTotalReqCPU=2.81;pxRunModelCount=270;pxOutputBytes=584,268;pxRunWhenCount=1,904;pxDeclarativePageLoadElapsed=6.84;pxRulesExecuted=3,471;pxOtherCount=314;pxDBInputBytes=3,553,909;pxTotalReqTime=8.09;pxActivityCount=967;pxAlertCount=1;pxOtherFromCacheCount=66;pxInteractions=1;pxLegacyRuleAPIUsedCount=1;pxRuleCount=254;pxInputBytes=101;pxRuleIOElapsed=0.09;pxRulesUsed=4,262;pxDeclarativePageLoadCount=6;pxRuleFromCacheCount=254;pxOtherIOElapsed=0.99;pxTrackedPropertyChangesCount=106;pxOtherIOCount=255;*NA*NA*NA*NA*NA*pyActivity=Pega-UI-CommandPalette.pzGetPaletteOptions;primaryPageClass=Data-Portal-DesignerStudio;*HTTP interaction has exceeded the elapsed time alert threshold of 1000 ms: 8088 ms.*" 
} 


PUT test/_doc/2?refresh
{
  "message": "2018-10-20 23:10:21,068 GMT*8*PEGA0001*8087*1000*8ce767fc2b32*NA*NA*HKVZWM7PHSLMGR3ZXP4OEKEBG3DFFS30K*Test.User*Case-CAS-FS-Work-Svc*Solution:01.03.01*00cb8b6febb234d359369e54a60a865f*Y*3*HKVZWM7PHSLMGR3ZXP4OEKEBG3DFFS30K*35*http-apr-8080-exec-26*STANDARD*com.pega.pegarules.session.internal.engineinterface.service.HttpAPI*192.168.99.100|192.168.99.1*Activity=Pega-UI-CommandPalette.pzGetPaletteOptions*Rule-Obj-Activity:pzGetPaletteOptions*PEGA-UI-COMMANDPALETTE PZGETPALETTEOPTIONS #20161123T194957.445 GMT Step: 2 Circum: 0*NA*****pxRDBIOElapsed=0.03;pxRDBIOCount=4;pxRunStreamCount=811;pxTotalReqCPU=2.81;pxRunModelCount=270;pxOutputBytes=584,268;pxRunWhenCount=1,904;pxDeclarativePageLoadElapsed=6.84;pxRulesExecuted=3,471;pxOtherCount=314;pxDBInputBytes=3,553,909;pxTotalReqTime=8.09;pxActivityCount=967;pxAlertCount=1;pxOtherFromCacheCount=66;pxInteractions=1;pxLegacyRuleAPIUsedCount=1;pxRuleCount=254;pxInputBytes=101;pxRuleIOElapsed=0.09;pxRulesUsed=4,262;pxDeclarativePageLoadCount=6;pxRuleFromCacheCount=254;pxOtherIOElapsed=0.99;pxTrackedPropertyChangesCount=106;pxOtherIOCount=255;*NA*NA*NA*NA*NA*pyActivity=Pega-UI-CommandPalette.pzGetPaletteOptions;primaryPageClass=Data-Portal-DesignerStudio;*HTTP interaction has exceeded the elapsed time alert threshold of 1000 ms: 8088 ms.*",
  "message2":"hellothere" 
}

Искать message2: /192.168.99.[0-9]{3}/ результатов 0 результатов

Поиск message: /192.168.99.[0-9]{3}/ результатов в документе № 2

Поиск message2: /.*192.168.99.[0-9]{3}.*/ результатов в документе №1

Поиск message: /pegarules.session/ дает 0 результатов.

Но поиск message: /.*pegarules.session.*/ приводит к документу № 1, потому что инвертированный индекс имеет "token": "com.pega.pegarules.session.internal.engineinterface.service.httpapi"

Поиск message2: /.*pegarules.session.*/ результатов в документе №1`

Таким образом, отправленное сообщение (тип text) токенизировано, и поиск регулярных выражений по шаблонам токенов с подстановочными знаками возвращает результаты.

При этом поле message2 (тип keyword) не анализируется и помещается в инвертированный индекс как есть. Поиск регулярного выражения для шаблона, такого как 192.168.99.[0-9]{3}, ничего не возвращает, если мы не добавим жадный квантификатор (.*)

Механизм регулярных выражений Lucene не совместим с Perl, но поддерживает меньший набор операторов, поэтому он может не работать и не сопоставлять результаты, как обычное регулярное выражение.

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html#regexp-syntax

person ben5556    schedule 23.10.2018
comment
Спасибо за это, но это не сработало для меня, когда я пробовал. Поиск сообщения 2: /192.168.99.[0-9]{3}/ дает 0 результатов --correct Поиск сообщения: /192.168.99.[0-9]{3}/ приводит к документу № 2 -- правильно, но не выделяет запрошенное, просто выделяет 0 и 3! Поиск сообщения 2: /.*192.168.99.[0-9]{3}.* / приводит к документу № 1 --incorrect ничего не возвращает Поиск сообщения: /pegarules.session/ дает 0 результатов. --правильно - person Craig; 23.10.2018
comment
Но поиск сообщения: /.*pegarules.session.*/ приводит к документу № 1, поскольку инвертированный индекс имеет токен: com.pega.pegarules.session.internal.engineinterface.service.httpapi --incorrect ничего не возвращает Поиск message2: /.*pegarules.session.*/ приводит к doc#1` --incorrect ничего не возвращает - person Craig; 23.10.2018
comment
Я не уверен, отличается ли поведение из-за разных версий ES, но позже проверю и сообщу. - person ben5556; 23.10.2018