mirror of
https://github.com/elastic/logstash.git
synced 2025-04-24 14:47:19 -04:00
Merge pull request #1063 from jbochi/metrics_percentile_fix
Fix percentiles on metrics filter
This commit is contained in:
commit
64fbfacc86
2 changed files with 27 additions and 6 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue