newrelic_f5_plugin 1.0.4 → 1.0.6
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.
- data/CHANGES +9 -0
- data/Gemfile +1 -1
- data/lib/newrelic_f5_plugin/agent.rb +61 -338
- data/lib/newrelic_f5_plugin/device.rb +411 -0
- data/lib/newrelic_f5_plugin/nodes.rb +36 -9
- data/lib/newrelic_f5_plugin/pools.rb +35 -81
- data/lib/newrelic_f5_plugin/util.rb +77 -0
- data/lib/newrelic_f5_plugin/virtuals.rb +41 -97
- data/lib/newrelic_f5_plugin.rb +2 -0
- data/newrelic_f5_plugin.gemspec +6 -3
- data/test/nodes_test.rb +72 -0
- data/test/plugin_test.rb +4 -31
- metadata +9 -6
data/CHANGES
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
* 1.0.6
|
2
|
+
- Fix throughput reporting issue caused by the refactor.
|
3
|
+
|
4
|
+
* 1.0.5
|
5
|
+
- Upgrade to newer version of newrelic_plugin
|
6
|
+
- Add proxy support
|
7
|
+
- Improves connectivity to New Relic
|
8
|
+
- Major refactoring, and inclusion of better debug logging
|
9
|
+
|
1
10
|
* 1.0.4
|
2
11
|
- Add Virtual Server CPU usage metric based on the F5's 1 minute CPU ratio
|
3
12
|
|
data/Gemfile
CHANGED
@@ -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.6'
|
8
8
|
|
9
9
|
# Register and run the agent
|
10
10
|
def self.run
|
@@ -44,87 +44,99 @@ module NewRelic::F5Plugin
|
|
44
44
|
# SNMP Stuff here
|
45
45
|
snmp = SNMP::Manager.new(:host => hostname, :port => port, :community => snmp_community)
|
46
46
|
|
47
|
-
report_global_cpu_metrics(snmp)
|
48
|
-
report_global_memory_metrics(snmp)
|
49
|
-
report_global_connection_metrics(snmp)
|
50
|
-
report_global_throughput_metrics(snmp)
|
51
|
-
report_global_http_metrics(snmp)
|
52
|
-
report_global_http_compression_metrics(snmp)
|
53
|
-
report_global_ssl_metrics(snmp)
|
54
|
-
report_global_tcp_metrics(snmp)
|
55
47
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
48
|
+
#
|
49
|
+
# Device wide metrics
|
50
|
+
#
|
51
|
+
system = NewRelic::F5Plugin::Device.new snmp
|
52
|
+
system_cpu = system.get_cpu
|
53
|
+
system_cpu.each_key { |m| report_metric m, "%", system_cpu[m] } unless system_cpu.nil?
|
54
|
+
|
55
|
+
system_memory = system.get_memory
|
56
|
+
system_memory.each_key { |m| report_metric m, "bytes", system_memory[m] } unless system_memory.nil?
|
57
|
+
|
58
|
+
system_connections = system.get_connections
|
59
|
+
system_connections.each_key { |m| report_metric m, "conn", system_connections[m] } unless system_connections.nil?
|
60
|
+
|
61
|
+
system_connection_rates = system.get_connection_rates
|
62
|
+
system_connection_rates.each_key { |m| report_counter_metric m, "conn/sec", system_connection_rates[m] } unless system_connection_rates.nil?
|
63
|
+
|
64
|
+
system_throughput = system.get_throughput
|
65
|
+
system_throughput.each_key { |m| report_counter_metric m, "bits/sec", system_throughput[m] } unless system_throughput.nil?
|
66
|
+
|
67
|
+
system_http_reqs = system.get_http_requests
|
68
|
+
system_http_reqs.each_key { |m| report_counter_metric m, "req/sec", system_http_reqs[m] } unless system_http_reqs.nil?
|
69
|
+
|
70
|
+
system_http_resp = system.get_http_responses
|
71
|
+
system_http_resp.each_key { |m| report_counter_metric m, "resp/sec", system_http_resp[m] } unless system_http_resp.nil?
|
72
|
+
|
73
|
+
system_http_compression = system.get_http_compression
|
74
|
+
system_http_compression.each_key { |m| report_counter_metric m, "bits/sec", system_http_compression[m] } unless system_http_compression.nil?
|
75
|
+
|
76
|
+
system_ssl = system.get_ssl
|
77
|
+
system_ssl.each_key { |m| report_counter_metric m, "trans/sec", system_ssl[m] } unless system_ssl.nil?
|
78
|
+
|
79
|
+
system_tcp_conns = system.get_tcp_connections
|
80
|
+
system_tcp_conns.each_key { |m| report_metric m, "conn", system_tcp_conns[m] } unless system_tcp_conns.nil?
|
81
|
+
|
82
|
+
system_tcp_conn_rates = system.get_tcp_connection_rates
|
83
|
+
system_tcp_conn_rates.each_key { |m| report_counter_metric m, "conn/sec", system_tcp_conn_rates[m] } unless system_tcp_conn_rates.nil?
|
84
|
+
|
85
|
+
#
|
86
|
+
# Node stats
|
87
|
+
#
|
88
|
+
NewRelic::PlatformLogger.debug("Collecting Node stats")
|
89
|
+
nodes = NewRelic::F5Plugin::Nodes.new snmp
|
90
|
+
node_status = nodes.get_status
|
91
|
+
node_status.each_key { |m| report_metric m, node_status[m][:label], node_status[m][:count] } unless node_status.nil?
|
60
92
|
|
61
93
|
#
|
62
94
|
# Collect virtual server statistics
|
63
95
|
#
|
96
|
+
NewRelic::PlatformLogger.debug("Collecting Virtual Server stats")
|
64
97
|
vs = NewRelic::F5Plugin::Virtuals.new snmp
|
65
98
|
virtual_requests = vs.get_requests
|
66
|
-
virtual_requests.each_key { |m|
|
67
|
-
report_counter_metric m, "req/sec", virtual_requests[m]
|
68
|
-
}
|
99
|
+
virtual_requests.each_key { |m| report_counter_metric m, "req/sec", virtual_requests[m] } unless virtual_requests.nil?
|
69
100
|
|
70
101
|
virtual_conns_current = vs.get_conns_current
|
71
|
-
virtual_conns_current.each_key { |m|
|
72
|
-
report_metric m, "conns", virtual_conns_current[m]
|
73
|
-
}
|
102
|
+
virtual_conns_current.each_key { |m| report_metric m, "conns", virtual_conns_current[m] } unless virtual_conns_current.nil?
|
74
103
|
|
75
104
|
virtual_conns_total = vs.get_conns_total
|
76
|
-
virtual_conns_total.each_key { |m|
|
77
|
-
report_counter_metric m, "conn/sec", virtual_conns_total[m]
|
78
|
-
}
|
105
|
+
virtual_conns_total.each_key { |m| report_counter_metric m, "conn/sec", virtual_conns_total[m] } unless virtual_conns_total.nil?
|
79
106
|
|
80
107
|
virtual_throughput_in = vs.get_throughput_in
|
81
|
-
virtual_throughput_in.each_key { |m|
|
82
|
-
report_counter_metric m, "bits/sec", virtual_throughput_in[m]
|
83
|
-
}
|
108
|
+
virtual_throughput_in.each_key { |m| report_counter_metric m, "bits/sec", virtual_throughput_in[m] } unless virtual_throughput_in.nil?
|
84
109
|
|
85
110
|
virtual_throughput_out = vs.get_throughput_out
|
86
|
-
virtual_throughput_out.each_key { |m|
|
87
|
-
report_counter_metric m, "bits/sec", virtual_throughput_out[m]
|
88
|
-
}
|
111
|
+
virtual_throughput_out.each_key { |m| report_counter_metric m, "bits/sec", virtual_throughput_out[m] } unless virtual_throughput_out.nil?
|
89
112
|
|
90
113
|
virtual_cpu_usage_1m = vs.get_cpu_usage_1m
|
91
|
-
virtual_cpu_usage_1m.each_key { |m|
|
92
|
-
report_metric m, "%", virtual_cpu_usage_1m[m]
|
93
|
-
}
|
114
|
+
virtual_cpu_usage_1m.each_key { |m| report_metric m, "%", virtual_cpu_usage_1m[m] } unless virtual_cpu_usage_1m.nil?
|
94
115
|
|
95
116
|
#
|
96
117
|
# Collect pool statistics
|
97
118
|
#
|
119
|
+
NewRelic::PlatformLogger.debug("Collecting Pool stats")
|
98
120
|
pool = NewRelic::F5Plugin::Pools.new snmp
|
99
121
|
pool_requests = pool.get_requests
|
100
|
-
pool_requests.each_key { |m|
|
101
|
-
report_counter_metric m, "req/sec", pool_requests[m]
|
102
|
-
}
|
122
|
+
pool_requests.each_key { |m| report_counter_metric m, "req/sec", pool_requests[m] } unless pool_requests.nil?
|
103
123
|
|
104
124
|
pool_conns_current = pool.get_conns_current
|
105
|
-
pool_conns_current.each_key { |m|
|
106
|
-
report_metric m, "conns", pool_conns_current[m]
|
107
|
-
}
|
125
|
+
pool_conns_current.each_key { |m| report_metric m, "conns", pool_conns_current[m] } unless pool_conns_current.nil?
|
108
126
|
|
109
127
|
pool_conns_total = pool.get_conns_total
|
110
|
-
pool_conns_total.each_key { |m|
|
111
|
-
report_counter_metric m, "conn/sec", pool_conns_total[m]
|
112
|
-
}
|
128
|
+
pool_conns_total.each_key { |m| report_counter_metric m, "conn/sec", pool_conns_total[m] } unless pool_conns_total.nil?
|
113
129
|
|
114
130
|
pool_throughput_in = pool.get_throughput_in
|
115
|
-
pool_throughput_in.each_key { |m|
|
116
|
-
report_counter_metric m, "bits/sec", pool_throughput_in[m]
|
117
|
-
}
|
131
|
+
pool_throughput_in.each_key { |m| report_counter_metric m, "bits/sec", pool_throughput_in[m] } unless pool_throughput_in.nil?
|
118
132
|
|
119
133
|
pool_throughput_out = pool.get_throughput_out
|
120
|
-
pool_throughput_out.each_key { |m|
|
121
|
-
report_counter_metric m, "bits/sec", pool_throughput_out[m]
|
122
|
-
}
|
123
|
-
|
134
|
+
pool_throughput_out.each_key { |m| report_counter_metric m, "bits/sec", pool_throughput_out[m] } unless pool_throughput_out.nil?
|
124
135
|
|
136
|
+
#
|
137
|
+
# Cleanup snmp connection
|
138
|
+
#
|
125
139
|
snmp.close
|
126
|
-
rescue => e
|
127
|
-
$stderr.puts "#{e}: #{e.backtrace.join("\n ")}"
|
128
140
|
end
|
129
141
|
|
130
142
|
|
@@ -149,295 +161,6 @@ module NewRelic::F5Plugin
|
|
149
161
|
report_metric metric, type, @processors[metric].process(value)
|
150
162
|
end
|
151
163
|
|
152
|
-
|
153
|
-
#
|
154
|
-
# Gather CPU Related metrics and report them
|
155
|
-
#
|
156
|
-
def report_global_cpu_metrics(snmp)
|
157
|
-
# Create the OIDs if they do not exist
|
158
|
-
@oid_sysGlobalHostCpuUser1m ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.22.0")
|
159
|
-
@oid_sysGlobalHostCpuNice1m ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.23.0")
|
160
|
-
@oid_sysGlobalHostCpuSystem1m ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.24.0")
|
161
|
-
#@oid_sysGlobalHostCpuIdle1m ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.25.0") # Ignoring the idle time
|
162
|
-
@oid_sysGlobalHostCpuIrq1m ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.26.0")
|
163
|
-
@oid_sysGlobalHostCpuSoftirq1m ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.27.0")
|
164
|
-
@oid_sysGlobalHostCpuIowait1m ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.28.0")
|
165
|
-
@oid_sysGlobalHostCpuCount ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.20.4.0")
|
166
|
-
|
167
|
-
if snmp
|
168
|
-
res = snmp.get_value([@oid_sysGlobalHostCpuCount, @oid_sysGlobalHostCpuUser1m, @oid_sysGlobalHostCpuNice1m,
|
169
|
-
@oid_sysGlobalHostCpuSystem1m, @oid_sysGlobalHostCpuIrq1m, @oid_sysGlobalHostCpuSoftirq1m,
|
170
|
-
@oid_sysGlobalHostCpuIowait1m, ])
|
171
|
-
|
172
|
-
# In order to show the CPU usage as a total percentage, we divide by the number of cpus
|
173
|
-
cpu_count = res[0].to_i
|
174
|
-
vals = res[1..6].map { |i| i.to_f / cpu_count }
|
175
|
-
report_metric "CPU/Global/User", "%", vals[0]
|
176
|
-
report_metric "CPU/Global/Nice", "%", vals[1]
|
177
|
-
report_metric "CPU/Global/System", "%", vals[2]
|
178
|
-
report_metric "CPU/Global/IRQ", "%", vals[3]
|
179
|
-
report_metric "CPU/Global/Soft IRQ", "%", vals[4]
|
180
|
-
report_metric "CPU/Global/IO Wait", "%", vals[5]
|
181
|
-
|
182
|
-
# Add it all up, and send a summary metric
|
183
|
-
report_metric "CPU/Total/Global", "%", vals.inject(0.0){ |a,b| a + b }
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
|
188
|
-
#
|
189
|
-
# Gather Memory related metrics and report them
|
190
|
-
#
|
191
|
-
def report_global_memory_metrics(snmp)
|
192
|
-
# Create the OIDs if they don't exist
|
193
|
-
@oid_sysStatMemoryUsed ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.45.0")
|
194
|
-
@oid_sysHostMemoryUsed ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.7.1.2.0")
|
195
|
-
|
196
|
-
if snmp
|
197
|
-
res = snmp.get_value([@oid_sysStatMemoryUsed, @oid_sysHostMemoryUsed])
|
198
|
-
report_metric "Memory/TMM", "bytes", res[0]
|
199
|
-
report_metric "Memory/Host", "bytes", res[1]
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
|
204
|
-
#
|
205
|
-
# Gather Global connection related metrics and report them
|
206
|
-
#
|
207
|
-
def report_global_connection_metrics(snmp)
|
208
|
-
# Create the OIDs if they don't exist
|
209
|
-
@oid_sysStatClientCurConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.8.0")
|
210
|
-
@oid_sysStatServerCurConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.15.0")
|
211
|
-
@oid_sysStatClientTotConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.7.0")
|
212
|
-
@oid_sysStatServerTotConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.14.0")
|
213
|
-
#@oid_sysStatPvaClientCurConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.22.0")
|
214
|
-
#@oid_sysStatPvaServerCurConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.29.0")
|
215
|
-
# These should be moved to an SSL metric...
|
216
|
-
@oid_sysClientsslStatCurConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.9.2.0")
|
217
|
-
@oid_sysServersslStatCurConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.10.2.0")
|
218
|
-
|
219
|
-
if snmp
|
220
|
-
res = snmp.get_value([@oid_sysStatClientCurConns, @oid_sysStatServerCurConns, @oid_sysStatClientTotConns,
|
221
|
-
@oid_sysStatServerTotConns, @oid_sysClientsslStatCurConns, @oid_sysServersslStatCurConns])
|
222
|
-
report_metric "Connections/Current/Client", "conn", res[0]
|
223
|
-
report_metric "Connections/Current/Server", "conn", res[1]
|
224
|
-
report_counter_metric "Connections/Rate/Client", "conn/sec", res[2]
|
225
|
-
report_counter_metric "Connections/Rate/Server", "conn/sec", res[3]
|
226
|
-
report_metric "Connections/Current/Client SSL", "conn", res[4]
|
227
|
-
report_metric "Connections/Current/Server SSL", "conn", res[5]
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
|
232
|
-
#
|
233
|
-
# Gather Global throughput related metrics and report them
|
234
|
-
#
|
235
|
-
def report_global_throughput_metrics(snmp)
|
236
|
-
# Create the OIDs if they don't exist
|
237
|
-
@oid_sysStatClientBytesIn ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.3.0")
|
238
|
-
@oid_sysStatClientBytesOut ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.5.0")
|
239
|
-
@oid_sysStatServerBytesIn ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.10.0")
|
240
|
-
@oid_sysStatServerBytesOut ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.1.12.0")
|
241
|
-
|
242
|
-
if snmp
|
243
|
-
res = snmp.get_value([@oid_sysStatClientBytesIn, @oid_sysStatClientBytesOut, @oid_sysStatServerBytesIn,
|
244
|
-
@oid_sysStatServerBytesOut])
|
245
|
-
|
246
|
-
report_counter_metric "Throughput/Client/In", "bits/sec", (res[0].to_f * 8)
|
247
|
-
report_counter_metric "Throughput/Client/Out", "bits/sec", (res[1].to_f * 8)
|
248
|
-
report_counter_metric "Throughput/Server/In", "bits/sec", (res[2].to_f * 8)
|
249
|
-
report_counter_metric "Throughput/Server/Out", "bits/sec", (res[3].to_f * 8)
|
250
|
-
tot = 0
|
251
|
-
res.each { |x| tot += x.to_f }
|
252
|
-
report_counter_metric "Throughput/Total", "bits/sec", (tot * 8)
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
|
257
|
-
#
|
258
|
-
# Gather Global HTTP related metrics and report them
|
259
|
-
#
|
260
|
-
def report_global_http_metrics(snmp)
|
261
|
-
# Create the OIDs if they don't exist
|
262
|
-
@oid_sysHttpStatResp2xxCnt ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.3.0")
|
263
|
-
@oid_sysHttpStatResp3xxCnt ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.4.0")
|
264
|
-
@oid_sysHttpStatResp4xxCnt ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.5.0")
|
265
|
-
@oid_sysHttpStatResp5xxCnt ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.6.0")
|
266
|
-
@oid_sysHttpStatNumberReqs ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.7.0")
|
267
|
-
@oid_sysHttpStatGetReqs ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.8.0")
|
268
|
-
@oid_sysHttpStatPostReqs ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.9.0")
|
269
|
-
@oid_sysHttpStatV9Reqs ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.10.0")
|
270
|
-
@oid_sysHttpStatV10Reqs ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.11.0")
|
271
|
-
@oid_sysHttpStatV11Reqs ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.12.0")
|
272
|
-
@oid_sysHttpStatV9Resp ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.13.0")
|
273
|
-
@oid_sysHttpStatV10Resp ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.14.0")
|
274
|
-
@oid_sysHttpStatV11Resp ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.15.0")
|
275
|
-
@oid_sysHttpStatRespBucket1k ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.17.0")
|
276
|
-
@oid_sysHttpStatRespBucket4k ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.18.0")
|
277
|
-
@oid_sysHttpStatRespBucket16k ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.19.0")
|
278
|
-
@oid_sysHttpStatRespBucket32k ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.4.20.0")
|
279
|
-
|
280
|
-
if snmp
|
281
|
-
res = snmp.get_value([@oid_sysHttpStatResp2xxCnt, @oid_sysHttpStatResp3xxCnt, @oid_sysHttpStatResp4xxCnt,
|
282
|
-
@oid_sysHttpStatResp5xxCnt, @oid_sysHttpStatNumberReqs, @oid_sysHttpStatGetReqs,
|
283
|
-
@oid_sysHttpStatPostReqs, @oid_sysHttpStatV9Reqs, @oid_sysHttpStatV10Reqs,
|
284
|
-
@oid_sysHttpStatV11Reqs, @oid_sysHttpStatV9Resp, @oid_sysHttpStatV10Resp,
|
285
|
-
@oid_sysHttpStatV11Resp, @oid_sysHttpStatRespBucket1k, @oid_sysHttpStatRespBucket4k,
|
286
|
-
@oid_sysHttpStatRespBucket16k, @oid_sysHttpStatRespBucket32k, ])
|
287
|
-
|
288
|
-
report_counter_metric "HTTP/Response Code/2xx", "resp/sec", res[0]
|
289
|
-
report_counter_metric "HTTP/Response Code/3xx", "resp/sec", res[1]
|
290
|
-
report_counter_metric "HTTP/Response Code/4xx", "resp/sec", res[2]
|
291
|
-
report_counter_metric "HTTP/Response Code/5xx", "resp/sec", res[3]
|
292
|
-
|
293
|
-
report_counter_metric "HTTP/Method/All", "req/sec", res[4]
|
294
|
-
report_counter_metric "HTTP/Method/Get", "req/sec", res[5]
|
295
|
-
report_counter_metric "HTTP/Method/Post", "req/sec", res[6]
|
296
|
-
report_counter_metric "HTTP/Version/v0.9/Request", "req/sec", res[7]
|
297
|
-
report_counter_metric "HTTP/Version/v1.0/Request", "req/sec", res[8]
|
298
|
-
report_counter_metric "HTTP/Version/v1.1/Request", "req/sec", res[9]
|
299
|
-
report_counter_metric "HTTP/Version/v0.9/Response", "resp/sec", res[10]
|
300
|
-
report_counter_metric "HTTP/Version/v1.0/Response", "resp/sec", res[11]
|
301
|
-
report_counter_metric "HTTP/Version/v1.1/Response", "resp/sec", res[12]
|
302
|
-
|
303
|
-
report_counter_metric "HTTP/Response Size/1k Bucket", "resp/sec", res[13]
|
304
|
-
report_counter_metric "HTTP/Response Size/4k Bucket", "resp/sec", res[14]
|
305
|
-
report_counter_metric "HTTP/Response Size/16k Bucket", "resp/sec", res[15]
|
306
|
-
report_counter_metric "HTTP/Response Size/32k Bucket", "resp/sec", res[16]
|
307
|
-
end
|
308
|
-
end
|
309
|
-
|
310
|
-
|
311
|
-
#
|
312
|
-
# HTTP Compression Stats
|
313
|
-
#
|
314
|
-
def report_global_http_compression_metrics(snmp)
|
315
|
-
@oid_sysHttpCompressionStatPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.2.0")
|
316
|
-
@oid_sysHttpCompressionStatPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.3.0")
|
317
|
-
@oid_sysHttpCompressionStatHtmlPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.5.0")
|
318
|
-
@oid_sysHttpCompressionStatHtmlPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.6.0")
|
319
|
-
@oid_sysHttpCompressionStatCssPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.7.0")
|
320
|
-
@oid_sysHttpCompressionStatCssPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.8.0")
|
321
|
-
@oid_sysHttpCompressionStatJsPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.9.0")
|
322
|
-
@oid_sysHttpCompressionStatJsPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.10.0")
|
323
|
-
@oid_sysHttpCompressionStatXmlPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.11.0")
|
324
|
-
@oid_sysHttpCompressionStatXmlPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.12.0")
|
325
|
-
@oid_sysHttpCompressionStatSgmlPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.13.0")
|
326
|
-
@oid_sysHttpCompressionStatSgmlPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.14.0")
|
327
|
-
@oid_sysHttpCompressionStatPlainPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.15.0")
|
328
|
-
@oid_sysHttpCompressionStatPlainPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.16.0")
|
329
|
-
@oid_sysHttpCompressionStatOctetPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.17.0")
|
330
|
-
@oid_sysHttpCompressionStatOctetPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.18.0")
|
331
|
-
@oid_sysHttpCompressionStatImagePrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.19.0")
|
332
|
-
@oid_sysHttpCompressionStatImagePostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.20.0")
|
333
|
-
@oid_sysHttpCompressionStatVideoPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.21.0")
|
334
|
-
@oid_sysHttpCompressionStatVideoPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.22.0")
|
335
|
-
@oid_sysHttpCompressionStatAudioPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.23.0")
|
336
|
-
@oid_sysHttpCompressionStatAudioPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.24.0")
|
337
|
-
@oid_sysHttpCompressionStatOtherPrecompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.25.0")
|
338
|
-
@oid_sysHttpCompressionStatOtherPostcompressBytes ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.22.26.0")
|
339
|
-
|
340
|
-
if snmp
|
341
|
-
res = snmp.get_value([@oid_sysHttpCompressionStatPrecompressBytes, @oid_sysHttpCompressionStatPostcompressBytes,
|
342
|
-
@oid_sysHttpCompressionStatHtmlPrecompressBytes, @oid_sysHttpCompressionStatHtmlPostcompressBytes,
|
343
|
-
@oid_sysHttpCompressionStatCssPrecompressBytes, @oid_sysHttpCompressionStatCssPostcompressBytes,
|
344
|
-
@oid_sysHttpCompressionStatJsPrecompressBytes, @oid_sysHttpCompressionStatJsPostcompressBytes,
|
345
|
-
@oid_sysHttpCompressionStatXmlPrecompressBytes, @oid_sysHttpCompressionStatXmlPostcompressBytes,
|
346
|
-
@oid_sysHttpCompressionStatSgmlPrecompressBytes, @oid_sysHttpCompressionStatSgmlPostcompressBytes,
|
347
|
-
@oid_sysHttpCompressionStatPlainPrecompressBytes, @oid_sysHttpCompressionStatPlainPostcompressBytes,
|
348
|
-
@oid_sysHttpCompressionStatOctetPrecompressBytes, @oid_sysHttpCompressionStatOctetPostcompressBytes,
|
349
|
-
@oid_sysHttpCompressionStatImagePrecompressBytes, @oid_sysHttpCompressionStatImagePostcompressBytes,
|
350
|
-
@oid_sysHttpCompressionStatVideoPrecompressBytes, @oid_sysHttpCompressionStatVideoPostcompressBytes,
|
351
|
-
@oid_sysHttpCompressionStatAudioPrecompressBytes, @oid_sysHttpCompressionStatAudioPostcompressBytes,
|
352
|
-
@oid_sysHttpCompressionStatOtherPrecompressBytes, @oid_sysHttpCompressionStatOtherPostcompressBytes, ])
|
353
|
-
|
354
|
-
vals = res.map { |i| i.to_f * 8 } # Convert to bits
|
355
|
-
report_counter_metric "HTTP/Compression/Total/Pre", "bits/sec", vals[0]
|
356
|
-
report_counter_metric "HTTP/Compression/Total/Post", "bits/sec", vals[1]
|
357
|
-
report_counter_metric "HTTP/Compression/HTML/Pre", "bits/sec", vals[2]
|
358
|
-
report_counter_metric "HTTP/Compression/HTML/Post", "bits/sec", vals[3]
|
359
|
-
report_counter_metric "HTTP/Compression/CSS/Pre", "bits/sec", vals[4]
|
360
|
-
report_counter_metric "HTTP/Compression/CSS/Post", "bits/sec", vals[5]
|
361
|
-
report_counter_metric "HTTP/Compression/Javascript/Pre", "bits/sec", vals[6]
|
362
|
-
report_counter_metric "HTTP/Compression/Javascript/Post", "bits/sec", vals[7]
|
363
|
-
report_counter_metric "HTTP/Compression/XML/Pre", "bits/sec", vals[8]
|
364
|
-
report_counter_metric "HTTP/Compression/XML/Post", "bits/sec", vals[9]
|
365
|
-
report_counter_metric "HTTP/Compression/SGML/Pre", "bits/sec", vals[10]
|
366
|
-
report_counter_metric "HTTP/Compression/SGML/Post", "bits/sec", vals[11]
|
367
|
-
report_counter_metric "HTTP/Compression/Plain/Pre", "bits/sec", vals[12]
|
368
|
-
report_counter_metric "HTTP/Compression/Plain/Post", "bits/sec", vals[13]
|
369
|
-
report_counter_metric "HTTP/Compression/Octet/Pre", "bits/sec", vals[14]
|
370
|
-
report_counter_metric "HTTP/Compression/Octet/Post", "bits/sec", vals[15]
|
371
|
-
report_counter_metric "HTTP/Compression/Image/Pre", "bits/sec", vals[16]
|
372
|
-
report_counter_metric "HTTP/Compression/Image/Post", "bits/sec", vals[17]
|
373
|
-
report_counter_metric "HTTP/Compression/Video/Pre", "bits/sec", vals[18]
|
374
|
-
report_counter_metric "HTTP/Compression/Video/Post", "bits/sec", vals[19]
|
375
|
-
report_counter_metric "HTTP/Compression/Audio/Pre", "bits/sec", vals[20]
|
376
|
-
report_counter_metric "HTTP/Compression/Audio/Post", "bits/sec", vals[21]
|
377
|
-
report_counter_metric "HTTP/Compression/Other/Pre", "bits/sec", vals[22]
|
378
|
-
report_counter_metric "HTTP/Compression/Other/Post", "bits/sec", vals[23]
|
379
|
-
end
|
380
|
-
end
|
381
|
-
|
382
|
-
#
|
383
|
-
# SSL Stats
|
384
|
-
#
|
385
|
-
def report_global_ssl_metrics(snmp)
|
386
|
-
@oid_sysClientsslStatTotNativeConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.9.6.0")
|
387
|
-
@oid_sysClientsslStatTotCompatConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.9.9.0")
|
388
|
-
@oid_sysServersslStatTotNativeConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.10.6.0")
|
389
|
-
@oid_sysServersslStatTotCompatConns ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.10.9.0")
|
390
|
-
|
391
|
-
if snmp
|
392
|
-
res = snmp.get_value([@oid_sysClientsslStatTotNativeConns, @oid_sysClientsslStatTotCompatConns, @oid_sysServersslStatTotNativeConns,
|
393
|
-
@oid_sysServersslStatTotCompatConns])
|
394
|
-
vals = res.map { |i| i.to_i }
|
395
|
-
report_counter_metric "SSL/Global/Client/Native", "trans/sec", vals[0]
|
396
|
-
report_counter_metric "SSL/Global/Client/Compat", "trans/sec", vals[1]
|
397
|
-
report_counter_metric "SSL/Global/Server/Native", "trans/sec", vals[2]
|
398
|
-
report_counter_metric "SSL/Global/Server/Compat", "trans/sec", vals[3]
|
399
|
-
report_counter_metric "SSL/Global/Total/Client", "trans/sec", (vals[0] + vals[1])
|
400
|
-
report_counter_metric "SSL/Global/Total/Server", "trans/sec", (vals[2] + vals[3])
|
401
|
-
report_counter_metric "SSL/Global/Total/All", "trans/sec", vals.inject(0) { |t,i| t + i }
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
|
406
|
-
#
|
407
|
-
# Gather TCP Statistics and report them
|
408
|
-
#
|
409
|
-
def report_global_tcp_metrics(snmp)
|
410
|
-
# Create the OIDs if they don't exist
|
411
|
-
@oid_sysTcpStatOpen ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.2.0") # "The number of current open connections."
|
412
|
-
@oid_sysTcpStatCloseWait ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.3.0") # "The number of current connections in CLOSE-WAIT/LAST-ACK."
|
413
|
-
@oid_sysTcpStatFinWait ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.4.0") # "The number of current connections in FIN-WAIT/CLOSING."
|
414
|
-
@oid_sysTcpStatTimeWait ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.5.0") # "The number of current connections in TIME-WAIT."
|
415
|
-
@oid_sysTcpStatAccepts ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.6.0") # "The number of connections accepted."
|
416
|
-
# @oid_sysTcpStatAcceptfails ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.7.0") # "The number of connections not accepted."
|
417
|
-
# @oid_sysTcpStatConnects ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.8.0") # "The number of connections established."
|
418
|
-
# @oid_sysTcpStatConnfails ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.9.0") # "The number of connection failures."
|
419
|
-
# @oid_sysTcpStatExpires ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.10.0") # "The number of connections expired due to idle timeout."
|
420
|
-
# @oid_sysTcpStatAbandons ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.11.0") # "The number of connections abandoned connections due to retries/keep-alives."
|
421
|
-
# @oid_sysTcpStatRxrst ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.12.0") # "The number of received RST."
|
422
|
-
# @oid_sysTcpStatRxbadsum ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.13.0") # "The number of bad checksum."
|
423
|
-
# @oid_sysTcpStatRxbadseg ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.14.0") # "The number of malformed segments."
|
424
|
-
# @oid_sysTcpStatRxooseg ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.15.0") # "The number of out of order segments."
|
425
|
-
# @oid_sysTcpStatRxcookie ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.16.0") # "The number of received SYN-cookies."
|
426
|
-
# @oid_sysTcpStatRxbadcookie ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.17.0") # "The number of bad SYN-cookies."
|
427
|
-
# @oid_sysTcpStatSyncacheover ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.18.0") # "The number of SYN-cache overflow."
|
428
|
-
# @oid_sysTcpStatTxrexmits ||= SNMP::ObjectId.new("1.3.6.1.4.1.3375.2.1.1.2.12.19.0") # "The number of retransmitted segments."
|
429
|
-
if snmp
|
430
|
-
res = snmp.get_value([@oid_sysTcpStatOpen, @oid_sysTcpStatCloseWait, @oid_sysTcpStatFinWait,
|
431
|
-
@oid_sysTcpStatTimeWait, @oid_sysTcpStatAccepts, ])
|
432
|
-
|
433
|
-
report_metric "TCP/Connection State/Open", "conn", res[0]
|
434
|
-
report_metric "TCP/Connection State/Wait/Close", "conn", res[1]
|
435
|
-
report_metric "TCP/Connection State/Wait/FIN", "conn", res[2]
|
436
|
-
report_metric "TCP/Connection State/Wait/TIME", "conn", res[3]
|
437
|
-
report_counter_metric "TCP/Accepts", "conn/sec", res[4]
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
164
|
end
|
442
165
|
end
|
443
166
|
|