mirror of https://github.com/apache/druid.git
Merge pull request #1550 from himanshug/optionally_log_all_requests
print *all* HTTP requests to log if configured
This commit is contained in:
commit
ba59f8afc4
|
@ -76,11 +76,13 @@ The following path is used for service discovery. It is **not** affected by `dru
|
||||||
|
|
||||||
### Request Logging
|
### Request Logging
|
||||||
|
|
||||||
All nodes that can serve queries can also log the requests they see.
|
All nodes that can serve queries can also log the query requests they see.
|
||||||
|
|
||||||
|Property|Description|Default|
|
|Property|Description|Default|
|
||||||
|--------|-----------|-------|
|
|--------|-----------|-------|
|
||||||
|`druid.request.logging.type`|Choices: noop, file, emitter. How to log every request.|noop|
|
|`druid.request.logging.type`|Choices: noop, file, emitter. How to log every query request.|noop|
|
||||||
|
|
||||||
|
Note that, you can enable sending all the HTTP requests to log by setting "io.druid.jetty.RequestLog" to DEBUG level. See [Logging](../configuration/logging.html)
|
||||||
|
|
||||||
#### File Request Logging
|
#### File Request Logging
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,12 @@ An example log4j2.xml ships with Druid under config/_common/log4j2.xml, and a sa
|
||||||
<Root level="info">
|
<Root level="info">
|
||||||
<AppenderRef ref="Console"/>
|
<AppenderRef ref="Console"/>
|
||||||
</Root>
|
</Root>
|
||||||
|
|
||||||
|
<!-- Uncomment to enable logging of all HTTP requests
|
||||||
|
<Logger name="io.druid.jetty.RequestLog" additivity="false" level="DEBUG">
|
||||||
|
<AppenderRef ref="Console"/>
|
||||||
|
</Logger>
|
||||||
|
-->
|
||||||
</Loggers>
|
</Loggers>
|
||||||
</Configuration>
|
</Configuration>
|
||||||
```
|
```
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Metamarkets Group Inc. (Metamarkets) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. Metamarkets licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.druid.server.initialization.jetty;
|
||||||
|
|
||||||
|
import com.metamx.common.logger.Logger;
|
||||||
|
import org.eclipse.jetty.server.Request;
|
||||||
|
import org.eclipse.jetty.server.RequestLog;
|
||||||
|
import org.eclipse.jetty.server.Response;
|
||||||
|
import org.eclipse.jetty.util.component.AbstractLifeCycle;
|
||||||
|
|
||||||
|
|
||||||
|
public class JettyRequestLog extends AbstractLifeCycle implements RequestLog
|
||||||
|
{
|
||||||
|
private final static Logger logger = new Logger("io.druid.jetty.RequestLog");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void log(Request request, Response response)
|
||||||
|
{
|
||||||
|
if (logger.isDebugEnabled()) {
|
||||||
|
logger.debug(
|
||||||
|
"%s %s %s",
|
||||||
|
request.getMethod(),
|
||||||
|
request.getUri().toString(),
|
||||||
|
request.getProtocol().toString()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -19,20 +19,20 @@
|
||||||
|
|
||||||
package io.druid.server.initialization.jetty;
|
package io.druid.server.initialization.jetty;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import com.google.inject.Key;
|
import com.google.inject.Key;
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
import com.metamx.common.ISE;
|
import com.metamx.common.ISE;
|
||||||
|
import org.eclipse.jetty.server.Handler;
|
||||||
|
import org.eclipse.jetty.server.handler.RequestLogHandler;
|
||||||
import org.eclipse.jetty.servlet.FilterHolder;
|
import org.eclipse.jetty.servlet.FilterHolder;
|
||||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||||
import org.eclipse.jetty.servlets.AsyncGzipFilter;
|
import org.eclipse.jetty.servlets.AsyncGzipFilter;
|
||||||
import org.eclipse.jetty.servlets.GzipFilter;
|
import org.eclipse.jetty.servlets.GzipFilter;
|
||||||
|
|
||||||
import javax.ws.rs.HttpMethod;
|
import javax.ws.rs.HttpMethod;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class JettyServerInitUtils
|
public class JettyServerInitUtils
|
||||||
{
|
{
|
||||||
|
@ -62,7 +62,8 @@ public class JettyServerInitUtils
|
||||||
filterHolder.setInitParameter("checkGzExists", String.valueOf(false));
|
filterHolder.setInitParameter("checkGzExists", String.valueOf(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addExtensionFilters(ServletContextHandler handler, Injector injector) {
|
public static void addExtensionFilters(ServletContextHandler handler, Injector injector)
|
||||||
|
{
|
||||||
Set<ServletFilterHolder> extensionFilters = injector.getInstance(Key.get(new TypeLiteral<Set<ServletFilterHolder>>(){}));
|
Set<ServletFilterHolder> extensionFilters = injector.getInstance(Key.get(new TypeLiteral<Set<ServletFilterHolder>>(){}));
|
||||||
|
|
||||||
for (ServletFilterHolder servletFilterHolder : extensionFilters) {
|
for (ServletFilterHolder servletFilterHolder : extensionFilters) {
|
||||||
|
@ -84,4 +85,13 @@ public class JettyServerInitUtils
|
||||||
handler.addFilter(holder, servletFilterHolder.getPath(), servletFilterHolder.getDispatcherType());
|
handler.addFilter(holder, servletFilterHolder.getPath(), servletFilterHolder.getDispatcherType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Handler getJettyRequestLogHandler()
|
||||||
|
{
|
||||||
|
// Ref: http://www.eclipse.org/jetty/documentation/9.2.6.v20141205/configuring-jetty-request-logs.html
|
||||||
|
RequestLogHandler requestLogHandler = new RequestLogHandler();
|
||||||
|
requestLogHandler.setRequestLog(new JettyRequestLog());
|
||||||
|
|
||||||
|
return requestLogHandler;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,7 +254,7 @@ public class CliOverlord extends ServerRunnable
|
||||||
root.addFilter(GuiceFilter.class, "/druid/*", null);
|
root.addFilter(GuiceFilter.class, "/druid/*", null);
|
||||||
|
|
||||||
HandlerList handlerList = new HandlerList();
|
HandlerList handlerList = new HandlerList();
|
||||||
handlerList.setHandlers(new Handler[]{root});
|
handlerList.setHandlers(new Handler[]{JettyServerInitUtils.getJettyRequestLogHandler(), root});
|
||||||
|
|
||||||
server.setHandler(handlerList);
|
server.setHandler(handlerList);
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,8 +77,9 @@ class CoordinatorJettyServerInitializer implements JettyServerInitializer
|
||||||
root.addFilter(GuiceFilter.class, "/coordinator/*", null);
|
root.addFilter(GuiceFilter.class, "/coordinator/*", null);
|
||||||
|
|
||||||
root.addServlet(new ServletHolder(injector.getInstance(OverlordProxyServlet.class)), "/druid/indexer/*");
|
root.addServlet(new ServletHolder(injector.getInstance(OverlordProxyServlet.class)), "/druid/indexer/*");
|
||||||
|
|
||||||
HandlerList handlerList = new HandlerList();
|
HandlerList handlerList = new HandlerList();
|
||||||
handlerList.setHandlers(new Handler[]{root});
|
handlerList.setHandlers(new Handler[]{JettyServerInitUtils.getJettyRequestLogHandler(), root});
|
||||||
|
|
||||||
server.setHandler(handlerList);
|
server.setHandler(handlerList);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,13 @@ class MiddleManagerJettyServerInitializer implements JettyServerInitializer
|
||||||
root.addFilter(GuiceFilter.class, "/*", null);
|
root.addFilter(GuiceFilter.class, "/*", null);
|
||||||
|
|
||||||
final HandlerList handlerList = new HandlerList();
|
final HandlerList handlerList = new HandlerList();
|
||||||
handlerList.setHandlers(new Handler[]{root, new DefaultHandler()});
|
handlerList.setHandlers(
|
||||||
|
new Handler[]{
|
||||||
|
JettyServerInitUtils.getJettyRequestLogHandler(),
|
||||||
|
root,
|
||||||
|
new DefaultHandler()
|
||||||
|
}
|
||||||
|
);
|
||||||
server.setHandler(handlerList);
|
server.setHandler(handlerList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class QueryJettyServerInitializer implements JettyServerInitializer
|
||||||
root.addFilter(GuiceFilter.class, "/*", null);
|
root.addFilter(GuiceFilter.class, "/*", null);
|
||||||
|
|
||||||
final HandlerList handlerList = new HandlerList();
|
final HandlerList handlerList = new HandlerList();
|
||||||
handlerList.setHandlers(new Handler[]{root});
|
handlerList.setHandlers(new Handler[]{JettyServerInitUtils.getJettyRequestLogHandler(), root});
|
||||||
server.setHandler(handlerList);
|
server.setHandler(handlerList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,7 @@ public class RouterJettyServerInitializer implements JettyServerInitializer
|
||||||
root.addFilter(GuiceFilter.class, "/status/*", null);
|
root.addFilter(GuiceFilter.class, "/status/*", null);
|
||||||
|
|
||||||
final HandlerList handlerList = new HandlerList();
|
final HandlerList handlerList = new HandlerList();
|
||||||
handlerList.setHandlers(new Handler[]{root});
|
handlerList.setHandlers(new Handler[]{JettyServerInitUtils.getJettyRequestLogHandler(), root});
|
||||||
server.setHandler(handlerList);
|
server.setHandler(handlerList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue