fluent-plugin-mackerel 0.0.6 → 0.0.7
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 +8 -8
- data/README.md +11 -0
- data/fluent-plugin-mackerel.gemspec +1 -1
- data/lib/fluent/plugin/out_mackerel.rb +18 -4
- data/test/plugin/test_out_mackerel.rb +36 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjlkYmU3MGQ1YTUzNDdmZWYwMDlkMTkwNDk2MGNlY2Y1YjJjNDViMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWY0MDkyMWY3YTg0ODgyNTI1ZTFjMzE2Yjc3YTVhNzhiNGUyMzk5NQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Y2M3MjQ3NDIyNjQxZjFlNjRhMDAyNjViYzI1NmRmMmU5NzdhODBkYzUxN2M5
|
10
|
+
YTBhZTY4MDc4MjhmY2Y2YWM0NWQxZGQyNmU4MGQzOGRhMGMxNzliMTkxOGE4
|
11
|
+
MzQ1N2YzNmNkOWI0NTUzMzVmMDI5ZWRkMWUwNzliNDY2NGI4NzM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzBjZjYxOThmNjhlNzY5NmFjOWNkOTdmYzg0NTY0ZTFiYWI3N2EzZTg2YmVi
|
14
|
+
MDNkYTJjY2IwY2U5NWUyNTk3ZjZhZDIwNTgzZjA3MzJmNGQxMzhhMThjMWUy
|
15
|
+
MzIxMzE0YmFkY2VjZjhhODYxNTZiOGYyMmEwODg2MDBhMGJhNTk=
|
data/README.md
CHANGED
@@ -44,6 +44,17 @@ Then the sent metric data will look like this:
|
|
44
44
|
```
|
45
45
|
As shown above, `${out_key}` will be replaced with out_key like "2xx_count" when sending metrics.
|
46
46
|
|
47
|
+
You can use `out_key_pattern` instead of `out_keys`. Input records whose key matches the pattern set to `out_key_pattern` will be sent. Either `out_keys` or `out_key_pattern` is required.
|
48
|
+
|
49
|
+
```
|
50
|
+
<match ...>
|
51
|
+
type mackerel
|
52
|
+
api_key 123456
|
53
|
+
service yourservice
|
54
|
+
metrics_name http_status.${out_key}
|
55
|
+
out_key_pattern [2-5]xx_count
|
56
|
+
```
|
57
|
+
|
47
58
|
You can use `${[n]}` for `mackerel_name` where `n` represents any decimal number including negative value,
|
48
59
|
|
49
60
|
```
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "fluent-plugin-mackerel"
|
7
|
-
spec.version = "0.0.
|
7
|
+
spec.version = "0.0.7"
|
8
8
|
spec.authors = ["tksmd","hatz48"]
|
9
9
|
spec.email = ["someda@isenshi.com"]
|
10
10
|
spec.description = %q{fluent plugin to send metrics to mackerel.io}
|
@@ -9,7 +9,8 @@ module Fluent
|
|
9
9
|
config_param :hostid_path, :string, :default => nil
|
10
10
|
config_param :service, :string, :default => nil
|
11
11
|
config_param :metrics_name, :string, :default => nil
|
12
|
-
config_param :out_keys, :string
|
12
|
+
config_param :out_keys, :string, :default => nil
|
13
|
+
config_param :out_key_pattern, :string, :default => nil
|
13
14
|
config_param :origin, :string, :default => nil
|
14
15
|
|
15
16
|
attr_reader :mackerel
|
@@ -27,7 +28,16 @@ module Fluent
|
|
27
28
|
super
|
28
29
|
|
29
30
|
@mackerel = Mackerel::Client.new(:mackerel_api_key => conf['api_key'], :mackerel_origin => conf['origin'])
|
30
|
-
|
31
|
+
|
32
|
+
if @out_keys
|
33
|
+
@out_keys = @out_keys.split(',')
|
34
|
+
end
|
35
|
+
if @out_key_pattern
|
36
|
+
@out_key_pattern = Regexp.new(@out_key_pattern)
|
37
|
+
end
|
38
|
+
if @out_keys.nil? and @out_key_pattern.nil?
|
39
|
+
raise Fluent::ConfigError, "Either 'out_keys' or 'out_key_pattern' must be specifed."
|
40
|
+
end
|
31
41
|
|
32
42
|
if @flush_interval < 60
|
33
43
|
log.info("flush_interval less than 60s is not allowed and overwritten to 60s")
|
@@ -89,10 +99,14 @@ module Fluent
|
|
89
99
|
chunk.msgpack_each do |(tag,time,record)|
|
90
100
|
|
91
101
|
tokens = tag.split('.')
|
92
|
-
out_keys.map do |key|
|
93
102
|
|
94
|
-
|
103
|
+
if @out_keys
|
104
|
+
out_keys = @out_keys.select{|key| record.has_key?(key)}
|
105
|
+
else # @out_key_pattern
|
106
|
+
out_keys = record.keys.select{|key| @out_key_pattern.match(key)}
|
107
|
+
end
|
95
108
|
|
109
|
+
out_keys.map do |key|
|
96
110
|
name = @name_processor.nil? ? key :
|
97
111
|
@name_processor.map{ |p| p.call(:out_key => key, :tokens => tokens) }.join('.')
|
98
112
|
|
@@ -46,6 +46,21 @@ class MackerelOutputTest < Test::Unit::TestCase
|
|
46
46
|
origin example.domain
|
47
47
|
]
|
48
48
|
|
49
|
+
CONFIG_NO_OUT_KEYS = %[
|
50
|
+
type mackerel
|
51
|
+
api_key 123456
|
52
|
+
hostid xyz
|
53
|
+
metrics_name service.${out_key}
|
54
|
+
]
|
55
|
+
|
56
|
+
CONFIG_OUT_KEY_PATTERN = %[
|
57
|
+
type mackerel
|
58
|
+
api_key 123456
|
59
|
+
hostid xyz
|
60
|
+
metrics_name service.${out_key}
|
61
|
+
out_key_pattern ^val[0-9]$
|
62
|
+
]
|
63
|
+
|
49
64
|
def create_driver(conf = CONFIG, tag='test')
|
50
65
|
Fluent::Test::BufferedOutputTestDriver.new(Fluent::MackerelOutput, tag).configure(conf)
|
51
66
|
end
|
@@ -64,6 +79,10 @@ class MackerelOutputTest < Test::Unit::TestCase
|
|
64
79
|
d = create_driver(CONFIG_BLANK_METRICS)
|
65
80
|
}
|
66
81
|
|
82
|
+
assert_raise(Fluent::ConfigError) {
|
83
|
+
d = create_driver(CONFIG_NO_OUT_KEYS)
|
84
|
+
}
|
85
|
+
|
67
86
|
d = create_driver(CONFIG_SMALL_FLUSH_INTERVAL)
|
68
87
|
assert_equal d.instance.instance_variable_get(:@flush_interval), 60
|
69
88
|
|
@@ -76,6 +95,10 @@ class MackerelOutputTest < Test::Unit::TestCase
|
|
76
95
|
assert_equal d.instance.instance_variable_get(:@metrics_name), 'service.${out_key}'
|
77
96
|
assert_equal d.instance.instance_variable_get(:@out_keys), ['val1','val2','val3']
|
78
97
|
assert_equal d.instance.instance_variable_get(:@flush_interval), 60
|
98
|
+
|
99
|
+
d = create_driver(CONFIG_OUT_KEY_PATTERN)
|
100
|
+
assert_match d.instance.instance_variable_get(:@out_key_pattern), "val1"
|
101
|
+
assert_no_match d.instance.instance_variable_get(:@out_key_pattern), "foo"
|
79
102
|
end
|
80
103
|
|
81
104
|
def test_write
|
@@ -99,4 +122,17 @@ class MackerelOutputTest < Test::Unit::TestCase
|
|
99
122
|
d.run()
|
100
123
|
end
|
101
124
|
|
125
|
+
def test_write_pattern
|
126
|
+
d = create_driver(CONFIG_OUT_KEY_PATTERN)
|
127
|
+
mock(d.instance.mackerel).post_metrics([
|
128
|
+
{"hostId"=>"xyz", "value"=>1.0, "time"=>1399997498, "name"=>"custom.service.val1"},
|
129
|
+
{"hostId"=>"xyz", "value"=>2.0, "time"=>1399997498, "name"=>"custom.service.val2"},
|
130
|
+
])
|
131
|
+
|
132
|
+
ENV["TZ"]="Asia/Tokyo"
|
133
|
+
t = Time.strptime('2014-05-14 01:11:38', '%Y-%m-%d %T')
|
134
|
+
d.emit({'val1' => 1, 'val2' => 2, 'foo' => 3}, t)
|
135
|
+
d.run()
|
136
|
+
end
|
137
|
+
|
102
138
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-mackerel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tksmd
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-09-
|
12
|
+
date: 2014-09-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mackerel-client
|