cloudstack-nagios 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cloudstack-nagios (0.3.1)
4
+ cloudstack-nagios (0.4.0)
5
5
  erubis (~> 2.7.0)
6
6
  highline (~> 1.6.20)
7
7
  sshkit (~> 1.1.0)
@@ -4,167 +4,138 @@ class Check < CloudstackNagios::Base
4
4
 
5
5
  RETURN_CODES = {0 => 'ok', 1 => 'warning', 2 => 'critical'}
6
6
 
7
- desc "memory HOST", "check memory on host"
8
- option :host,
7
+ class_option :host,
9
8
  desc: 'hostname or ipaddress',
10
9
  required: true,
11
10
  aliases: '-H'
12
- option :warning,
11
+
12
+ class_option :warning,
13
13
  desc: 'warning level',
14
14
  type: :numeric,
15
15
  default: 90,
16
16
  aliases: '-w'
17
- option :critical,
17
+
18
+ class_option :critical,
18
19
  desc: 'critical level',
19
20
  type: :numeric,
20
21
  default: 95,
21
22
  aliases: '-c'
22
- option :ssh_key,
23
+
24
+ class_option :ssh_key,
23
25
  desc: 'ssh private key to use',
24
26
  default: '/var/lib/cloud/management/.ssh/id_rsa'
25
- option :port,
27
+
28
+ class_option :port,
26
29
  desc: 'ssh port to use',
27
30
  type: :numeric,
28
31
  default: 3922,
29
32
  aliases: '-p'
33
+
34
+ desc "memory HOST", "check memory on host"
30
35
  def memory
31
- host = SSHKit::Host.new("root@#{options[:host]}")
32
- host.ssh_options = sshoptions(options[:ssh_key])
33
- host.port = options[:port]
34
- free_output = ""
35
- on host do |h|
36
- free_output = capture(:free)
36
+ begin
37
+ host = systemvm_host
38
+ free_output = ""
39
+ on host do |h|
40
+ free_output = capture(:free)
41
+ end
42
+ values = free_output.scan(/\d+/)
43
+ total = values[0].to_i
44
+ free = values[2].to_i
45
+ free_b = values[7].to_i
46
+ data = check_data(total, total - free_b, options[:warning], options[:critical])
47
+ puts "MEMORY #{RETURN_CODES[data[0]]} - usage = #{data[1]}% | usage=#{data[1]}% total=#{total}M, free=#{free}M, free_wo_buffers=#{free_b}M"
48
+ exit data[0]
49
+ rescue => e
50
+ exit_with_failure(e)
37
51
  end
38
- values = free_output.scan(/\d+/)
39
- total = values[0].to_i
40
- free = values[2].to_i
41
- free_b = values[7].to_i
42
- data = check_data(total, free_b, options[:warning], options[:critical])
43
- puts "MEMORY #{RETURN_CODES[data[0]]} - usage = #{data[1]}% | usage=#{data[1]}% total=#{total}M, free=#{free}M, free_wo_buffers=#{free_b}M"
44
- exit data[0]
45
52
  end
46
53
 
47
54
  desc "cpu", "check memory on host"
48
- option :host,
49
- desc: 'hostname or ipaddress',
50
- required: true,
51
- aliases: '-H'
52
- option :warning,
53
- desc: 'warning level',
54
- type: :numeric,
55
- default: 90,
56
- aliases: '-w'
57
- option :critical,
58
- desc: 'critical level',
59
- type: :numeric,
60
- default: 95,
61
- aliases: '-c'
62
- option :ssh_key,
63
- desc: 'ssh private key to use',
64
- default: '/var/lib/cloud/management/.ssh/id_rsa'
65
- option :port,
66
- desc: 'ssh port to use',
67
- type: :numeric,
68
- default: 3922,
69
- aliases: '-p'
70
55
  def cpu
71
- host = SSHKit::Host.new("root@#{options[:host]}")
72
- host.ssh_options = sshoptions(options[:ssh_key])
73
- host.port = options[:port]
74
- mpstat_output = ""
75
- on host do |h|
76
- mpstat_output = capture(:mpstat)
56
+ begin
57
+ host = systemvm_host
58
+ mpstat_output = ""
59
+ on host do |h|
60
+ mpstat_output = capture(:mpstat)
61
+ end
62
+ values = mpstat_output.scan(/\d+\.\d+/)
63
+ usage = 100 - values[-1].to_f
64
+ data = check_data(100, usage, options[:warning], options[:critical])
65
+ puts "CPU #{RETURN_CODES[data[0]]} - usage = #{data[1]}% | usage=#{data[1]}%"
66
+ exit data[0]
67
+ rescue => e
68
+ exit_with_failure(e)
77
69
  end
78
- values = mpstat_output.scan(/\d+/)
79
- usage = 100 - values[-1].to_f
80
- data = check_data(100, usage, options[:warning], options[:critical])
81
- puts "CPU #{RETURN_CODES[data[0]]} - usage = #{data[1]}% | usage=#{data[1]}%"
82
- exit data[0]
83
70
  end
84
71
 
85
72
  desc "rootfs_rw", "check if the rootfs is read/writeable on host"
86
- option :host,
87
- desc: 'hostname or ipaddress',
88
- required: true,
89
- aliases: '-H'
90
- option :warning,
91
- desc: 'warning level',
92
- type: :numeric,
93
- default: 90,
94
- aliases: '-w'
95
- option :critical,
96
- desc: 'critical level',
97
- type: :numeric,
98
- default: 95,
99
- aliases: '-c'
100
- option :ssh_key,
101
- desc: 'ssh private key to use',
102
- default: '/var/lib/cloud/management/.ssh/id_rsa'
103
- option :port,
104
- desc: 'ssh port to use',
105
- type: :numeric,
106
- default: 3922,
107
- aliases: '-p'
108
73
  def rootfs_rw
109
- host = SSHKit::Host.new("root@#{options[:host]}")
110
- host.ssh_options = sshoptions(options[:ssh_key])
111
- host.port = options[:port]
112
- proc_out = ""
113
- on host do |h|
114
- proc_out = capture(:cat, '/proc/mounts')
74
+ begin
75
+ host = systemvm_host
76
+ proc_out = ""
77
+ on host do |h|
78
+ proc_out = capture(:cat, '/proc/mounts')
79
+ end
80
+ rootfs_rw = proc_out.match(/rootfs\srw\s/)
81
+ status = rootfs_rw ? 0 : 2
82
+ puts "ROOTFS_RW #{rootfs_rw ? 'OK - rootfs writeable' : 'CRITICAL - rootfs NOT writeable'}"
83
+ exit status
84
+ rescue => e
85
+ exit_with_failure(e)
115
86
  end
116
- rootfs_rw = proc_out.match(/rootfs\srw\s/)
117
- status = rootfs_rw ? 0 : 2
118
- puts "ROOTFS_RW #{rootfs_rw ? 'OK - rootfs writeable' : 'CRITICAL - rootfs NOT writeable'}"
119
- exit status
120
87
  end
121
88
 
122
89
  desc "network", "check network usage on host"
123
- option :host,
124
- desc: 'hostname or ipaddress',
125
- required: true,
126
- aliases: '-H'
127
- option :warning,
128
- desc: 'warning level',
90
+ option :interface,
91
+ desc: 'network interface to probe',
92
+ default: 'eth0',
93
+ aliases: '-i'
94
+ option :if_speed,
95
+ desc: 'network interface speed in bits per second',
129
96
  type: :numeric,
130
- default: 90,
131
- aliases: '-w'
132
- option :critical,
133
- desc: 'critical level',
134
- type: :numeric,
135
- default: 95,
136
- aliases: '-c'
137
- option :ssh_key,
138
- desc: 'ssh private key to use',
139
- default: '/var/lib/cloud/management/.ssh/id_rsa'
140
- option :port,
141
- desc: 'ssh port to use',
142
- type: :numeric,
143
- default: 3922,
144
- aliases: '-p'
97
+ default: 1000000000,
98
+ aliases: '-s'
145
99
  def network
146
- host = SSHKit::Host.new("root@#{options[:host]}")
147
- host.ssh_options = sshoptions(options[:ssh_key])
148
- host.port = options[:port]
149
- r1, t1, r2, t2 = ""
150
- on host do |h|
151
- r1 = capture(:cat, '/sys/class/net/eth0/statistics/rx_bytes').to_f
152
- t1 = capture(:cat, '/sys/class/net/eth0/statistics/tx_bytes').to_f
153
- sleep 1
154
- r2 = capture(:cat, '/sys/class/net/eth0/statistics/rx_bytes').to_f
155
- t2 = capture(:cat, '/sys/class/net/eth0/statistics/tx_bytes').to_f
100
+ begin
101
+ host = systemvm_host
102
+ raise "arggg"
103
+ stats_path = "/sys/class/net/#{options[:interface]}/statistics"
104
+ rx_bytes, tx_bytes = ""
105
+ on host do |h|
106
+ rx_bytes = capture("cat #{stats_path}/rx_bytes;sleep 1;cat #{stats_path}/rx_bytes").lines.to_a
107
+ tx_bytes = capture("cat #{stats_path}/tx_bytes;sleep 1;cat #{stats_path}/tx_bytes").lines.to_a
108
+ end
109
+ rbps = (rx_bytes[1].to_i - rx_bytes[0].to_i) * 8
110
+ tbps = (tx_bytes[1].to_i - tx_bytes[0].to_i) * 8
111
+ data = check_data(options[:if_speed], rbps, options[:warning], options[:critical])
112
+ puts "NETWORK #{RETURN_CODES[data[0]]} - usage = #{data[1]}% | usage=#{data[1]}% rxbps=#{rbps.round(0)}, txbps=#{tbps.round(0)}"
113
+ exit data[0]
114
+ rescue => e
115
+ exit_with_failure(e)
156
116
  end
157
- rbps = (r2 - r1)
158
- tbps = (t2 - t1)
159
- data = check_data(1073741824, (1073741824 - rbps), options[:warning], options[:critical])
160
- puts "NETWORK #{RETURN_CODES[data[0]]} - usage = #{data[1]}% | rxbps=#{rbps.round(0)}B, txbps=#{tbps.round(0)}B"
161
- exit data[0]
162
117
  end
163
118
 
164
119
  no_commands do
165
120
 
121
+ def systemvm_host
122
+ host = SSHKit::Host.new("root@#{options[:host]}")
123
+ host.ssh_options = sshoptions(options[:ssh_key])
124
+ host.port = options[:port]
125
+ host
126
+ end
127
+
128
+ def exit_with_failure(exception)
129
+ say 'ERROR: command execution failed!', :red
130
+ say "Message: ", :magenta
131
+ say exception.message
132
+ say "Backtrace:", :magenta
133
+ say exception.backtrace
134
+ exit 3
135
+ end
136
+
166
137
  def check_data(total, usage, warning, critical)
167
- usage_percent = 100 - 100.0 / total.to_f * usage.to_f
138
+ usage_percent = 100.0 / total.to_f * usage.to_f
168
139
  code = 3
169
140
  if usage_percent < warning
170
141
  code = 0
@@ -55,7 +55,7 @@ class SnmpdConfig < CloudstackNagios::Base
55
55
  upload! File.join(File.dirname(__FILE__), '..', 'files', 'snmpd.conf'), '/etc/snmp/snmpd.conf'
56
56
  execute 'service', 'snmpd', 'restart'
57
57
  execute 'iptables', '-A INPUT -p tcp -m tcp --dport 161 -j ACCEPT'
58
- rescue StandardError => e
58
+ rescue StandardError => e
59
59
  puts 'configuration failed!'
60
60
  puts e.message
61
61
  puts e.backtrace
@@ -16,9 +16,9 @@ define hostgroup {
16
16
  alias Cloudstack-SystemVM
17
17
  register 1
18
18
  }
19
-
20
19
  <% routers.each do |router| -%>
21
20
  <% if router['linklocalip'] -%>
21
+
22
22
  define host {
23
23
  host_name <%= router['name'] %>
24
24
  display_name <%= router['name'] %> (<%= router['linklocalip'] %>)<%= " - #{router['project']}" if router['project'] %> - <%= router['zonename'] %>
@@ -1,3 +1,3 @@
1
1
  module CloudstackNagios
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudstack-nagios
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-07 00:00:00.000000000 Z
12
+ date: 2013-11-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc