newrelic_f5_plugin 1.0.16 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/newrelic_f5_plugin.rb +1 -0
- data/lib/newrelic_f5_plugin/agent.rb +6 -1
- data/lib/newrelic_f5_plugin/device.rb +1 -76
- data/lib/newrelic_f5_plugin/platform.rb +169 -0
- data/newrelic_f5_plugin.gemspec +3 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 279793e5c1936f90db19c0ffd8842a0f7dc99760
|
4
|
+
data.tar.gz: ebbbd91dac4e565184e5d45562ff23ad428bdbea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3af625664d8d7c549203c1a03cc7ece47178f0900b0085c8df3c6fff98e9d88e982a6029d987c9388d53f3454becc449d918ad18b90e16a945dfeed1f7f5f46
|
7
|
+
data.tar.gz: 390c1550dce277a0bc2f46458a5fb67215f1c801de7a85a19313a0e727073026ceca796d71e3df4e47955f3c606f597a2b4c045b3074aa32e0d5a329ed065da1
|
data/lib/newrelic_f5_plugin.rb
CHANGED
@@ -4,6 +4,7 @@ require 'newrelic_f5_plugin/client_ssl'
|
|
4
4
|
require 'newrelic_f5_plugin/device'
|
5
5
|
require 'newrelic_f5_plugin/interfaces'
|
6
6
|
require 'newrelic_f5_plugin/nodes'
|
7
|
+
require 'newrelic_f5_plugin/platform'
|
7
8
|
require 'newrelic_f5_plugin/pools'
|
8
9
|
require 'newrelic_f5_plugin/rules'
|
9
10
|
require 'newrelic_f5_plugin/snatpools'
|
@@ -4,7 +4,7 @@ require 'newrelic_plugin'
|
|
4
4
|
require 'snmp'
|
5
5
|
|
6
6
|
module NewRelic::F5Plugin
|
7
|
-
VERSION = '1.0.
|
7
|
+
VERSION = '1.0.17'
|
8
8
|
|
9
9
|
# Register and run the agent
|
10
10
|
def self.run
|
@@ -72,6 +72,11 @@ module NewRelic::F5Plugin
|
|
72
72
|
end
|
73
73
|
|
74
74
|
|
75
|
+
# Platform metrics
|
76
|
+
NewRelic::PlatformLogger.debug("Collecting Platform stats")
|
77
|
+
@platform ||= NewRelic::F5Plugin::Platform.new
|
78
|
+
@platform.poll(self, snmp)
|
79
|
+
|
75
80
|
# Device wide metrics
|
76
81
|
NewRelic::PlatformLogger.debug("Collecting System stats")
|
77
82
|
@system ||= NewRelic::F5Plugin::Device.new
|
@@ -13,16 +13,6 @@ module NewRelic
|
|
13
13
|
OID_SYS_CLIENTSSL_STAT_CUR_CONNS = "1.3.6.1.4.1.3375.2.1.1.2.9.2.0"
|
14
14
|
OID_SYS_CLIENTSSL_STAT_TOT_COMPAT_CONNS = "1.3.6.1.4.1.3375.2.1.1.2.9.9.0"
|
15
15
|
OID_SYS_CLIENTSSL_STAT_TOT_NATIVE_CONNS = "1.3.6.1.4.1.3375.2.1.1.2.9.6.0"
|
16
|
-
OID_SYS_GLOBAL_HOST = "1.3.6.1.4.1.3375.2.1.1.2.20"
|
17
|
-
OID_SYS_GLOBAL_HOST_CPU_COUNT = "#{OID_SYS_GLOBAL_HOST}.4.0"
|
18
|
-
OID_SYS_GLOBAL_HOST_CPU_IDLE_1M = "#{OID_SYS_GLOBAL_HOST}.25.0"
|
19
|
-
OID_SYS_GLOBAL_HOST_CPU_IOWAIT_1M = "#{OID_SYS_GLOBAL_HOST}.28.0"
|
20
|
-
OID_SYS_GLOBAL_HOST_CPU_IRQ_1M = "#{OID_SYS_GLOBAL_HOST}.26.0"
|
21
|
-
OID_SYS_GLOBAL_HOST_CPU_NICE_1M = "#{OID_SYS_GLOBAL_HOST}.23.0"
|
22
|
-
OID_SYS_GLOBAL_HOST_CPU_SOFTIRQ_1M = "#{OID_SYS_GLOBAL_HOST}.27.0"
|
23
|
-
OID_SYS_GLOBAL_HOST_CPU_SYSTEM_1M = "#{OID_SYS_GLOBAL_HOST}.24.0"
|
24
|
-
OID_SYS_GLOBAL_HOST_CPU_USER_1M = "#{OID_SYS_GLOBAL_HOST}.22.0"
|
25
|
-
OID_SYS_HOST_MEMORY_USED = "1.3.6.1.4.1.3375.2.1.7.1.2.0"
|
26
16
|
OID_SYS_HTTP_COMPRESSION_STAT = "1.3.6.1.4.1.3375.2.1.1.2.22"
|
27
17
|
OID_SYS_HTTP_COMPRESSION_STAT_AUDIO_POSTCOMPRESS_BYTES = "#{OID_SYS_HTTP_COMPRESSION_STAT}.24.0"
|
28
18
|
OID_SYS_HTTP_COMPRESSION_STAT_AUDIO_PRECOMPRESS_BYTES = "#{OID_SYS_HTTP_COMPRESSION_STAT}.23.0"
|
@@ -66,11 +56,6 @@ module NewRelic
|
|
66
56
|
OID_SYS_HTTP_STAT_V11_RESP = "#{OID_SYS_HTTP_STAT}.15.0"
|
67
57
|
OID_SYS_HTTP_STAT_V9_REQS = "#{OID_SYS_HTTP_STAT}.10.0"
|
68
58
|
OID_SYS_HTTP_STAT_V9_RESP = "#{OID_SYS_HTTP_STAT}.13.0"
|
69
|
-
OID_SYS_PRODUCT = "1.3.6.1.4.1.3375.2.1.4"
|
70
|
-
OID_SYS_PRODUCT_NAME = "#{OID_SYS_PRODUCT}.1.0"
|
71
|
-
OID_SYS_PRODUCT_VERSION = "#{OID_SYS_PRODUCT}.2.0"
|
72
|
-
OID_SYS_PRODUCT_BUILD = "#{OID_SYS_PRODUCT}.3.0"
|
73
|
-
OID_SYS_PRODUCT_EDITION = "#{OID_SYS_PRODUCT}.4.0"
|
74
59
|
OID_SYS_SERVERSSL_STAT_CUR_CONNS = "1.3.6.1.4.1.3375.2.1.1.2.10.2.0"
|
75
60
|
OID_SYS_SERVERSSL_STAT_TOT_COMPAT_CONNS = "1.3.6.1.4.1.3375.2.1.1.2.10.9.0"
|
76
61
|
OID_SYS_SERVERSSL_STAT_TOT_NATIVE_CONNS = "1.3.6.1.4.1.3375.2.1.1.2.10.6.0"
|
@@ -126,12 +111,6 @@ module NewRelic
|
|
126
111
|
def poll(agent, snmp)
|
127
112
|
@snmp_manager = snmp
|
128
113
|
|
129
|
-
system_version = get_version
|
130
|
-
NewRelic::PlatformLogger.debug("Found F5 device with version: #{system_version}")
|
131
|
-
|
132
|
-
system_cpu = get_cpu
|
133
|
-
system_cpu.each_key { |m| agent.report_metric m, "%", system_cpu[m] } unless system_cpu.nil?
|
134
|
-
|
135
114
|
system_memory = get_memory
|
136
115
|
system_memory.each_key { |m| agent.report_metric m, "bytes", system_memory[m] } unless system_memory.nil?
|
137
116
|
|
@@ -174,59 +153,6 @@ module NewRelic
|
|
174
153
|
|
175
154
|
|
176
155
|
|
177
|
-
#
|
178
|
-
# Gather Version information
|
179
|
-
#
|
180
|
-
def get_version(snmp = nil)
|
181
|
-
version = "Unknown!"
|
182
|
-
snmp = snmp_manager unless snmp
|
183
|
-
|
184
|
-
if snmp
|
185
|
-
res = gather_snmp_metrics_array([OID_SYS_PRODUCT_VERSION, OID_SYS_PRODUCT_BUILD], snmp)
|
186
|
-
|
187
|
-
version = "#{res[0]}.#{res[1]}" unless res.empty?
|
188
|
-
end
|
189
|
-
|
190
|
-
return version
|
191
|
-
end
|
192
|
-
|
193
|
-
|
194
|
-
#
|
195
|
-
# Gather CPU Related metrics and report them in %
|
196
|
-
#
|
197
|
-
def get_cpu(snmp = nil)
|
198
|
-
metrics = { }
|
199
|
-
snmp = snmp_manager unless snmp
|
200
|
-
|
201
|
-
if snmp
|
202
|
-
res = gather_snmp_metrics_array([OID_SYS_GLOBAL_HOST_CPU_COUNT, OID_SYS_GLOBAL_HOST_CPU_USER_1M, OID_SYS_GLOBAL_HOST_CPU_NICE_1M,
|
203
|
-
OID_SYS_GLOBAL_HOST_CPU_SYSTEM_1M, OID_SYS_GLOBAL_HOST_CPU_IRQ_1M, OID_SYS_GLOBAL_HOST_CPU_SOFTIRQ_1M,
|
204
|
-
OID_SYS_GLOBAL_HOST_CPU_IOWAIT_1M],
|
205
|
-
snmp)
|
206
|
-
|
207
|
-
# Bail out if we didn't get anything
|
208
|
-
return metrics if res.empty?
|
209
|
-
|
210
|
-
# In order to show the CPU usage as a total percentage, we divide by the number of cpus
|
211
|
-
cpu_count = res[0].to_i
|
212
|
-
vals = res[1..6].map { |i| i.to_f / cpu_count }
|
213
|
-
|
214
|
-
metrics["CPU/Global/User"] = vals[0]
|
215
|
-
metrics["CPU/Global/Nice"] = vals[1]
|
216
|
-
metrics["CPU/Global/System"] = vals[2]
|
217
|
-
metrics["CPU/Global/IRQ"] = vals[3]
|
218
|
-
metrics["CPU/Global/Soft IRQ"] = vals[4]
|
219
|
-
metrics["CPU/Global/IO Wait"] = vals[5]
|
220
|
-
|
221
|
-
# Add it all up, and send a summary metric
|
222
|
-
metrics["CPU/Total/Global"] = vals.inject(0.0){ |a,b| a + b }
|
223
|
-
|
224
|
-
end
|
225
|
-
|
226
|
-
return metrics
|
227
|
-
end
|
228
|
-
|
229
|
-
|
230
156
|
#
|
231
157
|
# Gather Memory related metrics and report them in bytes
|
232
158
|
#
|
@@ -235,13 +161,12 @@ module NewRelic
|
|
235
161
|
snmp = snmp_manager unless snmp
|
236
162
|
|
237
163
|
if snmp
|
238
|
-
res = gather_snmp_metrics_array([OID_SYS_STAT_MEMORY_USED
|
164
|
+
res = gather_snmp_metrics_array([OID_SYS_STAT_MEMORY_USED], snmp)
|
239
165
|
|
240
166
|
# Bail out if we didn't get anything
|
241
167
|
return metrics if res.empty?
|
242
168
|
|
243
169
|
metrics["Memory/TMM"] = res[0]
|
244
|
-
metrics["Memory/Host"] = res[1]
|
245
170
|
end
|
246
171
|
|
247
172
|
return metrics
|
@@ -0,0 +1,169 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'newrelic_plugin'
|
4
|
+
require 'snmp'
|
5
|
+
|
6
|
+
module NewRelic
|
7
|
+
module F5Plugin
|
8
|
+
|
9
|
+
class Platform
|
10
|
+
attr_accessor :snmp_manager
|
11
|
+
|
12
|
+
# Create the OIDs if they do not exist
|
13
|
+
OID_SYS_GLOBAL_HOST = "1.3.6.1.4.1.3375.2.1.1.2.20"
|
14
|
+
OID_SYS_GLOBAL_HOST_CPU_COUNT = "#{OID_SYS_GLOBAL_HOST}.4.0"
|
15
|
+
OID_SYS_GLOBAL_HOST_CPU_IDLE_1M = "#{OID_SYS_GLOBAL_HOST}.25.0"
|
16
|
+
OID_SYS_GLOBAL_HOST_CPU_IOWAIT_1M = "#{OID_SYS_GLOBAL_HOST}.28.0"
|
17
|
+
OID_SYS_GLOBAL_HOST_CPU_IRQ_1M = "#{OID_SYS_GLOBAL_HOST}.26.0"
|
18
|
+
OID_SYS_GLOBAL_HOST_CPU_NICE_1M = "#{OID_SYS_GLOBAL_HOST}.23.0"
|
19
|
+
OID_SYS_GLOBAL_HOST_CPU_SOFTIRQ_1M = "#{OID_SYS_GLOBAL_HOST}.27.0"
|
20
|
+
OID_SYS_GLOBAL_HOST_CPU_SYSTEM_1M = "#{OID_SYS_GLOBAL_HOST}.24.0"
|
21
|
+
OID_SYS_GLOBAL_HOST_CPU_USER_1M = "#{OID_SYS_GLOBAL_HOST}.22.0"
|
22
|
+
OID_SYS_HOST_MEMORY_USED = "1.3.6.1.4.1.3375.2.1.7.1.2.0"
|
23
|
+
|
24
|
+
OID_SYS_PLATFORM = "1.3.6.1.4.1.3375.2.1.3"
|
25
|
+
OID_SYS_PLATFORM_INFO = "#{OID_SYS_PLATFORM}.5"
|
26
|
+
OID_SYS_PLATFORM_INFO_NAME = "#{OID_SYS_PLATFORM_INFO}.1.0"
|
27
|
+
OID_SYS_PLATFORM_INFO_MARKETING_NAME = "#{OID_SYS_PLATFORM_INFO}.2.0"
|
28
|
+
|
29
|
+
OID_SYS_PRODUCT = "1.3.6.1.4.1.3375.2.1.4"
|
30
|
+
OID_SYS_PRODUCT_NAME = "#{OID_SYS_PRODUCT}.1.0"
|
31
|
+
OID_SYS_PRODUCT_VERSION = "#{OID_SYS_PRODUCT}.2.0"
|
32
|
+
OID_SYS_PRODUCT_BUILD = "#{OID_SYS_PRODUCT}.3.0"
|
33
|
+
OID_SYS_PRODUCT_EDITION = "#{OID_SYS_PRODUCT}.4.0"
|
34
|
+
|
35
|
+
#
|
36
|
+
# Init
|
37
|
+
#
|
38
|
+
def initialize(snmp = nil)
|
39
|
+
@version = 'Unknown!'
|
40
|
+
|
41
|
+
if snmp
|
42
|
+
@snmp_manager = snmp
|
43
|
+
else
|
44
|
+
@snmp_manager = nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
#
|
51
|
+
# Perform polling and reportings of metrics
|
52
|
+
#
|
53
|
+
def poll(agent, snmp)
|
54
|
+
@snmp_manager = snmp
|
55
|
+
|
56
|
+
system_platform = get_platform_info
|
57
|
+
@version = get_version
|
58
|
+
NewRelic::PlatformLogger.debug("Found a #{system_platform} running version #{@version}")
|
59
|
+
|
60
|
+
|
61
|
+
system_cpu = get_cpu
|
62
|
+
system_cpu.each_key { |m| agent.report_metric m, "%", system_cpu[m] } unless system_cpu.nil?
|
63
|
+
|
64
|
+
system_memory = get_memory
|
65
|
+
system_memory.each_key { |m| agent.report_metric m, "bytes", system_memory[m] } unless system_memory.nil?
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
#
|
72
|
+
# Gather Version information
|
73
|
+
#
|
74
|
+
def get_version(snmp = nil)
|
75
|
+
version = "Unknown!"
|
76
|
+
snmp = snmp_manager unless snmp
|
77
|
+
|
78
|
+
if snmp
|
79
|
+
res = gather_snmp_metrics_array([OID_SYS_PRODUCT_VERSION, OID_SYS_PRODUCT_BUILD], snmp)
|
80
|
+
|
81
|
+
version = "#{res[0]}.#{res[1]}" unless res.empty?
|
82
|
+
end
|
83
|
+
|
84
|
+
return version
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
def get_platform_info(snmp = nil)
|
90
|
+
platform = "Unknown!"
|
91
|
+
snmp = snmp_manager unless snmp
|
92
|
+
|
93
|
+
if snmp
|
94
|
+
res = gather_snmp_metrics_array([OID_SYS_PLATFORM_INFO_MARKETING_NAME, OID_SYS_PLATFORM_INFO_NAME], snmp)
|
95
|
+
|
96
|
+
platform = "#{res[0]} (#{res[1]})"
|
97
|
+
end
|
98
|
+
|
99
|
+
return platform
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
#
|
105
|
+
# Gather CPU Related metrics and report them in %
|
106
|
+
#
|
107
|
+
def get_cpu(snmp = nil)
|
108
|
+
metrics = { }
|
109
|
+
snmp = snmp_manager unless snmp
|
110
|
+
|
111
|
+
if snmp
|
112
|
+
res = gather_snmp_metrics_array([OID_SYS_GLOBAL_HOST_CPU_COUNT, OID_SYS_GLOBAL_HOST_CPU_USER_1M, OID_SYS_GLOBAL_HOST_CPU_NICE_1M,
|
113
|
+
OID_SYS_GLOBAL_HOST_CPU_SYSTEM_1M, OID_SYS_GLOBAL_HOST_CPU_IRQ_1M, OID_SYS_GLOBAL_HOST_CPU_SOFTIRQ_1M,
|
114
|
+
OID_SYS_GLOBAL_HOST_CPU_IOWAIT_1M],
|
115
|
+
snmp)
|
116
|
+
|
117
|
+
# Bail out if we didn't get anything
|
118
|
+
return metrics if res.empty?
|
119
|
+
|
120
|
+
# In order to show the CPU usage as a total percentage, we divide by the number of cpus for older versions
|
121
|
+
case @version
|
122
|
+
when /^11\.4\.1/
|
123
|
+
# 11.4.1 HF3 reports average CPU not total, so don't divide by CPU count
|
124
|
+
cpu_count = 1
|
125
|
+
else
|
126
|
+
cpu_count = res[0].to_i
|
127
|
+
end
|
128
|
+
|
129
|
+
vals = res[1..6].map { |i| i.to_f / cpu_count }
|
130
|
+
|
131
|
+
metrics["CPU/Global/User"] = vals[0]
|
132
|
+
metrics["CPU/Global/Nice"] = vals[1]
|
133
|
+
metrics["CPU/Global/System"] = vals[2]
|
134
|
+
metrics["CPU/Global/IRQ"] = vals[3]
|
135
|
+
metrics["CPU/Global/Soft IRQ"] = vals[4]
|
136
|
+
metrics["CPU/Global/IO Wait"] = vals[5]
|
137
|
+
|
138
|
+
# Add it all up, and send a summary metric
|
139
|
+
metrics["CPU/Total/Global"] = vals.inject(0.0){ |a,b| a + b }
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
return metrics
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
#
|
148
|
+
# Gather Memory related metrics and report them in bytes
|
149
|
+
#
|
150
|
+
def get_memory(snmp = nil)
|
151
|
+
metrics = { }
|
152
|
+
snmp = snmp_manager unless snmp
|
153
|
+
|
154
|
+
if snmp
|
155
|
+
res = gather_snmp_metrics_array([OID_SYS_HOST_MEMORY_USED], snmp)
|
156
|
+
|
157
|
+
# Bail out if we didn't get anything
|
158
|
+
return metrics if res.empty?
|
159
|
+
|
160
|
+
metrics["Memory/Host"] = res[0]
|
161
|
+
end
|
162
|
+
|
163
|
+
return metrics
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
data/newrelic_f5_plugin.gemspec
CHANGED
@@ -13,8 +13,8 @@ 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.
|
17
|
-
s.date = '2014-08
|
16
|
+
s.version = '1.0.17'
|
17
|
+
s.date = '2014-10-08'
|
18
18
|
s.rubyforge_project = 'newrelic_f5_plugin'
|
19
19
|
s.licenses = ['MIT']
|
20
20
|
|
@@ -80,6 +80,7 @@ to find out how to install and run the plugin agent.
|
|
80
80
|
lib/newrelic_f5_plugin/device.rb
|
81
81
|
lib/newrelic_f5_plugin/interfaces.rb
|
82
82
|
lib/newrelic_f5_plugin/nodes.rb
|
83
|
+
lib/newrelic_f5_plugin/platform.rb
|
83
84
|
lib/newrelic_f5_plugin/pools.rb
|
84
85
|
lib/newrelic_f5_plugin/rules.rb
|
85
86
|
lib/newrelic_f5_plugin/snatpools.rb
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newrelic_f5_plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Thurman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08
|
11
|
+
date: 2014-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: newrelic_plugin
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- lib/newrelic_f5_plugin/device.rb
|
76
76
|
- lib/newrelic_f5_plugin/interfaces.rb
|
77
77
|
- lib/newrelic_f5_plugin/nodes.rb
|
78
|
+
- lib/newrelic_f5_plugin/platform.rb
|
78
79
|
- lib/newrelic_f5_plugin/pools.rb
|
79
80
|
- lib/newrelic_f5_plugin/rules.rb
|
80
81
|
- lib/newrelic_f5_plugin/snatpools.rb
|