【问题标题】:ElasticSearch: query for parts of a dot separated wordElasticSearch:查询点分隔词的部分
【发布时间】:2018-01-24 21:18:19
【问题描述】:

我有一个 AWS ElasticSearch(v 5.5)/Kibana(v 5.5.2) 实例从我的 java 服务中提取我的日志数据。在我的日志中,我有带有完全限定异常名称的堆栈跟踪(例如com.example.MyException)。

我的问题是,当我尝试通过 Kibana 搜索 MyException 时,我得到的结果为零,但如果我搜索 com.example.MyException,我会得到我期望的所有结果。

ElasticSearch word-delimiter 文档说:

按照以下规则将单词拆分为子词:

  • 按字内分隔符拆分(默认情况下,所有非字母数字字符)

我预计这意味着我的完全限定类名将被点分隔,并且我将能够仅搜索类名。

我需要做些什么才能仅搜索类名以获得 ElasticSearch 的结果。

更新

我的日志通过Stream Cloudwatch Logs to EslaticSearch AWS 功能被提取到 ElasticSearch 中。此功能会生成一个 AWS lmbda 函数,该函数将日志记录发送到 ElasticSearch。我正在使用默认生成的函数 (see code)。我没有配置任何 ElasticSearch 映射,所以我假设我正在使用来自Dynamic Mapping的默认值

示例日志条目:

{
    "date": 1516892650443,
    "requestID": "ff5d5a37-01e0-11e8-bf20-610a6080caa5",
    "logger name": "com.example.MyHandler",
    "level": "ERROR",
    "message": "Exception thrown: ",
    "exception": " com.example.MyException \n \tat com.example.MyHandler.handle(MyHandler.java:100) \n \tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) \n \tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) \n \tat java.lang.Thread.run(Thread.java:748) \n Caused by: java.io.IOException: Stream closed\n \tat java.io.FileInputStream.read(FileInputStream.java:100)"
}

示例索引配置:

{
  "cwl-2018.01.16": {
    "aliases": {},
    "mappings": {
      "MyService-prod": {
        "properties": {
          "@id": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@log_group": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@log_stream": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@message": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@owner": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "@timestamp": {
            "type": "date"
          },
          "date": {
            "type": "long"
          },
          "exception": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "level": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "logger name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "message": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "requestID": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    },
    "settings": {
      "index": {
        "refresh_interval": "5s",
        "number_of_shards": "5",
        "blocks": {
          "write": "false"
        },
        "provided_name": "cwl-2018.01.16",
        "creation_date": "1516060800423",
        "number_of_replicas": "0",
        "uuid": "xxxx",
        "version": {
          "created": "5050299"
        }
      }
    }
  }
}

【问题讨论】:

  • 但是您是否已将该过滤器添加到包含您的类名和包的字段的映射中?
  • 不,我没有向 elasticsearch 添加任何过滤器或映射。
  • 尝试搜索myexception。小写。你实际上是如何搜索的?您是在搜索文本框中使用字段名还是只输入 MyException 就可以了?
  • 我只是在 kibana 搜索文本框中输入我的异常名称。我尝试使用小写字母(即myexception)和字段名称(即exception:myexception)进行搜索,但结果仍然为零。

标签: java amazon-web-services elasticsearch kibana


【解决方案1】:

您是否尝试过在 Kibana 中搜索 *MyException?我在我的环境中使用了它并且它有效。但是你应该对时间范围保持谨慎,一开始我使用了 90 天,我不得不重新启动我的 Elasticsearch。如果你指定你正在查看的字段,它会更快,我使用“logger:*MySearchExpression”,它在几秒钟内就可以工作。

【讨论】:

  • 是的,我已经尝试过了,但是当我尝试使用 15 分钟时间范围的查询时,查询超时。
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 2018-11-01
  • 2015-11-17
  • 1970-01-01
  • 2017-05-22
  • 2016-01-07
  • 2016-10-10
  • 1970-01-01
相关资源
最近更新 更多