@@ -184,7 +184,15 @@ filter {
184
184
id => "netflow-v9-normalize-bytes-from-in_permanent_bytes"
185
185
rename => { "[netflow][in_permanent_bytes]" => "[netflow][bytes]" }
186
186
}
187
+ } else if [netflow][fwd_flow_delta_bytes] or [netflow][rev_flow_delta_bytes] {
188
+ ruby {
189
+ id => "netflow-v9-normalize-bytes-from-fwd-rev-bytes"
190
+ code => "
191
+ event.set( '[netflow][bytes]', event.get('[netflow][fwd_flow_delta_bytes]').to_i + event.get('[netflow][rev_flow_delta_bytes]').to_i )
192
+ "
193
+ }
187
194
}
195
+
188
196
if [netflow][bytes] {
189
197
mutate {
190
198
id => "netflow-v9-normalize-convert-bytes"
@@ -208,7 +216,15 @@ filter {
208
216
id => "netflow-v9-normalize-packets-from-in_permanent_pkts"
209
217
rename => { "[netflow][in_permanent_pkts]" => "[netflow][packets]" }
210
218
}
219
+ } else if [netflow][initiatorPackets] or [netflow][responderPackets] {
220
+ ruby {
221
+ id => "netflow-v9-normalize-packets-from-init-resp-pkts"
222
+ code => "
223
+ event.set( '[netflow][packets]', event.get('[netflow][initiatorPackets]').to_i + event.get('[netflow][responderPackets]').to_i )
224
+ "
225
+ }
211
226
}
227
+
212
228
if [netflow][packets] {
213
229
mutate {
214
230
id => "netflow-v9-normalize-convert-packets"
@@ -262,6 +278,31 @@ filter {
262
278
}
263
279
}
264
280
281
+ # Attempt to populate netflow.last_switched and netflow.first_switched if not provided in raw data. Usually this is necessary for data from Cisco ASA.
282
+ if ![netflow][last_switched] {
283
+ if [netflow][event_time_msec] {
284
+ date {
285
+ id => "netflow-v9-normalize-lastsw-from-event_time_msec"
286
+ match => ["[netflow][event_time_msec]", "UNIX_MS"]
287
+ target => "[netflow][last_switched]"
288
+ }
289
+ } else {
290
+ mutate {
291
+ id => "netflow-v9-normalize-lastsw-from-timestamp"
292
+ add_field => { "[netflow][last_switched]" => "%{[@timestamp]}" }
293
+ }
294
+ }
295
+ }
296
+ if ![netflow][first_switched] {
297
+ if [netflow][flow_start_msec] {
298
+ date {
299
+ id => "netflow-v9-normalize-firstsw-from-flow_start_msec"
300
+ match => ["[netflow][flow_start_msec]", "UNIX_MS"]
301
+ target => "[netflow][first_switched]"
302
+ }
303
+ }
304
+ }
305
+
265
306
#--------------------
266
307
# We now have a normalized flow record. The rest of the logic works
267
308
# regardless of the Netflow version.
0 commit comments