logstash-filter-metrics 3.0.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/Gemfile +3 -1
- data/LICENSE +1 -1
- data/README.md +12 -3
- data/lib/logstash/filters/metrics.rb +10 -10
- data/logstash-filter-metrics.gemspec +3 -3
- data/spec/filters/metrics_spec.rb +23 -23
- metadata +20 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 669b8830b869a967bb698f160c6f0a599caa8182
|
4
|
+
data.tar.gz: bcc4c55dc48d8be54205c152acf7e69e33db0b76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad2e3d7e90cfbbfbc367d4a5abfb8fb03f7bbbb4afbad767bb3128df886c243eab71ca5e3d156cad66a14dd378d93b8d6f68a076fe8375c564bf4bbb2da3ee52
|
7
|
+
data.tar.gz: eb2463f0ed8663c7fab7af768ae55d91c2a2d93b09269de4713b582846168cc4c43ea2ca0082b0df1c4ef495f7cd116599af63341728c30288059cd173f4da93
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
## 4.0.0
|
2
|
+
- Update the plugin to the version 2.0 of the plugin api, this change is required for Logstash 5.0 compatibility. See https://github.com/elastic/logstash/issues/5141
|
1
3
|
# 3.0.2
|
2
4
|
- Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
|
3
5
|
# 3.0.1
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Logstash Plugin
|
2
2
|
|
3
|
-
[](http://build-eu-00.elastic.co/view/LS%20Plugins/view/LS%20Filters/job/logstash-plugin-filter-metrics-unit/)
|
3
|
+
[](https://travis-ci.org/logstash-plugins/logstash-filter-metrics)
|
5
4
|
|
6
5
|
This is a plugin for [Logstash](https://github.com/elastic/logstash).
|
7
6
|
|
@@ -56,7 +55,12 @@ gem "logstash-filter-awesome", :path => "/your/local/logstash-filter-awesome"
|
|
56
55
|
```
|
57
56
|
- Install plugin
|
58
57
|
```sh
|
58
|
+
# Logstash 2.3 and higher
|
59
|
+
bin/logstash-plugin install --no-verify
|
60
|
+
|
61
|
+
# Prior to Logstash 2.3
|
59
62
|
bin/plugin install --no-verify
|
63
|
+
|
60
64
|
```
|
61
65
|
- Run Logstash with your plugin
|
62
66
|
```sh
|
@@ -74,7 +78,12 @@ gem build logstash-filter-awesome.gemspec
|
|
74
78
|
```
|
75
79
|
- Install the plugin from the Logstash home
|
76
80
|
```sh
|
77
|
-
|
81
|
+
# Logstash 2.3 and higher
|
82
|
+
bin/logstash-plugin install --no-verify
|
83
|
+
|
84
|
+
# Prior to Logstash 2.3
|
85
|
+
bin/plugin install --no-verify
|
86
|
+
|
78
87
|
```
|
79
88
|
- Start Logstash and proceed to test the plugin
|
80
89
|
|
@@ -190,7 +190,7 @@ class LogStash::Filters::Metrics < LogStash::Filters::Base
|
|
190
190
|
return unless should_flush?
|
191
191
|
|
192
192
|
event = LogStash::Event.new
|
193
|
-
event
|
193
|
+
event.set("message", Socket.gethostname)
|
194
194
|
@metric_meters.each_pair do |name, metric|
|
195
195
|
flush_rates event, name, metric
|
196
196
|
metric.clear if should_clear?
|
@@ -199,14 +199,14 @@ class LogStash::Filters::Metrics < LogStash::Filters::Base
|
|
199
199
|
@metric_timers.each_pair do |name, metric|
|
200
200
|
flush_rates event, name, metric
|
201
201
|
# These 4 values are not sliding, so they probably are not useful.
|
202
|
-
event
|
203
|
-
event
|
202
|
+
event.set("[#{name}][min]", metric.min)
|
203
|
+
event.set("[#{name}][max]", metric.max)
|
204
204
|
# timer's stddev currently returns variance, fix it.
|
205
|
-
event
|
206
|
-
event
|
205
|
+
event.set("[#{name}][stddev]", metric.stddev ** 0.5)
|
206
|
+
event.set("[#{name}][mean]", metric.mean)
|
207
207
|
|
208
208
|
@percentiles.each do |percentile|
|
209
|
-
event
|
209
|
+
event.set("[#{name}][p#{percentile}]", metric.snapshot.value(percentile / 100.0))
|
210
210
|
end
|
211
211
|
metric.clear if should_clear?
|
212
212
|
end
|
@@ -237,10 +237,10 @@ class LogStash::Filters::Metrics < LogStash::Filters::Base
|
|
237
237
|
private
|
238
238
|
|
239
239
|
def flush_rates(event, name, metric)
|
240
|
-
event
|
241
|
-
event
|
242
|
-
event
|
243
|
-
event
|
240
|
+
event.set("[#{name}][count]", metric.count)
|
241
|
+
event.set("[#{name}][rate_1m]", metric.one_minute_rate) if @rates.include? 1
|
242
|
+
event.set("[#{name}][rate_5m]", metric.five_minute_rate) if @rates.include? 5
|
243
|
+
event.set("[#{name}][rate_15m]", metric.fifteen_minute_rate) if @rates.include? 15
|
244
244
|
end
|
245
245
|
|
246
246
|
def metric_key(key)
|
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-metrics'
|
4
|
-
s.version = '
|
4
|
+
s.version = '4.0.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "The metrics filter is useful for aggregating metrics."
|
7
|
-
s.description = "This gem is a
|
7
|
+
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
8
8
|
s.authors = ["Elastic"]
|
9
9
|
s.email = 'info@elastic.co'
|
10
10
|
s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
|
21
21
|
|
22
22
|
# Gem dependencies
|
23
|
-
s.add_runtime_dependency "logstash-core-plugin-api", "~>
|
23
|
+
s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
|
24
24
|
s.add_runtime_dependency "metriks" #(MIT license)
|
25
25
|
s.add_runtime_dependency "thread_safe"
|
26
26
|
|
@@ -29,8 +29,8 @@ describe LogStash::Filters::Metrics do
|
|
29
29
|
|
30
30
|
it "should flush counts" do
|
31
31
|
insist { subject.length } == 1
|
32
|
-
insist { subject.first
|
33
|
-
insist { subject.first
|
32
|
+
insist { subject.first.get("http_200")["count"] } == 2
|
33
|
+
insist { subject.first.get("http_404")["count"] } == 1
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should include rates and percentiles" do
|
@@ -38,7 +38,7 @@ describe LogStash::Filters::Metrics do
|
|
38
38
|
rates = [ "rate_1m", "rate_5m", "rate_15m" ]
|
39
39
|
meters.each do |meter|
|
40
40
|
rates.each do |rate|
|
41
|
-
insist { subject.first
|
41
|
+
insist { subject.first.get(meter) }.include? rate
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -56,8 +56,8 @@ describe LogStash::Filters::Metrics do
|
|
56
56
|
events = filter.flush
|
57
57
|
events = filter.flush
|
58
58
|
insist { events.length } == 1
|
59
|
-
insist { events.first
|
60
|
-
insist { events.first
|
59
|
+
insist { events.first.get("http_200")["count"] } == 2
|
60
|
+
insist { events.first.get("http_404")["count"] } == 1
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -78,7 +78,7 @@ describe LogStash::Filters::Metrics do
|
|
78
78
|
}
|
79
79
|
|
80
80
|
it "should include only the requested rates" do
|
81
|
-
rate_fields = subject.first
|
81
|
+
rate_fields = subject.first.get("http_200").to_hash.keys.select {|field| field.start_with?("rate") }
|
82
82
|
insist { rate_fields.length } == 1
|
83
83
|
insist { rate_fields }.include? "rate_1m"
|
84
84
|
end
|
@@ -114,10 +114,10 @@ describe LogStash::Filters::Metrics do
|
|
114
114
|
events1 = filter1.flush
|
115
115
|
events2 = filter2.flush
|
116
116
|
|
117
|
-
insist { events1.first
|
118
|
-
insist { events2.first
|
119
|
-
insist { events1.first
|
120
|
-
insist { events2.first
|
117
|
+
insist { events1.first.get("http_200")["count"] } == 1
|
118
|
+
insist { events2.first.get("http_200")["count"] } == 2
|
119
|
+
insist { events1.first.get("http_404")["count"] } == 1
|
120
|
+
insist { events2.first.get("http_404") } == nil
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
@@ -135,34 +135,34 @@ describe LogStash::Filters::Metrics do
|
|
135
135
|
|
136
136
|
it "should flush counts" do
|
137
137
|
insist { subject.length } == 1
|
138
|
-
insist { subject.first
|
138
|
+
insist { subject.first.get("http_request_time")["count"] } == 3
|
139
139
|
end
|
140
140
|
|
141
141
|
it "should include rates and percentiles keys" do
|
142
142
|
metrics = ["rate_1m", "rate_5m", "rate_15m", "p1", "p5", "p10", "p90", "p95", "p99"]
|
143
143
|
metrics.each do |metric|
|
144
|
-
insist { subject.first
|
144
|
+
insist { subject.first.get("http_request_time") }.include? metric
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
148
|
it "should include min value" do
|
149
|
-
insist { subject.first
|
149
|
+
insist { subject.first.get("http_request_time")['min'] } == 10.0
|
150
150
|
end
|
151
151
|
|
152
152
|
it "should include mean value" do
|
153
|
-
insist { subject.first
|
153
|
+
insist { subject.first.get("http_request_time")['mean'] } == 20.0
|
154
154
|
end
|
155
155
|
|
156
156
|
it "should include stddev value" do
|
157
|
-
insist { subject.first
|
157
|
+
insist { subject.first.get("http_request_time")['stddev'] } == Math.sqrt(10.0)
|
158
158
|
end
|
159
159
|
|
160
160
|
it "should include max value" do
|
161
|
-
insist { subject.first
|
161
|
+
insist { subject.first.get("http_request_time")['max'] } == 30.0
|
162
162
|
end
|
163
163
|
|
164
164
|
it "should include percentile value" do
|
165
|
-
insist { subject.first
|
165
|
+
insist { subject.first.get("http_request_time")['p99'] } == 30.0
|
166
166
|
end
|
167
167
|
end
|
168
168
|
end
|
@@ -183,17 +183,17 @@ describe LogStash::Filters::Metrics do
|
|
183
183
|
|
184
184
|
it "should flush counts" do
|
185
185
|
insist { subject.length } == 1
|
186
|
-
insist { subject.first
|
186
|
+
insist { subject.first.get("http_request_time")["count"] } == 1
|
187
187
|
end
|
188
188
|
|
189
189
|
it "should include only the requested rates" do
|
190
|
-
rate_fields = subject.first
|
190
|
+
rate_fields = subject.first.get("http_request_time").to_hash.keys.select {|field| field.start_with?("rate") }
|
191
191
|
insist { rate_fields.length } == 1
|
192
192
|
insist { rate_fields }.include? "rate_1m"
|
193
193
|
end
|
194
194
|
|
195
195
|
it "should include only the requested percentiles" do
|
196
|
-
percentile_fields = subject.first
|
196
|
+
percentile_fields = subject.first.get("http_request_time").to_hash.keys.select {|field| field.start_with?("p") }
|
197
197
|
insist { percentile_fields.length } == 2
|
198
198
|
insist { percentile_fields }.include? "p1"
|
199
199
|
insist { percentile_fields }.include? "p2"
|
@@ -225,9 +225,9 @@ describe LogStash::Filters::Metrics do
|
|
225
225
|
filter.register
|
226
226
|
filter.filter LogStash::Event.new({"response" => 200})
|
227
227
|
|
228
|
-
insist { filter.flush.first
|
229
|
-
insist { filter.flush.first
|
230
|
-
insist { filter.flush.first
|
228
|
+
insist { filter.flush.first.get("http_200")["count"] } == 1 # 5s
|
229
|
+
insist { filter.flush.first.get("http_200")["count"] } == 1 # 10s
|
230
|
+
insist { filter.flush.first.get("http_200")["count"] } == 1 # 15s
|
231
231
|
insist { filter.flush }.nil? # 20s
|
232
232
|
end
|
233
233
|
end
|
metadata
CHANGED
@@ -1,72 +1,74 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-metrics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: logstash-core-plugin-api
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - "~>"
|
17
18
|
- !ruby/object:Gem::Version
|
18
|
-
version: '
|
19
|
-
name: logstash-core-plugin-api
|
20
|
-
prerelease: false
|
19
|
+
version: '2.0'
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: metriks
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '0'
|
33
|
-
name: metriks
|
34
|
-
prerelease: false
|
35
34
|
type: :runtime
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
+
name: thread_safe
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
43
44
|
requirements:
|
44
45
|
- - ">="
|
45
46
|
- !ruby/object:Gem::Version
|
46
47
|
version: '0'
|
47
|
-
name: thread_safe
|
48
|
-
prerelease: false
|
49
48
|
type: :runtime
|
49
|
+
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
+
name: logstash-devutils
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
59
|
- - ">="
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '0'
|
61
|
-
name: logstash-devutils
|
62
|
-
prerelease: false
|
63
62
|
type: :development
|
63
|
+
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
description: This gem is a
|
69
|
+
description: This gem is a Logstash plugin required to be installed on top of the
|
70
|
+
Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This
|
71
|
+
gem is not a stand-alone program
|
70
72
|
email: info@elastic.co
|
71
73
|
executables: []
|
72
74
|
extensions: []
|
@@ -87,7 +89,7 @@ licenses:
|
|
87
89
|
metadata:
|
88
90
|
logstash_plugin: 'true'
|
89
91
|
logstash_group: filter
|
90
|
-
post_install_message:
|
92
|
+
post_install_message:
|
91
93
|
rdoc_options: []
|
92
94
|
require_paths:
|
93
95
|
- lib
|
@@ -102,9 +104,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
104
|
- !ruby/object:Gem::Version
|
103
105
|
version: '0'
|
104
106
|
requirements: []
|
105
|
-
rubyforge_project:
|
106
|
-
rubygems_version: 2.
|
107
|
-
signing_key:
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.5.1
|
109
|
+
signing_key:
|
108
110
|
specification_version: 4
|
109
111
|
summary: The metrics filter is useful for aggregating metrics.
|
110
112
|
test_files:
|