adp-fluent-plugin-graphite 0.0.16 → 0.1.0

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: bdc659c05139601bebe60bb78d620f621f325eb1b6d7818b4d3cda32507b8f6b
4
- data.tar.gz: b08bf8c9d21ea555b1ff54f0bb5fc474ef8957e8661f0a9aa6305ddfc5e7efd4
3
+ metadata.gz: dcb0b99995de71b515fd3b5934589d95af6cfdbdbca9ccac9ac6ac349720d02c
4
+ data.tar.gz: 384393b27c068712191daeb631a16fb5c7f9ef641bad7f8e396ce7733283569f
5
5
  SHA512:
6
- metadata.gz: 864cd915362d2c9911bacf8f7b65b6fa5b465dbaee05a17f89d7cc19280e55575726101a3a78d893d06fdae7597ac9e6db38d73e3196981ee66390e7c942767c
7
- data.tar.gz: 43681aace2378bb5c7969eccf0c7d6567c3dc6ed2bd272be4ad24b9a0841f66aca3781c167d0b0c3968cb891254b68302122ffc25f316b46185f12c82642557c
6
+ metadata.gz: ad9e87463588d24c7fcad9b90d54993aecf05269284c3e3b740f66d038e96c9e28468de7ee58cdc0d73455fd7762203eaa1e416f2e60416e1ecd1ee9b542b559
7
+ data.tar.gz: 4a58e1b33b50e3c38de527a6a97c7e5a649b5a77955a9c4783054db6f1aaa10c26703428078f9acf5082546a980ed156ca702bfcfff3bcd9b7fc6ef58c6cc9d7
@@ -3,10 +3,10 @@ $:.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.16'
7
- gem.authors = ['Satoshi SUZUKI']
8
- gem.email = 'studio3104.com@gmail.com'
9
- gem.homepage = 'https://github.com/studio3104/fluent-plugin-graphite'
6
+ gem.version = '0.1.0'
7
+ gem.authors = ['Aleksander Dudek']
8
+ gem.email = 'adudek4@gmail.com'
9
+ gem.homepage = ''
10
10
  gem.description = 'fluentd output plugin to send metrics to graphite'
11
11
  gem.summary = gem.description
12
12
  gem.licenses = ['MIT']
@@ -0,0 +1,28 @@
1
+ require 'fluent/plugin/output'
2
+
3
+ module Fluent::Plugin
4
+ class GraphiteFilter < Fluent::Plugin::Filter
5
+ Fluent::Plugin.register_filter('graphite', self)
6
+ config_param :host, :string
7
+ config_param :port, :integer, default: 2003
8
+ config_param :prefix, :string, default: 'adp-fluentd-agent'
9
+ config_param :monitoring_key, :string
10
+ config_param :max_retries, :integer, default: 3
11
+ config_param :log_level, :string, default: 'info'
12
+
13
+ def start
14
+ super
15
+ ::Graphite.init_client(@log_level, @host, @port)
16
+ end
17
+
18
+ def configure(conf)
19
+ super
20
+ end
21
+
22
+ def filter(tag, time, record)
23
+ metrics = ::Graphite.format_metrics(tag, record)
24
+ ::Graphite.post(metrics, time)
25
+ record
26
+ end
27
+ end
28
+ 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,95 +1,37 @@
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
- config_param :tag_for, :string, default: 'prefix'
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
+ ::Graphite.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
- metrics = format_metrics(emit_tag, record)
28
+ metrics = ::Graphite.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.
39
- post(metrics, time)
31
+ ::Graphite.post(metrics, time)
40
32
  end
41
33
 
42
34
  end
43
35
 
44
- def format_metrics(tag, record)
45
- metrics = {}
46
- metrics[@monitoring_key + "." + tag] = 1
47
- metrics
48
- end
49
-
50
- def post(metric, time)
51
- trial ||= 1
52
- @client.metrics(metric, time)
53
- log.warn("Sending metrics: #{metric}")
54
- rescue Errno::ETIMEDOUT
55
- # after long periods with nothing emitted, the connection will be closed and result in timeout
56
- if trial <= @max_retries
57
- log.warn "out_graphite: connection timeout to #{@host}:#{@port}. Reconnecting... "
58
- trial += 1
59
- connect_client!
60
- retry
61
- else
62
- log.error "out_graphite: ERROR: connection timeout to #{@host}:#{@port}. Exceeded max_retries #{@max_retries}"
63
- end
64
- rescue Errno::ECONNREFUSED
65
- log.warn "out_graphite: connection refused by #{@host}:#{@port}"
66
- rescue SocketError => se
67
- log.warn "out_graphite: socket error by #{@host}:#{@port} :#{se}"
68
- rescue StandardError => e
69
- log.error "out_graphite: ERROR: #{e}"
70
- end
71
-
72
- def connect_client!
73
- options = {
74
- # Required: valid URI {udp,tcp}://host:port/?timeout=seconds
75
- graphite: "tcp://#{@host}:#{@port}",
76
-
77
- # Optional: results are aggregated in 60 seconds slices ( default is 60 )
78
- slice: 60,
79
-
80
- # Optional: send to graphite every 60 seconds ( default is 0 - direct send )
81
- interval: 30,
82
-
83
- # Optional: set the max age in seconds for records reanimation ( default is 12 hours )
84
- cache: 4 * 60 * 60,
85
-
86
- # Optional: The default aggregation method for multiple reports in the same slice (default is :sum).
87
- # Possible options: :sum, :avg, :replace
88
- default_aggregation_method: :avg
89
- }
90
- @client = GraphiteAPI.new options
91
- GraphiteAPI::Logger.init level: :debug
92
- log.info("starting client")
93
- end
94
36
  end
95
37
  end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adp-fluent-plugin-graphite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Satoshi SUZUKI
7
+ - Aleksander Dudek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: 3.2.0
69
69
  description: fluentd output plugin to send metrics to graphite
70
- email: studio3104.com@gmail.com
70
+ email: adudek4@gmail.com
71
71
  executables: []
72
72
  extensions: []
73
73
  extra_rdoc_files: []
@@ -79,10 +79,12 @@ 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
85
- homepage: https://github.com/studio3104/fluent-plugin-graphite
87
+ homepage: ''
86
88
  licenses:
87
89
  - MIT
88
90
  metadata: {}