README.md in fluent-plugin-netflow-0.2.0 vs README.md in fluent-plugin-netflow-0.2.1
- old
+ new
@@ -1,32 +1,120 @@
# Netflow plugin for Fluentd
-Accept Netflow logs.
+[![Build Status](https://travis-ci.org/repeatedly/fluent-plugin-netflow.svg)](https://travis-ci.org/repeatedly/fluent-plugin-netflow)
-Netflow parser is based on [Logstash's netflow codes](https://github.com/elasticsearch/logstash/blob/master/lib/logstash/codecs/netflow.rb).
+## Overview
+
+[Fluentd](http://fluentd.org/) input plugin that acts as Netflow v5/v9 collector.
+
+
## Installation
Use RubyGems:
fluent-gem install fluent-plugin-netflow
+
## Configuration
<source>
type netflow
tag netflow.event
# optional parameters
- bind 127.0.0.1
- port 5140
-
- # optional parser parameters
+ bind 192.168.0.1
+ port 2055
cache_ttl 6000
versions [5, 9]
</source>
+**bind**
+
+IP address on which the plugin will accept Netflow.
+(Default: '0.0.0.0')
+
+**port**
+
+UDP port number on which tpe plugin will accept Netflow.
+(Default: 5140)
+
+**cache_ttl**
+
+Template cache TTL for Netflow v9 in seconds. Templates not refreshed from the Netflow v9 exporter within the TTL are expired at the plugin.
+(Default: 4000)
+
+**versions**
+
+Netflow versions which are acceptable.
+(Default:[5, 9])
+
+**switched_times_from_uptime**
+
+When set to true, the plugin stores system uptime for ```first_switched``` and ```last_switched``` instead of ISO8601-formatted absolute time.
+(Defaults: false)
+
+
+## Performance Evaluation
+
+Benchmark for v5 protocol on Macbook Air (Early 2014, 1.7 GHz Intel Core i7):
+* 0 packets dropped in 32,000 records/second (for 3,000,000 packets)
+* 45,000 records/second in maximum (for flooding netflow packets)
+
+Tested with the packet generator below:
+
+* https://github.com/mshindo/NetFlow-Generator
+* `./flowgen -n3000000 -i50 -w1 -p5140 localhost`
+
+And configuration:
+
+ <source>
+ @type netflow
+ tag netflow.event
+ bind 0.0.0.0
+ port 5140
+ switched_times_from_uptime yes
+ </source>
+ <match netflow.event>
+ @type flowcounter
+ unit minute
+ count_keys count # missing column for counting events only
+ tag flowcount
+ </match>
+ <match flowcount>
+ @type stdout
+ </match>
+
+
+## Tips
+
+### Use netflow parser in other plugins
+
+```ruby
+require 'fluent/plugin/parser_netflow'
+
+parser = TextParser::NetflowParser.new
+parser.configure(conf)
+
+# Netflow v5
+parser.call(payload) do |time, record|
+ # do something
+end
+
+# Netflow v9
+parser.call(payload, source_ip_address) do |time, record|
+ # do something
+end
+```
+
+**NOTE:**
+If the plugin receives Netflow v9 from multiple sources, provide ```source_ip_address``` argument to parse correctly.
+
+### More speed ?
+
+:bullettrain_side: Try ```switched_times_from_uptime true``` option !
+
+
## TODO
-- Support TCP protocol? TCP is needed?
-- Use Fluentd feature instead of own handlers
-- Need another maintainer who uses Netflow in production!
+* Netflow v9 protocol parser optimization
+* Use Fluentd feature instead of own handlers