newrelic_f5_plugin 1.0.12 → 1.0.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -42,10 +42,10 @@ module NewRelic
42
42
  module F5Plugin
43
43
 
44
44
  class Virtuals
45
- attr_accessor :vs_names, :snmp_manager
46
-
47
- OID_LTM_VIRTUAL_SERVERS = "1.3.6.1.4.1.3375.2.2.10"
45
+ attr_accessor :names, :snmp_manager
48
46
 
47
+ MAX_RESULTS = 150
48
+ OID_LTM_VIRTUAL_SERVERS = "1.3.6.1.4.1.3375.2.2.10"
49
49
  OID_LTM_VIRTUAL_SERV_STAT = "#{OID_LTM_VIRTUAL_SERVERS}.2"
50
50
  OID_LTM_VIRTUAL_SERV_ENTRY = "#{OID_LTM_VIRTUAL_SERV_STAT}.3.1"
51
51
  OID_LTM_VIRTUAL_SERV_STAT_NAME = "#{OID_LTM_VIRTUAL_SERV_ENTRY}.1"
@@ -64,7 +64,8 @@ module NewRelic
64
64
  # Init
65
65
  #
66
66
  def initialize(snmp = nil)
67
- @vs_names = [ ]
67
+ @names = [ ]
68
+ @f5_agent = nil
68
69
 
69
70
  if snmp
70
71
  @snmp_manager = snmp
@@ -75,27 +76,48 @@ module NewRelic
75
76
 
76
77
 
77
78
 
79
+ #
80
+ # Perform polling and reportings of metrics
81
+ #
82
+ def poll(agent, snmp)
83
+ @snmp_manager = snmp
84
+ @f5_agent = agent
85
+
86
+ unless get_names.empty?
87
+ get_requests
88
+ get_conns_current
89
+ get_conns_total
90
+ get_packets_in
91
+ get_packets_out
92
+ get_throughput_in
93
+ get_throughput_out
94
+ get_cpu_usage_1m
95
+ end
96
+ end
97
+
98
+
99
+
78
100
  #
79
101
  # Get the list of Virtual Server names
80
102
  #
81
103
  def get_names(snmp = nil)
82
- snmp = snmp_manager unless snmp
104
+ snmp = @snmp_manager unless snmp
83
105
 
84
106
  if snmp
85
- @vs_names.clear
107
+ @names.clear
86
108
 
87
109
  begin
88
110
  snmp.walk([OID_LTM_VIRTUAL_SERV_STAT_NAME]) do |row|
89
111
  row.each do |vb|
90
- @vs_names.push(vb.value)
112
+ @names.push(vb.value)
91
113
  end
92
114
  end
93
115
  rescue Exception => e
94
116
  NewRelic::PlatformLogger.error("Unable to gather Virtual Server names with error: #{e}")
95
117
  end
96
118
 
97
- NewRelic::PlatformLogger.debug("Virtual Servers: Found #{@vs_names.size} virtual servers")
98
- return @vs_names
119
+ NewRelic::PlatformLogger.debug("Virtual Servers: Found #{@names.size} virtual servers, reporting the top #{MAX_RESULTS} (max)")
120
+ return @names
99
121
  end
100
122
  end
101
123
 
@@ -105,12 +127,26 @@ module NewRelic
105
127
  # Gather VS Total Requests
106
128
  #
107
129
  def get_requests(snmp = nil)
108
- snmp = snmp_manager unless snmp
130
+ @req_rate ||= { }
131
+ report = { }
132
+ snmp = @snmp_manager unless snmp
133
+
134
+ get_names(snmp) if @names.empty?
135
+ res = gather_snmp_metrics_by_name("Virtual Servers/Requests", @names, OID_LTM_VIRTUAL_SERV_STAT_TOT_REQUESTS, snmp)
136
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} Request metrics")
137
+
138
+ unless res.nil?
139
+ res.each_key do |metric|
140
+ @req_rate[metric] ||= NewRelic::Processor::EpochCounter.new
141
+ report[metric] = @req_rate[metric].process(res[metric])
142
+ end
109
143
 
110
- get_names(snmp) if @vs_names.empty?
111
- res = gather_snmp_metrics_by_name("Virtual Servers/Requests", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_TOT_REQUESTS, snmp)
112
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Request metrics")
113
- return res
144
+ sorted_report = report.sort_by { |k,v| v }.reverse
145
+ sorted_report.each_with_index do |row, index|
146
+ @f5_agent.report_metric row[0], "req/sec", row[1]
147
+ break if index >= (MAX_RESULTS - 1)
148
+ end
149
+ end
114
150
  end
115
151
 
116
152
 
@@ -119,12 +155,19 @@ module NewRelic
119
155
  # Gather VS Connection count
120
156
  #
121
157
  def get_conns_current(snmp = nil)
122
- snmp = snmp_manager unless snmp
158
+ snmp = @snmp_manager unless snmp
159
+
160
+ get_names(snmp) if @names.empty?
161
+ res = gather_snmp_metrics_by_name("Virtual Servers/Current Connections", @names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_CUR_CONNS, snmp)
162
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} Current Connection metrics")
123
163
 
124
- get_names(snmp) if @vs_names.empty?
125
- res = gather_snmp_metrics_by_name("Virtual Servers/Current Connections", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_CUR_CONNS, snmp)
126
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Current Connection metrics")
127
- return res
164
+ unless res.nil?
165
+ sorted_report = res.sort_by { |k,v| v }.reverse
166
+ sorted_report.each_with_index do |row, index|
167
+ @f5_agent.report_metric row[0], "conns", row[1]
168
+ break if index >= (MAX_RESULTS - 1)
169
+ end
170
+ end
128
171
  end
129
172
 
130
173
 
@@ -133,12 +176,26 @@ module NewRelic
133
176
  # Gather VS Connection rate
134
177
  #
135
178
  def get_conns_total(snmp = nil)
136
- snmp = snmp_manager unless snmp
179
+ @conn_rate ||= { }
180
+ report = { }
181
+ snmp = @snmp_manager unless snmp
182
+
183
+ get_names(snmp) if @names.empty?
184
+ res = gather_snmp_metrics_by_name("Virtual Servers/Connection Rate", @names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_TOT_CONNS, snmp)
185
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} Connection Rate metrics")
186
+
187
+ unless res.nil?
188
+ res.each_key do |metric|
189
+ @conn_rate[metric] ||= NewRelic::Processor::EpochCounter.new
190
+ report[metric] = @conn_rate[metric].process(res[metric])
191
+ end
137
192
 
138
- get_names(snmp) if @vs_names.empty?
139
- res = gather_snmp_metrics_by_name("Virtual Servers/Connection Rate", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_TOT_CONNS, snmp)
140
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Connection Rate metrics")
141
- return res
193
+ sorted_report = report.sort_by { |k,v| v }.reverse
194
+ sorted_report.each_with_index do |row, index|
195
+ @f5_agent.report_metric row[0], "conn/sec", row[1]
196
+ break if index >= (MAX_RESULTS - 1)
197
+ end
198
+ end
142
199
  end
143
200
 
144
201
 
@@ -147,13 +204,26 @@ module NewRelic
147
204
  # Gather VS Packets Inbound
148
205
  #
149
206
  def get_packets_in (snmp = nil)
150
- snmp = snmp_manager unless snmp
207
+ @packet_in_rate ||= { }
208
+ report = { }
209
+ snmp = @snmp_manager unless snmp
210
+
211
+ get_names(snmp) if @names.empty?
212
+ res = gather_snmp_metrics_by_name("Virtual Servers/Packets/In", @names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_IN, snmp)
213
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} Inbound Packet metrics")
214
+
215
+ unless res.nil?
216
+ res.each_key do |metric|
217
+ @packet_in_rate[metric] ||= NewRelic::Processor::EpochCounter.new
218
+ report[metric] = @packet_in_rate[metric].process(res[metric] * 8)
219
+ end
151
220
 
152
- get_names(snmp) if @vs_names.empty?
153
- res = gather_snmp_metrics_by_name("Virtual Servers/Packets/In", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_IN, snmp)
154
- res = res.each_key { |n| res[n] *= 8 }
155
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Inbound Packet metrics")
156
- return res
221
+ sorted_report = report.sort_by { |k,v| v }.reverse
222
+ sorted_report.each_with_index do |row, index|
223
+ @f5_agent.report_metric row[0], "packets/sec", row[1]
224
+ break if index >= (MAX_RESULTS - 1)
225
+ end
226
+ end
157
227
  end
158
228
 
159
229
 
@@ -162,13 +232,26 @@ module NewRelic
162
232
  # Gather VS Packets Outbound
163
233
  #
164
234
  def get_packets_out(snmp = nil)
165
- snmp = snmp_manager unless snmp
235
+ @packet_out_rate ||= { }
236
+ report = { }
237
+ snmp = @snmp_manager unless snmp
238
+
239
+ get_names(snmp) if @names.empty?
240
+ res = gather_snmp_metrics_by_name("Virtual Servers/Packets/Out", @names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_OUT, snmp)
241
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} Outbound Packet metrics")
242
+
243
+ unless res.nil?
244
+ res.each_key do |metric|
245
+ @packet_out_rate[metric] ||= NewRelic::Processor::EpochCounter.new
246
+ report[metric] = @packet_out_rate[metric].process(res[metric] * 8)
247
+ end
166
248
 
167
- get_names(snmp) if @vs_names.empty?
168
- res = gather_snmp_metrics_by_name("Virtual Servers/Packets/Out", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_PKTS_OUT, snmp)
169
- res = res.each_key { |n| res[n] *= 8 }
170
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Outbound Packet metrics")
171
- return res
249
+ sorted_report = report.sort_by { |k,v| v }.reverse
250
+ sorted_report.each_with_index do |row, index|
251
+ @f5_agent.report_metric row[0], "packets/sec", row[1]
252
+ break if index >= (MAX_RESULTS - 1)
253
+ end
254
+ end
172
255
  end
173
256
 
174
257
 
@@ -177,13 +260,26 @@ module NewRelic
177
260
  # Gather VS Throughput Inbound (returns in bits)
178
261
  #
179
262
  def get_throughput_in(snmp = nil)
180
- snmp = snmp_manager unless snmp
263
+ @throughput_in_rate ||= { }
264
+ report = { }
265
+ snmp = @snmp_manager unless snmp
266
+
267
+ get_names(snmp) if @names.empty?
268
+ res = gather_snmp_metrics_by_name("Virtual Servers/Throughput/In", @names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_BYTES_IN, snmp)
269
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} Inbound Throughput metrics")
270
+
271
+ unless res.nil?
272
+ res.each_key do |metric|
273
+ @throughput_in_rate[metric] ||= NewRelic::Processor::EpochCounter.new
274
+ report[metric] = @throughput_in_rate[metric].process(res[metric] * 8)
275
+ end
181
276
 
182
- get_names(snmp) if @vs_names.empty?
183
- res = gather_snmp_metrics_by_name("Virtual Servers/Throughput/In", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_BYTES_IN, snmp)
184
- res = res.each_key { |n| res[n] *= 8 }
185
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Inbound Throughput metrics")
186
- return res
277
+ sorted_report = report.sort_by { |k,v| v }.reverse
278
+ sorted_report.each_with_index do |row, index|
279
+ @f5_agent.report_metric row[0], "bits/sec", row[1]
280
+ break if index >= (MAX_RESULTS - 1)
281
+ end
282
+ end
187
283
  end
188
284
 
189
285
 
@@ -192,13 +288,26 @@ module NewRelic
192
288
  # Gather VS Throughput Outbound (returns in bits)
193
289
  #
194
290
  def get_throughput_out(snmp = nil)
195
- snmp = snmp_manager unless snmp
291
+ @throughput_out_rate ||= { }
292
+ report = { }
293
+ snmp = @snmp_manager unless snmp
294
+
295
+ get_names(snmp) if @names.empty?
296
+ res = gather_snmp_metrics_by_name("Virtual Servers/Throughput/Out", @names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_BYTES_OUT, snmp)
297
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} Outbound Throughput metrics")
298
+
299
+ unless res.nil?
300
+ res.each_key do |metric|
301
+ @throughput_out_rate[metric] ||= NewRelic::Processor::EpochCounter.new
302
+ report[metric] = @throughput_out_rate[metric].process(res[metric] * 8)
303
+ end
196
304
 
197
- get_names(snmp) if @vs_names.empty?
198
- res = gather_snmp_metrics_by_name("Virtual Servers/Throughput/Out", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_CLIENT_BYTES_OUT, snmp)
199
- res = res.each_key { |n| res[n] *= 8 }
200
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} Outbound Throughput metrics")
201
- return res
305
+ sorted_report = report.sort_by { |k,v| v }.reverse
306
+ sorted_report.each_with_index do |row, index|
307
+ @f5_agent.report_metric row[0], "bits/sec", row[1]
308
+ break if index >= (MAX_RESULTS - 1)
309
+ end
310
+ end
202
311
  end
203
312
 
204
313
 
@@ -207,12 +316,19 @@ module NewRelic
207
316
  # Gather VS Connection rate
208
317
  #
209
318
  def get_cpu_usage_1m(snmp = nil)
210
- snmp = snmp_manager unless snmp
319
+ snmp = @snmp_manager unless snmp
320
+
321
+ get_names(snmp) if @names.empty?
322
+ res = gather_snmp_metrics_by_name("Virtual Servers/CPU Usage/1m", @names, OID_LTM_VIRTUAL_SERV_STAT_VS_USAGE_RATIO_1M, snmp)
323
+ NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@names.size} CPU metrics")
211
324
 
212
- get_names(snmp) if @vs_names.empty?
213
- res = gather_snmp_metrics_by_name("Virtual Servers/CPU Usage/1m", @vs_names, OID_LTM_VIRTUAL_SERV_STAT_VS_USAGE_RATIO_1M, snmp)
214
- NewRelic::PlatformLogger.debug("Virtual Servers: Got #{res.size}/#{@vs_names.size} CPU metrics")
215
- return res
325
+ unless res.nil?
326
+ sorted_report = res.sort_by { |k,v| v }.reverse
327
+ sorted_report.each_with_index do |row, index|
328
+ @f5_agent.report_metric row[0], "%", row[1]
329
+ break if index >= (MAX_RESULTS - 1)
330
+ end
331
+ end
216
332
  end
217
333
 
218
334
  end
@@ -13,9 +13,10 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'newrelic_f5_plugin'
16
- s.version = '1.0.12'
17
- s.date = '2014-02-19'
16
+ s.version = '1.0.15'
17
+ s.date = '2014-07-07'
18
18
  s.rubyforge_project = 'newrelic_f5_plugin'
19
+ s.licenses = ['MIT']
19
20
 
20
21
  ## Make sure your summary is short. The description may be as long
21
22
  ## as you like.
@@ -51,8 +52,8 @@ This is the New Relic plugin for monitoring F5 devices developed by New Relic, I
51
52
  ## The newrelic_plugin needs to be installed. Prior to public release, the
52
53
  # gem needs to be downloaded from git@github.com:newrelic-platform/newrelic_plugin.git
53
54
  # and built using the "rake build" command
54
- s.add_dependency('newrelic_plugin', "~> 1.3.0")
55
- s.add_dependency('snmp', ">= 1.1.0")
55
+ s.add_runtime_dependency('newrelic_plugin', '~> 1.3', '>= 1.3.0')
56
+ s.add_runtime_dependency('snmp', '~> 1.1', '>= 1.1.0')
56
57
 
57
58
  s.post_install_message = <<-EOF
58
59
  To get started with this plugin, create a working directory and do
metadata CHANGED
@@ -1,52 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newrelic_f5_plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.12
5
- prerelease:
4
+ version: 1.0.15
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jonathan Thurman
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-19 00:00:00.000000000 Z
11
+ date: 2014-07-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: newrelic_plugin
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ - - ">="
20
21
  - !ruby/object:Gem::Version
21
22
  version: 1.3.0
22
23
  type: :runtime
23
24
  prerelease: false
24
25
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - - ">="
28
31
  - !ruby/object:Gem::Version
29
32
  version: 1.3.0
30
33
  - !ruby/object:Gem::Dependency
31
34
  name: snmp
32
35
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
36
  requirements:
35
- - - ! '>='
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.1'
40
+ - - ">="
36
41
  - !ruby/object:Gem::Version
37
42
  version: 1.1.0
38
43
  type: :runtime
39
44
  prerelease: false
40
45
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
46
  requirements:
43
- - - ! '>='
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.1'
50
+ - - ">="
44
51
  - !ruby/object:Gem::Version
45
52
  version: 1.1.0
46
- description: ! 'This is the New Relic plugin for monitoring F5 devices developed by
47
- New Relic, Inc.
48
-
49
- '
53
+ description: |
54
+ This is the New Relic plugin for monitoring F5 devices developed by New Relic, Inc.
50
55
  email: support@newrelic.com
51
56
  executables:
52
57
  - f5_monitor
@@ -80,33 +85,30 @@ files:
80
85
  - test/plugin_test.rb
81
86
  - test/test_helper.rb
82
87
  homepage: http://newrelic.com
83
- licenses: []
84
- post_install_message: ! "To get started with this plugin, create a working directory
88
+ licenses:
89
+ - MIT
90
+ metadata: {}
91
+ post_install_message: "To get started with this plugin, create a working directory
85
92
  and do \n f5_monitor -h\nto find out how to install and run the plugin agent.\n"
86
93
  rdoc_options:
87
- - --charset=UTF-8
88
- - --main
94
+ - "--charset=UTF-8"
95
+ - "--main"
89
96
  - README.rdoc
90
97
  require_paths:
91
98
  - lib
92
99
  required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
100
  requirements:
95
- - - ! '>='
101
+ - - ">="
96
102
  - !ruby/object:Gem::Version
97
103
  version: '0'
98
- segments:
99
- - 0
100
- hash: -1376077939883300417
101
104
  required_rubygems_version: !ruby/object:Gem::Requirement
102
- none: false
103
105
  requirements:
104
- - - ! '>='
106
+ - - ">="
105
107
  - !ruby/object:Gem::Version
106
108
  version: '0'
107
109
  requirements: []
108
110
  rubyforge_project: newrelic_f5_plugin
109
- rubygems_version: 1.8.23
111
+ rubygems_version: 2.2.2
110
112
  signing_key:
111
113
  specification_version: 2
112
114
  summary: New Relic F5 plugin