fluent-plugin-zabbix 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bf49b619e8d3bcfa0f2e1e456964d19d6a557b66
4
+ data.tar.gz: 644a96eb558d5b7abd91bf54711bf75a37f2ad0c
5
+ SHA512:
6
+ metadata.gz: ed4f648a53075202cabc361d164d6b53091e25acbed2a08b6138d5c102376533fee1225a25700ab3c5534bb64bfd46f22856bc44f5f003404e54c83919927997
7
+ data.tar.gz: 9bb6bf01b9fe8b0cd5982890b1b2460e68343841e50abcbb1d7795365a4642a5b5c5f42b1e115d366f867f89edd44793a6bd59a2b04902cebbb0ecaf4f0f2c60
data/README.rdoc CHANGED
@@ -41,6 +41,17 @@ or, use "add_keys_prefix"
41
41
  name_key_pattern ^field
42
42
  </match>
43
43
 
44
+ If you want to specify the host(on zabbix) from record's value, use "host_key" directive.
45
+
46
+ tag:metrics {"zabbix_host":"myhostname", "metrics.field1":300, "metrics.field2":20}
47
+
48
+ <match metrics>
49
+ type zabbix
50
+ zabbix_server 192.168.0.1
51
+ host_key zabbix_host
52
+ name_keys metrics.field1,metrics.field2
53
+ </match>
54
+
44
55
  == TODO
45
56
 
46
57
  - patches welcome!
@@ -13,9 +13,8 @@ Gem::Specification.new do |gem|
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = "fluent-plugin-zabbix"
15
15
  gem.require_paths = ["lib"]
16
- gem.version = "0.0.1"
16
+ gem.version = "0.0.2"
17
17
 
18
- gem.add_development_dependency "fluentd"
19
- gem.add_runtime_dependency "fluentd"
20
- gem.add_runtime_dependency "zabbix"
18
+ gem.add_runtime_dependency "fluentd", "~> 0.10"
19
+ gem.add_runtime_dependency "zabbix", ">= 0.4"
21
20
  end
@@ -10,6 +10,7 @@ class Fluent::ZabbixOutput < Fluent::Output
10
10
  config_param :zabbix_server, :string
11
11
  config_param :port, :integer, :default => 10051
12
12
  config_param :host, :string, :default => Socket.gethostname
13
+ config_param :host_key, :string, :default => nil
13
14
  config_param :name_keys, :string, :default => nil
14
15
  config_param :name_key_pattern, :string, :default => nil
15
16
  config_param :add_key_prefix, :string, :default => nil
@@ -43,45 +44,60 @@ class Fluent::ZabbixOutput < Fluent::Output
43
44
  super
44
45
  end
45
46
 
46
- def send(tag, name, value, time)
47
+ def send(host, tag, name, value, time)
47
48
  if @add_key_prefix
48
49
  name = "#{@add_key_prefix}.#{name}"
49
50
  end
50
51
  begin
51
52
  zbx = Zabbix::Sender.new(:host => @zabbix_server, :port => @port)
52
- $log.debug("zabbix: #{zbx}, #{name}: #{value}, host: #{@host}, ts: #{time}")
53
-
54
- opts = { :host => @host, :ts => time }
53
+ $log.debug("zabbix: #{zbx}, #{name}: #{value}, host: #{host}, ts: #{time}")
54
+ opts = { :host => host, :ts => time }
55
55
  status = zbx.send_data(name, value.to_s, opts)
56
56
 
57
57
  rescue IOError, EOFError, SystemCallError
58
58
  # server didn't respond
59
- $log.warn "Zabbix::Sender.send_data raises exception: #{$!.class}, '#{$!.message}'"
59
+ $log.warn "plugin-zabbix: Zabbix::Sender.send_data raises exception: #{$!.class}, '#{$!.message}'"
60
60
  status = false
61
61
  end
62
62
  unless status
63
- $log.warn "failed to send to zabbix_server: #{@zabbix_server}:#{@port}, host:#{@host} '#{name}': #{value}"
63
+ $log.warn "plugin-zabbix: failed to send to zabbix_server: #{@zabbix_server}:#{@port}, host:#{host} '#{name}': #{value}"
64
64
  end
65
65
  end
66
66
 
67
67
  def emit(tag, es, chain)
68
68
  if @name_keys
69
69
  es.each {|time,record|
70
+ host = gen_host(record)
70
71
  @name_keys.each {|name|
71
72
  if record[name]
72
- send(tag, name, record[name], time)
73
+ send(host, tag, name, record[name], time)
73
74
  end
74
75
  }
75
76
  }
76
77
  else # for name_key_pattern
77
78
  es.each {|time,record|
79
+ host = gen_host(record)
78
80
  record.keys.each {|key|
79
81
  if @name_key_pattern.match(key) and record[key]
80
- send(tag, key, record[key], time)
82
+ send(host, tag, key, record[key], time)
81
83
  end
82
84
  }
83
85
  }
84
86
  end
85
87
  chain.next
86
88
  end
89
+
90
+ def gen_host(record)
91
+ if @host_key
92
+ if record[@host_key]
93
+ host = record[@host_key]
94
+ else
95
+ $log.warn "plugin-zabbix: host_key is configured '#{@host_key}', but this record has no such key. use host '#{@host}'"
96
+ host = @host
97
+ end
98
+ else
99
+ host = @host
100
+ end
101
+ return host
102
+ end
87
103
  end
@@ -7,7 +7,7 @@ class ZabbixOutputTest < Test::Unit::TestCase
7
7
 
8
8
  CONFIG = %[
9
9
  zabbix_server 127.0.0.1
10
- host clienthost
10
+ host test_host
11
11
  add_key_prefix test
12
12
  name_keys foo, bar, baz
13
13
  ]
@@ -17,9 +17,36 @@ class ZabbixOutputTest < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  def test_write
20
- # d = create_driver
21
- # d.emit({"foo" => "test value of foo"})
22
- # d.emit({"bar" => "test value of bar"})
23
- # d.emit({"baz" => rand * 10 })
20
+ d = create_driver
21
+ if ENV['LIVE_TEST']
22
+ d.emit({"foo" => "test value of foo"})
23
+ d.emit({"bar" => "test value of bar"})
24
+ d.emit({"baz" => rand * 10 })
25
+ d.emit({"foo" => "yyy", "zabbix_host" => "alternative-hostname"})
26
+ d.run
27
+ end
24
28
  end
29
+
30
+
31
+ CONFIG_HOST_KEY = %[
32
+ zabbix_server 127.0.0.1
33
+ host test_host
34
+ host_key host
35
+ add_key_prefix test
36
+ name_keys foo, bar, baz
37
+ ]
38
+
39
+ def create_driver_host_key(conf = CONFIG_HOST_KEY, tag='test')
40
+ Fluent::Test::OutputTestDriver.new(Fluent::ZabbixOutput, tag).configure(conf)
41
+ end
42
+
43
+ def test_write_host_key
44
+ d = create_driver_host_key
45
+ if ENV['LIVE_TEST']
46
+ d.emit({"foo" => "AAA" })
47
+ d.emit({"foo" => "BBB", "host" => "alternative-hostname"})
48
+ d.run
49
+ end
50
+ end
51
+
25
52
  end
metadata CHANGED
@@ -1,61 +1,51 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-zabbix
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - FUJIWARA Shunichiro
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
-
13
- date: 2012-04-17 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: fluentd
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
24
- type: :development
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
11
+ date: 2014-01-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
27
14
  name: fluentd
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.10'
20
+ type: :runtime
28
21
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
30
- none: false
31
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: zabbix
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
32
31
  - - ">="
33
- - !ruby/object:Gem::Version
34
- version: "0"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.4'
35
34
  type: :runtime
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: zabbix
39
35
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
43
38
  - - ">="
44
- - !ruby/object:Gem::Version
45
- version: "0"
46
- type: :runtime
47
- version_requirements: *id003
39
+ - !ruby/object:Gem::Version
40
+ version: '0.4'
48
41
  description: Output data plugin to Zabbix
49
- email:
42
+ email:
50
43
  - fujiwara.shunichiro@gmail.com
51
44
  executables: []
52
-
53
45
  extensions: []
54
-
55
46
  extra_rdoc_files: []
56
-
57
- files:
58
- - .gitignore
47
+ files:
48
+ - ".gitignore"
59
49
  - Gemfile
60
50
  - LICENSE
61
51
  - README.rdoc
@@ -66,31 +56,27 @@ files:
66
56
  - test/plugin/test_out_zabbix.rb
67
57
  homepage: https://github.com/fujiwara/fluent-plugin-zabbix
68
58
  licenses: []
69
-
59
+ metadata: {}
70
60
  post_install_message:
71
61
  rdoc_options: []
72
-
73
- require_paths:
62
+ require_paths:
74
63
  - lib
75
- required_ruby_version: !ruby/object:Gem::Requirement
76
- none: false
77
- requirements:
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
78
66
  - - ">="
79
- - !ruby/object:Gem::Version
80
- version: "0"
81
- required_rubygems_version: !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
84
71
  - - ">="
85
- - !ruby/object:Gem::Version
86
- version: "0"
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
87
74
  requirements: []
88
-
89
75
  rubyforge_project:
90
- rubygems_version: 1.8.11
76
+ rubygems_version: 2.2.0
91
77
  signing_key:
92
- specification_version: 3
78
+ specification_version: 4
93
79
  summary: Output data plugin to Zabbix (like zabbix_sender)
94
- test_files:
80
+ test_files:
95
81
  - test/helper.rb
96
82
  - test/plugin/test_out_zabbix.rb