adp-fluent-plugin-graphite 0.0.18 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c696abc25c0b8423a39559a766b709b461c53383fe664d317065683db4b8e61c
4
- data.tar.gz: 65dc4925391a451d7c33dd1e57814c2abc471ab80f646991d8aa668bfc858b67
3
+ metadata.gz: 91a11f6d33ffb459b113d744d38951631f6f8a43203799e23163da7350e2c93d
4
+ data.tar.gz: cb51400a9d54217313775338329e73407e40868a0152e0f7452a22d7aa2c0334
5
5
  SHA512:
6
- metadata.gz: 18c4f641033cff5dee5e3841284a14a6eb66859fd307ff9bf7b2ffebaa584c67bdbe38eb18cea2ac76b3b12cfa54acd0d6ffdf9e49d897ba56f8199975df4840
7
- data.tar.gz: 630da8b77e2fea85bc014f7f260d51906596e7de95568a74cb7a23dcf6b92512b57ce3743cd52126d2ee570338fac6e26ff8ccc78c7e7cf776a06988029591f3
6
+ metadata.gz: d2286a09376b57fe11e4f09e44d190f81213a3ed99f54b66c6756e70ebaf570424b1809020ccbf028240a770c5b16b3cc3a1c1287b7d14cf28907fea6b02085d
7
+ data.tar.gz: 71af86c21bf2ce619c21e70d64b599869de200a5164cced81db56d62e9898b8d0e5ace5ce9d44986f4bcbc48894f4e6e591e323369945d635269c777eb3ce4b8
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'adp-fluent-plugin-graphite'
6
- gem.version = '0.0.18'
6
+ gem.version = '0.1.2'
7
7
  gem.authors = ['Aleksander Dudek']
8
8
  gem.email = 'adudek4@gmail.com'
9
9
  gem.homepage = ''
@@ -0,0 +1,30 @@
1
+ require 'fluent/plugin/output'
2
+
3
+ module Fluent::Plugin
4
+ class GraphiteFilter < Fluent::Plugin::Filter
5
+ Fluent::Plugin.register_filter('graphite', self)
6
+ include Fluent::Plugin::Graphite
7
+
8
+ config_param :host, :string
9
+ config_param :port, :integer, default: 2003
10
+ config_param :prefix, :string, default: 'adp-fluentd-agent'
11
+ config_param :monitoring_key, :string
12
+ config_param :max_retries, :integer, default: 3
13
+ config_param :log_level, :string, default: 'info'
14
+
15
+ def start
16
+ super
17
+ init_client(@log_level, @host, @port)
18
+ end
19
+
20
+ def configure(conf)
21
+ super
22
+ end
23
+
24
+ def filter(tag, time, record)
25
+ metrics = format_metrics(tag, record)
26
+ post(metrics, time)
27
+ record
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,75 @@
1
+ module Fluent
2
+ module Plugin
3
+ module Graphite
4
+
5
+ def initialize
6
+ super
7
+ require 'graphite-api'
8
+ log.info("Initialize graphite plugin")
9
+ end
10
+
11
+ def init_logger(log_level)
12
+ if log_level == 'debug'
13
+ GraphiteAPI::Logger.init level: :debug
14
+ end
15
+ if log_level == 'warn'
16
+ GraphiteAPI::Logger.init level: :warn
17
+ end
18
+ if log_level == 'info'
19
+ GraphiteAPI::Logger.init level: :info
20
+ end
21
+ if log_level == 'error'
22
+ GraphiteAPI::Logger.init level: :error
23
+ end
24
+ end
25
+
26
+ def init_client(log_level, host, port)
27
+ options = {
28
+ # Required: valid URI {udp,tcp}://host:port/?timeout=seconds
29
+ graphite: "tcp://#{host}:#{port}",
30
+
31
+ # Optional: results are aggregated in 60 seconds slices ( default is 60 )
32
+ slice: 30,
33
+
34
+ # Optional: send to graphite every 60 seconds ( default is 0 - direct send )
35
+ interval: 30,
36
+
37
+ # Optional: set the max age in seconds for records reanimation ( default is 12 hours )
38
+ cache: 4 * 60 * 60,
39
+ }
40
+ @client = GraphiteAPI.new options
41
+ init_logger(log_level)
42
+ log.info("Starting graphite client")
43
+ end
44
+
45
+ def format_metrics(tag, record)
46
+ metrics = {}
47
+ key = @monitoring_key + "." + @prefix + "." + tag
48
+ metrics[key] = 1
49
+ metrics
50
+ end
51
+
52
+
53
+ def post(metric, time)
54
+ trial ||= 1
55
+ @client.metrics(metric, time)
56
+ rescue Errno::ETIMEDOUT
57
+ # after long periods with nothing emitted, the connection will be closed and result in timeout
58
+ if trial <= @max_retries
59
+ log.warn "out_graphite: connection timeout to #{@host}:#{@port}. Reconnecting... "
60
+ trial += 1
61
+ ::Graphite.init_client(@log_level, @host, @port)
62
+ retry
63
+ else
64
+ log.error "out_graphite: ERROR: connection timeout to #{@host}:#{@port}. Exceeded max_retries #{@max_retries}"
65
+ end
66
+ rescue Errno::ECONNREFUSED
67
+ log.warn "out_graphite: connection refused by #{@host}:#{@port}"
68
+ rescue SocketError => se
69
+ log.warn "out_graphite: socket error by #{@host}:#{@port} :#{se}"
70
+ rescue StandardError => e
71
+ log.error "out_graphite: ERROR: #{e}"
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,38 +1,30 @@
1
+ require 'fluent/plugin/graphite'
1
2
  require 'fluent/plugin/output'
2
3
 
3
4
  module Fluent::Plugin
4
5
  class GraphiteOutput < Fluent::Plugin::Output
5
6
  Fluent::Plugin.register_output('graphite', self)
7
+ include Fluent::Plugin::Graphite
6
8
 
7
9
  config_param :host, :string
8
10
  config_param :port, :integer, default: 2003
9
11
  config_param :prefix, :string, default: 'adp-fluentd-agent'
10
12
  config_param :monitoring_key, :string
11
- config_param :name_key_pattern, :string, default: nil
12
13
  config_param :max_retries, :integer, default: 3
13
-
14
- def initialize
15
- super
16
- require 'graphite-api'
17
- log.info("Initialize graphite plugin")
18
- end
14
+ config_param :log_level, :string, default: 'info'
19
15
 
20
16
  def start
21
17
  super
22
- connect_client!
18
+ init_client(@log_level, @host, @port)
23
19
  end
24
20
 
25
21
  def configure(conf)
26
22
  super
27
- if @name_keys
28
- @name_keys = @name_keys.split(',')
29
- end
30
23
  end
31
24
 
32
25
  def process(tag, es)
33
26
  es.each do |time, record|
34
27
  emit_tag = tag.dup
35
- log.info("Emit graphite plugin: #{record}")
36
28
  metrics = format_metrics(emit_tag, record)
37
29
 
38
30
  # implemented to immediate call post method in this loop, because graphite-api.gem has the buffers.
@@ -41,52 +33,5 @@ module Fluent::Plugin
41
33
 
42
34
  end
43
35
 
44
- def format_metrics(tag, record)
45
- metrics = {}
46
- key = @monitoring_key + "." + @prefix + "." + tag
47
- metrics[key] = 1
48
- metrics
49
- end
50
-
51
- def post(metric, time)
52
- trial ||= 1
53
- @client.metrics(metric, time)
54
- log.warn("Sending metrics: #{metric}")
55
- rescue Errno::ETIMEDOUT
56
- # after long periods with nothing emitted, the connection will be closed and result in timeout
57
- if trial <= @max_retries
58
- log.warn "out_graphite: connection timeout to #{@host}:#{@port}. Reconnecting... "
59
- trial += 1
60
- connect_client!
61
- retry
62
- else
63
- log.error "out_graphite: ERROR: connection timeout to #{@host}:#{@port}. Exceeded max_retries #{@max_retries}"
64
- end
65
- rescue Errno::ECONNREFUSED
66
- log.warn "out_graphite: connection refused by #{@host}:#{@port}"
67
- rescue SocketError => se
68
- log.warn "out_graphite: socket error by #{@host}:#{@port} :#{se}"
69
- rescue StandardError => e
70
- log.error "out_graphite: ERROR: #{e}"
71
- end
72
-
73
- def connect_client!
74
- options = {
75
- # Required: valid URI {udp,tcp}://host:port/?timeout=seconds
76
- graphite: "tcp://#{@host}:#{@port}",
77
-
78
- # Optional: results are aggregated in 60 seconds slices ( default is 60 )
79
- slice: 30,
80
-
81
- # Optional: send to graphite every 60 seconds ( default is 0 - direct send )
82
- interval: 30,
83
-
84
- # Optional: set the max age in seconds for records reanimation ( default is 12 hours )
85
- cache: 4 * 60 * 60,
86
- }
87
- @client = GraphiteAPI.new options
88
- GraphiteAPI::Logger.init level: :debug
89
- log.info("starting client")
90
- end
91
36
  end
92
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adp-fluent-plugin-graphite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksander Dudek
@@ -79,6 +79,8 @@ files:
79
79
  - README.md
80
80
  - Rakefile
81
81
  - adp-fluent-plugin-graphite.gemspec
82
+ - lib/fluent/plugin/filter_graphite.rb
83
+ - lib/fluent/plugin/graphite.rb
82
84
  - lib/fluent/plugin/out_graphite.rb
83
85
  - test/helper.rb
84
86
  - test/plugin/test_out_graphite.rb