Merge pull request #1063 from jbochi/metrics_percentile_fix

Fix percentiles on metrics filter
This commit is contained in:
Jordan Sissel 2014-04-16 08:20:36 -07:00
commit 64fbfacc86
2 changed files with 27 additions and 6 deletions

View file

@ -48,6 +48,7 @@ require "logstash/namespace"
# * "thing.max" - the maximum value seen for this metric # * "thing.max" - the maximum value seen for this metric
# * "thing.stddev" - the standard deviation for this metric # * "thing.stddev" - the standard deviation for this metric
# * "thing.mean" - the mean for this metric # * "thing.mean" - the mean for this metric
# * "thing.pXX" - the XXth percentile for this metric (see `percentiles`)
# #
# #### Example: computing event rate # #### Example: computing event rate
# #
@ -197,7 +198,7 @@ class LogStash::Filters::Metrics < LogStash::Filters::Base
event["#{name}.mean"] = metric.mean event["#{name}.mean"] = metric.mean
@percentiles.each do |percentile| @percentiles.each do |percentile|
event["#{name}.p#{percentile}"] = metric.snapshot.value(percentile / 100) event["#{name}.p#{percentile}"] = metric.snapshot.value(percentile / 100.0)
end end
metric.clear if should_clear? metric.clear if should_clear?
end end

View file

@ -111,12 +111,12 @@ describe LogStash::Filters::Metrics do
context "with timer config" do context "with timer config" do
context "on the first flush" do context "on the first flush" do
subject { subject {
config = {"timer" => ["http.request_time", "request_time"]} config = {"timer" => ["http.request_time", "%{request_time}"]}
filter = LogStash::Filters::Metrics.new config filter = LogStash::Filters::Metrics.new config
filter.register filter.register
filter.filter LogStash::Event.new({"request_time" => 1}) filter.filter LogStash::Event.new({"request_time" => 10})
filter.filter LogStash::Event.new({"request_time" => 2}) filter.filter LogStash::Event.new({"request_time" => 20})
filter.filter LogStash::Event.new({"request_time" => 3}) filter.filter LogStash::Event.new({"request_time" => 30})
filter.flush filter.flush
} }
@ -125,12 +125,32 @@ describe LogStash::Filters::Metrics do
insist { subject.first["http.request_time.count"] } == 3 insist { subject.first["http.request_time.count"] } == 3
end end
it "should include rates and percentiles" do it "should include rates and percentiles keys" do
metrics = ["rate_1m", "rate_5m", "rate_15m", "p1", "p5", "p10", "p90", "p95", "p99"] metrics = ["rate_1m", "rate_5m", "rate_15m", "p1", "p5", "p10", "p90", "p95", "p99"]
metrics.each do |metric| metrics.each do |metric|
insist { subject.first }.include? "http.request_time.#{metric}" insist { subject.first }.include? "http.request_time.#{metric}"
end end
end end
it "should include min value" do
insist { subject.first['http.request_time.min'] } == 10.0
end
it "should include mean value" do
insist { subject.first['http.request_time.mean'] } == 20.0
end
it "should include stddev value" do
insist { subject.first['http.request_time.stddev'] } == Math.sqrt(10.0)
end
it "should include max value" do
insist { subject.first['http.request_time.max'] } == 30.0
end
it "should include percentile value" do
insist { subject.first['http.request_time.p99'] } == 30.0
end
end end
end end