kibana 5脚本字段用于正则表达式匹配

时间:2017-02-08 07:56:56

标签: regex kibana elasticsearch-painless

我想在Kibana 5中添加scritpted字段以从消息中获取存储的proc名称。能够可视化每个SP的错误数量。 我有字段"消息"我在哪里可以看到错误文本:

    "[2017-02-03 05:04:51,087] @ MyApp.Common.Server.Logging.ExceptionLogger [ERROR]: XmlWebServices Exception
User:
  Name:    XXXXXXXXXXXXXXXXXXXXXXX 
  Email:   926715@test.com
  User ID: 926715 (PAID)

Web Server: PERFTESTSRV
Exception:
  Type:    MyApp.Common.Server.DatabaseException
  Message: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
  Source:  MyApp.Common.Server
   Database:  MyDB
   Cmd Type:  StoredProcedure
   Cmd Text:  spGetData
   Trans:     YES
   Trans Lvl: Unspecified"

指南:https://www.elastic.co/blog/using-painless-kibana-scripted-fields

我的计划是添加类似无痛脚本的内容:

def m = /(?:Cmd\sText:\s*)[a-zA-Z]{1,}/.matcher(doc['message'].value);
if ( m.matches() ) {
   return m.group(1)
} else {
   return "no match"
}

我也尝试过

def tst = doc['message'].value;
if (tst != null)
{
def m = /(?:User\sID:\s*)[0-9]{1,}/.matcher(tst);
if ( m.matches() ) {
   return m.group(1)
}
} else {
   return "no match"
}

我如何处理doc [' message']。value? 当我尝试这样做时,我收到错误" Courier Fetch:5个分片中的5个失败。" 当我尝试doc [' message.keyword']。value时,我内部没有完整的消息。我不明白我在哪里可以了解内部消息的结构以及如何引用它?

1 个答案:

答案 0 :(得分:1)

我认为这个问题与长度有关。输入“关键字”太长了。它应该是“文本”类型,不受无痛支持。

https://www.elastic.co/blog/using-painless-kibana-scripted-fields

  

无痛和Lucene表达式都对doc_values中存储的字段进行操作。因此,对于字符串数据,您需要将字符串存储在数据类型>关键字中。基于Painless的脚本字段也无法直接在> _source。

上运行

https://www.elastic.co/guide/en/elasticsearch/reference/master/keyword.html_italic_

  

索引结构化内容的字段,例如电子邮件地址,主机名,状态>代码,邮政编码或标签。   如果您需要索引电子邮件正文或产品>说明等全文内容,则可能应该使用文本字段。