我可以在ElasticSearch日志中忽略这些查询异常吗?

时间:2015-02-20 19:45:52

标签: elasticsearch

我的ES实例中有大量索引,我注意到日志文件变得越来越大。默认情况下,ElasticSearch Chef cookbook将日志级别设置为DEBUG,这导致将数百万条错误消息写入日志。请以此为例:

[2015-02-20 18:42:28,858][DEBUG][action.search.type       ] [SEARCHNODE] [child_index][4], node[xxxx], [P], s[STARTED]: Failed to execute [org.elasticsearch.action.search.SearchRequest@1a9a62ad] lastShard [true]
org.elasticsearch.search.SearchParseException: [ichild_index][4]: from[0],size[105]: Parse Failure [Failed to parse source [{"from":0,"size":105,"sort":{"lastmodified":{"order":"desc","missing":"_last"}},"query":{"indices":{"indices":["main_index"],"query":{"filtered":{"query":{"bool":{"must":[{"match_all":{}}]}},"filter":{"and":{"filters":[{"term":{"isclosed":false}},{"or":[{"and":[{"type":{"value":"type_name"}}]}]},{"term":{"planid":1454}},{"bool":{"should":[{"terms":{"roles":[173,935,934,937,930,938,936]}},{"missing":{"field":"roles"}}]}}]}}}},"no_match_query":"none"}},"fields":"[]"}]]
        at org.elasticsearch.search.SearchService.parseSource(SearchService.java:660)
        at org.elasticsearch.search.SearchService.createContext(SearchService.java:516)
        at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:488)
        at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:257)
        at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:206)
        at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:203)
        at org.elasticsearch.search.action.SearchServiceTransportAction$23.run(SearchServiceTransportAction.java:517)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.search.SearchParseException: [child_index][4]: from[0],size[105]: Parse Failure [No mapping found for [lastmodified] in order to sort on]
        at org.elasticsearch.search.sort.SortParseElement.addSortField(SortParseElement.java:198)
        at org.elasticsearch.search.sort.SortParseElement.addCompoundSortField(SortParseElement.java:172)
        at org.elasticsearch.search.sort.SortParseElement.parse(SortParseElement.java:90)
        at org.elasticsearch.search.SearchService.parseSource(SearchService.java:644)

错误消息中的查询包含此片段:

... {"indices":{"indices":["main_index"] ...

但是,错误实际上源自child_index。我不确定为什么我的实例甚至会考虑使用child_index执行查询,因为我们显然不希望根据查询考虑该索引。

上面的查询实际上已成功执行。结果正确返回,我们不会在Web应用程序上记录任何指示问题的内容。据推测,查询在某些时候也会针对main_index运行,并且结果会正确地返回到Web应用程序。

我的实例工作负载适中,这个文件在给定的12小时内可以轻松增长到5gb。我知道该问题的解决方案很简单:将日志级别降低到WARN,错误就会消失。但是,我担心我们可能会遇到一个迄今为止未确诊的问题,这个问题可能会让我们后来咬人。

1 个答案:

答案 0 :(得分:1)

在忽略的所有错误中,org.elasticsearch.search.SearchParseException可能是从不忽略的错误。这意味着ES无法按照预期能够解析您的搜索JSON(据我所知)。

我看了一下你的JSON,虽然它显示你的“字段”数组实际上是"fields": "[]",这可能是导致问题的原因。你可以尝试没有报价,看看会发生什么?

理论,但它可能无法解析该部分,因此只是忽略它(这应该导致与在这种情况下解析时相同的事情)。