logstash-input-snmp 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 213be86518d3d8a674d4227ff23cad9fac2be281fe2d79e9cd6a2e3bc1415b62
4
- data.tar.gz: 1334457e8ebfcd7c979fa5bd53870af0205df9fe0842dd1f7e7d4598b653961b
3
+ metadata.gz: b52920a394a09244f4731933b5d79655002bd3569552ca33972dfd069d709ade
4
+ data.tar.gz: ff663bdff7ca249635388c68329cfcd0ae759893c4eaf27ff226ca59c6939f7f
5
5
  SHA512:
6
- metadata.gz: 5630fc5e10d784ba79700e2f11216b660194e36317e06ba6060f1459f3825719b28514324e212378a69dcc5b257c8efdaba889c6f65093560a2ae7d51f124314
7
- data.tar.gz: 0a888058d97613735f4eb4188963a73e907fa354a7799529153d00c51e58d15a6a232bcc7c0d22eaa8065a3798d3bb48d1f1b5535057e08b4b521647590bac91
6
+ metadata.gz: de641478532900bd27fa9e261b239a0d7f87c2024ee20c59e70dce40a9bb5bbd369a6ec9b4b96c69571afafda62fb49940e458b2174bcf5d852de5e893106ef9
7
+ data.tar.gz: 0c63e9b7f357faba71b6120aeaf5b42adcb399307f630597e0858ef267a071487cbff47c6fe7422dcdf1441f4755182e511d9fe5902a3f4b86162b9bd5dc63c6
@@ -1,5 +1,12 @@
1
+ ## 1.2.0
2
+ - Adding oid_path_length config option [#59] (https://github.com/logstash-plugins/logstash-input-snmp/pull/59)
3
+ - Fixing bug with table support removing index value from OIDs [#60] )https://github.com/logstash-plugins/logstash-input-snmp/issues/60)
4
+
5
+ ## 1.1.1
6
+ - Added information and other improvements to documentation [#57](https://github.com/logstash-plugins/logstash-input-snmp/pull/57)
7
+
1
8
  ## 1.1.0
2
- - Added support for querying SNMP tables
9
+ - Added support for querying SNMP tables [#49] (https://github.com/logstash-plugins/logstash-input-snmp/pull/49)
3
10
  - Changed three error messages in the base_client to include the target address for clarity in the logs.
4
11
 
5
12
  ## 1.0.1
@@ -59,8 +59,10 @@ This plugin supports the following configuration options plus the <<plugins-{typ
59
59
  | <<plugins-{type}s-{plugin}-hosts>> |<<array,array>>|No
60
60
  | <<plugins-{type}s-{plugin}-interval>> |<<number,number>>|No
61
61
  | <<plugins-{type}s-{plugin}-mib_paths>> |<<path,path>>|No
62
- | <<plugins-{type}s-{plugin}-oid_root_skip>> |<<boolean,boolean>>|No
62
+ | <<plugins-{type}s-{plugin}-oid_root_skip>> |<<number,number>>|No
63
+ | <<plugins-{type}s-{plugin}-oid_path_length>> |<<number,number>>|No
63
64
  | <<plugins-{type}s-{plugin}-walk>> |<<array,array>>|No
65
+ | <<plugins-{type}s-{plugin}-tables>> |<<array,array>>|No
64
66
  |=======================================================================
65
67
 
66
68
  ==== SNMPv3 Authentication Options
@@ -168,7 +170,7 @@ If you require other MIBs, you need to import them. See <<plugins-{type}s-{plugi
168
170
  [id="plugins-{type}s-{plugin}-oid_root_skip"]
169
171
  ===== `oid_root_skip`
170
172
 
171
- The `oid_root_skip` option specifies the number of OID root digits to ignore in event field name.
173
+ The `oid_root_skip` option specifies the number of OID root digits to ignore in the event field name.
172
174
  For example, in a numeric OID like "1.3.6.1.2.1.1.1.0" the first 5 digits could be ignored by setting `oid_root_skip => 5`
173
175
  which would result in a field name "1.1.1.0". Similarly when a MIB is used an OID such
174
176
  "1.3.6.1.2.mib-2.system.sysDescr.0" would become "mib-2.system.sysDescr.0"
@@ -176,6 +178,17 @@ which would result in a field name "1.1.1.0". Similarly when a MIB is used an OI
176
178
  * Value type is <<number,number>>
177
179
  * Default value is `0`
178
180
 
181
+ [id="plugins-{type}s-{plugin}-oid_path_length"]
182
+ ===== `oid_path_length`
183
+
184
+ The `oid_path_length` option specifies the number of OID root digits to retain in the event field name.
185
+ For example, in a numeric OID like "1.3.6.1.2.1.1.1.0" the last 2 digits could be retained by setting `oid_path_length => 2`
186
+ which would result in a field name "1.0". Similarly when a MIB is used an OID such
187
+ "1.3.6.1.2.mib-2.system.sysDescr.0" would become "sysDescr.0"
188
+
189
+ * Value type is <<number,number>>
190
+ * Default value is `0`
191
+
179
192
  [id="plugins-{type}s-{plugin}-walk"]
180
193
  ===== `walk`
181
194
 
@@ -197,6 +210,41 @@ Example
197
210
  }
198
211
  -----
199
212
 
213
+ [id="plugins-{type}s-{plugin}-tables"]
214
+ ===== `tables`
215
+
216
+ The `tables` option is used to query for tabular values for the given column OID(s).
217
+
218
+ Each table definition is a hash and must define the name key and value and the columns to return.
219
+
220
+ * Value type is <<array,array>>
221
+ * There is no default value for this setting
222
+ * Results are returned under a field using the table name
223
+
224
+ *Specifying a single table*
225
+
226
+ [source,ruby]
227
+ -----
228
+ input {
229
+ snmp {
230
+ hosts => [{host => "udp:127.0.0.1/161" community => "public" version => "2c" retries => 2 timeout => 1000}]
231
+ tables => [ {"name" => "interfaces" "columns" => ["1.3.6.1.2.1.2.2.1.1", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.5"]} ]
232
+ }
233
+ }
234
+ -----
235
+
236
+ *Specifying multiple tables*
237
+
238
+ [source,ruby]
239
+ -----
240
+ input {
241
+ snmp {
242
+ get => ["1.3.6.1.2.1.1.1.0"]
243
+ tables => [ {"name" => "interfaces" "columns" => ["1.3.6.1.2.1.2.2.1.1", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.5"]}, {"name" => "ltmPoolStatTable" "columns" => ["1.3.6.1.4.1.3375.2.2.5.2.3.1.1", "1.3.6.1.4.1.3375.2.2.5.2.3.1.6"]} ]
244
+ }
245
+ }
246
+ -----
247
+
200
248
  ==== SNMPv3 Authentication Options
201
249
 
202
250
  A **single user** can be configured and will be used for all defined SNMPv3 hosts.
@@ -252,6 +300,25 @@ The `security_level` option specifies the SNMPv3 security level between Authenti
252
300
  * Value can be any of: `noAuthNoPriv`, `authNoPriv`, `authPriv`
253
301
  * There is no default value for this setting
254
302
 
303
+ *Specifying SNMPv3 settings*
304
+
305
+ [source,ruby]
306
+ -----
307
+ input {
308
+ snmp {
309
+ hosts => [{host => "udp:127.0.0.1/161" version => "3"}]
310
+ get => ["1.3.6.1.2.1.1.1.0"]
311
+ security_name => "mySecurityName"
312
+ auth_protocol => "sha"
313
+ auth_pass => "ShaPassword"
314
+ priv_protocol => "aes"
315
+ priv_pass => "AesPasword"
316
+ security_level => "authPriv"
317
+ }
318
+ }
319
+
320
+ -----
321
+
255
322
  ==== More configuration examples
256
323
 
257
324
  *Using both `get` and `walk` in the same poll cycle for each host(s)*
@@ -56,6 +56,12 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
56
56
  # as "1.3.6.1.2.mib-2.system.sysDescr.0" would become "mib-2.system.sysDescr.0"
57
57
  config :oid_root_skip, :validate => :number, :default => 0
58
58
 
59
+ # number of OID tail digits to retain in event field name. For example, in a numeric OID
60
+ # like 1.3.6.1.2.1.1.1.0" the last 2 digits could be retained by setting oid_path_length => 2
61
+ # which would result in a field name "1.0". Similarly, when a MIB is used an OID such as
62
+ # "1.3.6.1.2.mib-2.system.sysDescr.0" would become "sysDescr.0"
63
+ config :oid_path_length, :validate => :number, :default => 0
64
+
59
65
  # Set polling interval in seconds
60
66
  #
61
67
  # The default, `30`, means poll each host every 30 seconds.
@@ -95,6 +101,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
95
101
  validate_oids!
96
102
  validate_hosts!
97
103
  validate_tables!
104
+ validate_strip!
98
105
 
99
106
  mib = LogStash::SnmpMib.new
100
107
 
@@ -161,7 +168,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
161
168
  result = {}
162
169
  if !definition[:get].empty?
163
170
  begin
164
- result = result.merge(definition[:client].get(definition[:get], @oid_root_skip))
171
+ result = result.merge(definition[:client].get(definition[:get], @oid_root_skip, @oid_path_length))
165
172
  rescue => e
166
173
  logger.error("error invoking get operation on #{definition[:host_address]} for OIDs: #{definition[:get]}, ignoring", :exception => e, :backtrace => e.backtrace)
167
174
  end
@@ -169,7 +176,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
169
176
  if !definition[:walk].empty?
170
177
  definition[:walk].each do |oid|
171
178
  begin
172
- result = result.merge(definition[:client].walk(oid, @oid_root_skip))
179
+ result = result.merge(definition[:client].walk(oid, @oid_root_skip, @oid_path_length))
173
180
  rescue => e
174
181
  logger.error("error invoking walk operation on OID: #{oid}, ignoring", :exception => e, :backtrace => e.backtrace)
175
182
  end
@@ -179,7 +186,7 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
179
186
  if !Array(@tables).empty?
180
187
  @tables.each do |table_entry|
181
188
  begin
182
- result = result.merge(definition[:client].table(table_entry, @oid_root_skip))
189
+ result = result.merge(definition[:client].table(table_entry, @oid_root_skip, @oid_path_length))
183
190
  rescue => e
184
191
  logger.error("error invoking table operation on OID: #{table_entry['name']}, ignoring", :exception => e, :backtrace => e.backtrace)
185
192
  end
@@ -277,4 +284,8 @@ class LogStash::Inputs::Snmp < LogStash::Inputs::Base
277
284
  end
278
285
  end
279
286
  end
287
+
288
+ def validate_strip!
289
+ raise(LogStash::ConfigurationError, "you can not specify both oid_root_skip and oid_path_length") if @oid_root_skip > 0 and @oid_path_length > 0
290
+ end
280
291
  end
@@ -45,7 +45,7 @@ module LogStash
45
45
  transport.listen()
46
46
  end
47
47
 
48
- def get(oids, strip_root = 0)
48
+ def get(oids, strip_root = 0, path_length = 0)
49
49
  pdu = get_pdu
50
50
  Array(oids).each { |oid| pdu.add(VariableBinding.new(OID.new(oid))) }
51
51
 
@@ -66,14 +66,14 @@ module LogStash
66
66
  variable = variable_binding.getVariable
67
67
  value = coerce(variable)
68
68
 
69
- result[@mib.map_oid(oid, strip_root)] = value
69
+ result[@mib.map_oid(oid, strip_root, path_length)] = value
70
70
  end
71
71
 
72
72
  result
73
73
  end
74
74
 
75
75
 
76
- def walk(oid, strip_root = 0)
76
+ def walk(oid, strip_root = 0, path_length = 0)
77
77
  result = {}
78
78
 
79
79
  pdufactory = get_pdu_factory
@@ -99,14 +99,14 @@ module LogStash
99
99
  variable = var_binding.getVariable
100
100
  value = coerce(variable)
101
101
 
102
- result[@mib.map_oid(oid, strip_root)] = value
102
+ result[@mib.map_oid(oid, strip_root, path_length)] = value
103
103
  end
104
104
  end
105
105
 
106
106
  result
107
107
  end
108
108
 
109
- def table(table, strip_root = 0)
109
+ def table(table, strip_root = 0, path_length = 0)
110
110
  result = {}
111
111
  rows = []
112
112
  pdufactory = get_pdu_factory
@@ -140,7 +140,7 @@ module LogStash
140
140
  oid = var_binding.getOid.toString
141
141
  variable = var_binding.getVariable
142
142
  value = coerce(variable)
143
- mapped_oid = @mib.map_oid(oid, strip_root).sub('.'+idx_val, '')
143
+ mapped_oid = @mib.map_oid(oid, strip_root, path_length).chomp('.'+idx_val)
144
144
  row[mapped_oid] = value
145
145
  end
146
146
  rows << row
@@ -69,7 +69,7 @@ module LogStash
69
69
  current.childs[last_node] = node
70
70
  end
71
71
 
72
- def map_oid(oid, strip_root = 0)
72
+ def map_oid(oid, strip_root = 0, path_length = 0)
73
73
  path = Oid.parse(oid)
74
74
 
75
75
  result = []
@@ -88,7 +88,13 @@ module LogStash
88
88
  result << node.name
89
89
  end
90
90
 
91
- result.drop(strip_root).join(".")
91
+ if strip_root > 0
92
+ result.drop(strip_root).join(".")
93
+ elsif path_length > 0
94
+ result.pop(path_length).join(".")
95
+ else
96
+ result.join(".")
97
+ end
92
98
  end
93
99
  end
94
100
 
@@ -136,8 +142,8 @@ module LogStash
136
142
  [module_name, nodes]
137
143
  end
138
144
 
139
- def map_oid(oid, strip_root = 0)
140
- @tree.map_oid(oid, strip_root)
145
+ def map_oid(oid, strip_root = 0, path_length = 0)
146
+ @tree.map_oid(oid, strip_root, path_length)
141
147
  end
142
148
 
143
149
  private
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-input-snmp'
3
- s.version = '1.1.0'
3
+ s.version = '1.2.0'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = "SNMP input plugin"
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -22,6 +22,8 @@ describe LogStash::Inputs::Snmp do
22
22
  [
23
23
  {"get" => ["1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
24
24
  {"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
25
+ {"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_root_skip" => 2},
26
+ {"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_path_length" => 2},
25
27
  {"get" => ["1.3.6.1.2.1.1.1.0", "1.3.6.1.2.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
26
28
  {"get" => ["1.3.6.1.2.1.1.1.0", ".1.3.6.1.2.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
27
29
  {"walk" => ["1.3.6.1.2.1.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
@@ -35,6 +37,8 @@ describe LogStash::Inputs::Snmp do
35
37
  {"get" => ["test"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
36
38
  {"get" => [], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
37
39
  {"get" => "foo", "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
40
+ {"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_path_length" => "a" },
41
+ {"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}], "oid_path_length" => 2, "oid_root_skip" => 2 },
38
42
  {"walk" => "foo", "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
39
43
  {"tables" => [{"columns" => ["1.2.3.4", "4.3.2.1"]}], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
40
44
  ]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-snmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elasticsearch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-28 00:00:00.000000000 Z
11
+ date: 2019-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement