mirror of
https://github.com/apache/druid.git
synced 2025-02-17 15:35:56 +00:00
Merge pull request #659 from metamx/fix-metrics
Separate query metrics into scan/time and query/time
This commit is contained in:
commit
eadbcd1b1d
@ -33,10 +33,13 @@ import java.io.IOException;
|
|||||||
*/
|
*/
|
||||||
public class MetricsEmittingQueryRunner<T> implements QueryRunner<T>
|
public class MetricsEmittingQueryRunner<T> implements QueryRunner<T>
|
||||||
{
|
{
|
||||||
|
private static final String DEFAULT_METRIC_NAME = "query/time";
|
||||||
|
|
||||||
private final ServiceEmitter emitter;
|
private final ServiceEmitter emitter;
|
||||||
private final Function<Query<T>, ServiceMetricEvent.Builder> builderFn;
|
private final Function<Query<T>, ServiceMetricEvent.Builder> builderFn;
|
||||||
private final QueryRunner<T> queryRunner;
|
private final QueryRunner<T> queryRunner;
|
||||||
private final long creationTime;
|
private final long creationTime;
|
||||||
|
private final String metricName;
|
||||||
|
|
||||||
public MetricsEmittingQueryRunner(
|
public MetricsEmittingQueryRunner(
|
||||||
ServiceEmitter emitter,
|
ServiceEmitter emitter,
|
||||||
@ -44,25 +47,38 @@ public class MetricsEmittingQueryRunner<T> implements QueryRunner<T>
|
|||||||
QueryRunner<T> queryRunner
|
QueryRunner<T> queryRunner
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this(emitter, builderFn, queryRunner, -1);
|
this(emitter, builderFn, queryRunner, DEFAULT_METRIC_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MetricsEmittingQueryRunner(
|
public MetricsEmittingQueryRunner(
|
||||||
ServiceEmitter emitter,
|
ServiceEmitter emitter,
|
||||||
Function<Query<T>, ServiceMetricEvent.Builder> builderFn,
|
Function<Query<T>, ServiceMetricEvent.Builder> builderFn,
|
||||||
QueryRunner<T> queryRunner,
|
QueryRunner<T> queryRunner,
|
||||||
long creationTime
|
long creationTime,
|
||||||
|
String metricName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.emitter = emitter;
|
this.emitter = emitter;
|
||||||
this.builderFn = builderFn;
|
this.builderFn = builderFn;
|
||||||
this.queryRunner = queryRunner;
|
this.queryRunner = queryRunner;
|
||||||
this.creationTime = creationTime;
|
this.creationTime = creationTime;
|
||||||
|
this.metricName = metricName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MetricsEmittingQueryRunner(
|
||||||
|
ServiceEmitter emitter,
|
||||||
|
Function<Query<T>, ServiceMetricEvent.Builder> builderFn,
|
||||||
|
QueryRunner<T> queryRunner,
|
||||||
|
String metricName
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this(emitter, builderFn, queryRunner, -1, metricName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public MetricsEmittingQueryRunner<T> withWaitMeasuredFromNow()
|
public MetricsEmittingQueryRunner<T> withWaitMeasuredFromNow()
|
||||||
{
|
{
|
||||||
return new MetricsEmittingQueryRunner<T>(emitter, builderFn, queryRunner, System.currentTimeMillis());
|
return new MetricsEmittingQueryRunner<T>(emitter, builderFn, queryRunner, System.currentTimeMillis(), metricName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -97,9 +113,9 @@ public class MetricsEmittingQueryRunner<T> implements QueryRunner<T>
|
|||||||
finally {
|
finally {
|
||||||
long timeTaken = System.currentTimeMillis() - startTime;
|
long timeTaken = System.currentTimeMillis() - startTime;
|
||||||
|
|
||||||
emitter.emit(builder.build("query/time", timeTaken));
|
emitter.emit(builder.build(metricName, timeTaken));
|
||||||
|
|
||||||
if(creationTime > 0) {
|
if (creationTime > 0) {
|
||||||
emitter.emit(builder.build("query/wait", startTime - creationTime));
|
emitter.emit(builder.build("query/wait", startTime - creationTime));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -173,12 +189,13 @@ public class MetricsEmittingQueryRunner<T> implements QueryRunner<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
long timeTaken = System.currentTimeMillis() - startTime;
|
long timeTaken = System.currentTimeMillis() - startTime;
|
||||||
emitter.emit(builder.build("query/time", timeTaken));
|
emitter.emit(builder.build(metricName, timeTaken));
|
||||||
|
|
||||||
if (creationTime > 0) {
|
if (creationTime > 0) {
|
||||||
emitter.emit(builder.build("query/wait", startTime - creationTime));
|
emitter.emit(builder.build("query/wait", startTime - creationTime));
|
||||||
}
|
}
|
||||||
} finally {
|
}
|
||||||
|
finally {
|
||||||
yielder.close();
|
yielder.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -390,30 +390,42 @@ public class ServerManager implements QuerySegmentWalker
|
|||||||
{
|
{
|
||||||
SpecificSegmentSpec segmentSpec = new SpecificSegmentSpec(segmentDescriptor);
|
SpecificSegmentSpec segmentSpec = new SpecificSegmentSpec(segmentDescriptor);
|
||||||
return new SpecificSegmentQueryRunner<T>(
|
return new SpecificSegmentQueryRunner<T>(
|
||||||
new BySegmentQueryRunner<T>(
|
new MetricsEmittingQueryRunner<T>(
|
||||||
adapter.getIdentifier(),
|
emitter,
|
||||||
adapter.getDataInterval().getStart(),
|
new Function<Query<T>, ServiceMetricEvent.Builder>()
|
||||||
new CachingQueryRunner<T>(
|
{
|
||||||
|
@Override
|
||||||
|
public ServiceMetricEvent.Builder apply(@Nullable final Query<T> input)
|
||||||
|
{
|
||||||
|
return toolChest.makeMetricBuilder(input);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new BySegmentQueryRunner<T>(
|
||||||
adapter.getIdentifier(),
|
adapter.getIdentifier(),
|
||||||
segmentDescriptor,
|
adapter.getDataInterval().getStart(),
|
||||||
objectMapper,
|
new CachingQueryRunner<T>(
|
||||||
cache,
|
adapter.getIdentifier(),
|
||||||
toolChest,
|
segmentDescriptor,
|
||||||
new MetricsEmittingQueryRunner<T>(
|
objectMapper,
|
||||||
emitter,
|
cache,
|
||||||
new Function<Query<T>, ServiceMetricEvent.Builder>()
|
toolChest,
|
||||||
{
|
new MetricsEmittingQueryRunner<T>(
|
||||||
@Override
|
emitter,
|
||||||
public ServiceMetricEvent.Builder apply(@Nullable final Query<T> input)
|
new Function<Query<T>, ServiceMetricEvent.Builder>()
|
||||||
{
|
{
|
||||||
return toolChest.makeMetricBuilder(input);
|
@Override
|
||||||
}
|
public ServiceMetricEvent.Builder apply(@Nullable final Query<T> input)
|
||||||
},
|
{
|
||||||
new ReferenceCountingSegmentQueryRunner<T>(factory, adapter)
|
return toolChest.makeMetricBuilder(input);
|
||||||
).withWaitMeasuredFromNow(),
|
}
|
||||||
cacheConfig
|
},
|
||||||
|
new ReferenceCountingSegmentQueryRunner<T>(factory, adapter),
|
||||||
|
"scan/time"
|
||||||
|
).withWaitMeasuredFromNow(),
|
||||||
|
cacheConfig
|
||||||
|
)
|
||||||
)
|
)
|
||||||
),
|
).withWaitMeasuredFromNow(),
|
||||||
segmentSpec
|
segmentSpec
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user