graylog-labs / graylog2-web-interface

[DEPRECATED]
https://www.graylog.org/
611 stars 174 forks source link

Long running search crashes #1524

Closed HolgerOpenSource closed 9 years ago

HolgerOpenSource commented 9 years ago

If we submit long running searches, it crashes after about 60s with a timeout exception. We want to search over a large relative timerange (14 days) in about 22 indexes with at all 2.2 TB auf data.

Versions:

Graylog 1.1.4 elasticsearch 1.6.0 MongoDB 2.6.7

GUI:

Oh no, something went wrong! (You caused a org.graylog2.restclient.lib.APIException. API call failed GET http://@glserver:9290/search/universal/relative/histogram?filter=_&query=_&range=1209600&interval=day&range_type=relative) Reason: There was a problem with your search. We expected HTTP 200, but got a HTTP -1

Stacktrace show in GUI:

org.graylog2.restclient.lib.ApiClientImpl$ApiRequestBuilder#execute (ApiClientImpl.java:451) org.graylog2.restclient.models.UniversalSearch#dateHistogram (UniversalSearch.java:193) controllers.SearchController#renderSearch (SearchController.java:273) controllers.SearchController#index (SearchController.java:126) Routes$$anonfun$routes$1$$anonfun$applyOrElse$7$$anonfun$apply$459#apply (routes_routing.scala:1659) Routes$$anonfun$routes$1$$anonfun$applyOrElse$7$$anonfun$apply$459#apply (routes_routing.scala:1659) play.core.Router$HandlerInvokerFactory$$anon$4#resultCall (Router.scala:264) play.core.Router$HandlerInvokerFactory$JavaActionInvokerFactory$$anon$15$$anon$1#invocation (Router.scala:255) play.core.j.JavaAction$$anon$1#call (JavaAction.scala:55) play.GlobalSettings$1#call (GlobalSettings.java:67) ...

Graylog-Web-Interface application.log

2015-07-13 16:14:41,856 - [ERROR] - from org.graylog2.restclient.lib.ApiClient in play-akka.actor.default-dispatcher-73 REST call failed java.util.concurrent.TimeoutException: Idle connection timeout to glserver/x.x.x.x:9290 of 60000 ms at com.ning.http.client.providers.netty.timeout.TimeoutTimerTask.expire(TimeoutTimerTask.java:43) ~[com.ning.async-http-client-1.8.14.jar:na] at com.ning.http.client.providers.netty.timeout.IdleConnectionTimeoutTimerTask.run(IdleConnectionTimeoutTimerTask.java:54) ~[com.ning.async-http-client-1.8.14.jar:na] at org.jboss.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:556) ~[io.netty.netty-3.9.8.Final.jar:na] at org.jboss.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:632) ~[io.netty.netty-3.9.8.Final.jar:na] at org.jboss.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:369) ~[io.netty.netty-3.9.8.Final.jar:na] at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[io.netty.netty-3.9.8.Final.jar:na] at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_31]

Can we change the default timeout to avoid such exceptions?

joschi commented 9 years ago

Thanks for reporting this (and including all relevant information)!

In previous versions of Graylog including up to 1.1.4 there's a hard-coded time limit of 61 seconds (don't ask…) for search requests in the Graylog web interface (or more precisely in the Graylog REST client, see https://github.com/Graylog2/graylog2-server/blob/1.1.4/graylog2-rest-client/src/main/java/org/graylog2/restclient/models/UniversalSearch.java#L113) which cannot be overridden.

Beginning with Graylog 1.2.0, there will be a "proper" configurable Elasticsearch request timeout (Graylog2/graylog2-server#1220).

As a (really ugly) workaround you could use the Graylog REST API directly to run the search queries that time out in the web interface.