Skip to content

Commit ef2beb5

Browse files
authored
Merge pull request #116 from kellybyrd/default_to_tlv
Default to TLV instead of JSON.
2 parents cebcaaf + 2641424 commit ef2beb5

File tree

5 files changed

+38
-29
lines changed

5 files changed

+38
-29
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
PROJECT_VERSION := 0.1.0
1+
PROJECT_VERSION := 0.1.1
22
DOCKER_REPO := synfinatic
33
PROJECT_NAME := netflow2ng
44

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ Hence, I created netflow2ng.
3535

3636
### Configuration
3737

38-
1. For a list of configuration arguments, run `netflow2ng -h` Note from `ntopng` v6.4 onwards you must use `--tlv`.
38+
1. For a list of configuration arguments, run `netflow2ng -h`. As of v0.1.1, netflow2ng
39+
defaults to the ntopng TLV format instead of JSON. If you want to use JSON, you must
40+
use it with `ntopng` v6.3 or earlier.
3941
1. Configure your network device(s) to send NetFlow stats to netflow2ng
4042
1. Configure your [ntopng](https://www.ntop.org/products/traffic-analysis/ntop/)
4143
service to read from netflow2ng: `ntopng -i tcp://192.168.1.1:5556` where

cmd/netflow2ng.go

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,21 @@ func (a *Address) Value() (string, int) {
7373
}
7474

7575
type CLI struct {
76-
Listen Address `kong:"short='a',help='NetFlow/IPFIX listen address:port',default='0.0.0.0:2055'"`
77-
Reuse bool `kong:"help='Enable SO_REUSEPORT for NetFlow/IPFIX listen port'"`
78-
79-
Metrics Address `kong:"short='m',help='Metrics listen address',default='0.0.0.0:8080'"`
80-
81-
ListenZmq string `kong:"short='z',help='proto://IP:Port to listen on for ZMQ connections',default='tcp://*:5556'"`
82-
Topic string `kong:"help='ZMQ Topic',default='flow'"`
83-
SourceId SourceId `kong:"help='NetFlow SourceId (0-255)',default=0"`
84-
Compress bool `kong:"help='Compress ZMQ JSON data',xor='zmq-data'"`
85-
Protobuf bool `kong:"help='Use ProtoBuff instead of JSQN for ZMQ',xor='zmq-data'"`
86-
TLV bool `kong:"help='Use TLV instead of JSQN for ZMQ (needed for ntopng 6.4 and later)',xor='zmq-data'"`
87-
88-
Workers int `kong:"short='w',help='Number of NetFlow workers',default=2"`
89-
LogLevel string `kong:"short='l',help='Log level [error|warn|info|debug|trace]',default='info',enum='error,warn,info,debug,trace'"`
90-
LogFormat string `kong:"short='f',help='Log format [default|json]',default='default',enum='default,json'"`
91-
Version bool `kong:"short='v',help='Print version and copyright info'"`
76+
Listen Address `short:"a" help:"NetFlow/IPFIX listen address:port" default:"0.0.0.0:2055"`
77+
Reuse bool `help:"Enable SO_REUSEPORT for NetFlow/IPFIX listen port"`
78+
79+
Metrics Address `short:"m" help:"Metrics listen address" default:"0.0.0.0:8080"`
80+
81+
ListenZmq string `short:"z" help:"proto://IP:Port to listen on for ZMQ connections" default:"tcp://*:5556"`
82+
Topic string `help:"ZMQ Topic" default:"flow"`
83+
SourceId SourceId `help:"NetFlow SourceId (0-255)" default:"0"`
84+
Format string `short:"f" help:"Output format [tlv|json|jcompress|proto] for ZMQ." enum:"tlv,json,jcompress,proto" default:"tlv"`
85+
Workers int `short:"w" help:"Number of NetFlow workers" default:"2"`
86+
87+
LogLevel string `short:"l" help:"Log level [error|warn|info|debug|trace]" default:"info" enum:"error,warn,info,debug,trace"`
88+
LogFormat string `help:"Log format [default|json]" default:"default" enum:"default,json"`
89+
90+
Version bool `short:"v" help:"Print version and copyright info"`
9291
}
9392

9493
func LoadMappingYaml() (*protoproducer.ProducerConfig, error) {
@@ -139,25 +138,33 @@ func main() {
139138
var msgType localtransport.MsgFormat
140139
var formatter *format.Format
141140

142-
if rctx.cli.Protobuf {
143-
msgType = localtransport.PBUF
144-
log.Fatal("Protobuf not yet supported with goflow2")
145-
} else if rctx.cli.TLV {
141+
compress := false // For now, only compressing JSON.
142+
143+
switch rctx.cli.Format {
144+
case "tlv":
146145
msgType = localtransport.TLV
147146
formatter, err = format.FindFormat("ntoptlv")
148147
log.Info("Using ntopng TLV format for ZMQ")
149-
} else {
148+
case "protobuf":
149+
msgType = localtransport.PBUF
150+
log.Fatal("Protobuf not yet supported with goflow2")
151+
case "jcompress":
152+
compress = true
153+
log.Info("Using ntopng compressed JSON format for ZMQ")
154+
fallthrough
155+
case "json":
150156
msgType = localtransport.JSON
151157
formatter, err = format.FindFormat("ntopjson")
152158
log.Info("Using ntopng JSON format for ZMQ")
159+
default:
160+
log.Fatal("Unknown output format")
153161
}
154162

155163
if err != nil {
156-
log.Error("Avail formatters:", format.GetFormats())
157-
log.Fatal("error formatter", err)
164+
log.Fatal("Avail formatters:", format.GetFormats(), err)
158165
}
159166

160-
localtransport.RegisterZmq(rctx.cli.ListenZmq, msgType, int(rctx.cli.SourceId), rctx.cli.Compress)
167+
localtransport.RegisterZmq(rctx.cli.ListenZmq, msgType, int(rctx.cli.SourceId), compress)
161168

162169
transporter, err := transport.FindTransport("zmq")
163170
if err != nil {

docker-compose.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ services:
22
netflow2ng:
33
container_name: netflow2ng
44
restart: unless-stopped
5-
image: synfinatic/netflow2ng:v0.0.6
6-
entrypoint: /netflow2ng --tlv # --level=debug
5+
image: synfinatic/netflow2ng:v0.1.1
6+
entrypoint: /netflow2ng # --level=debug
77
ports:
88
- 5556:5556/tcp
99
- 8080:8080/tcp

package/netflow2ng.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
NETFLOW2NG_ARGS="-zmq.compress"
1+
NETFLOW2NG_ARGS=""

0 commit comments

Comments
 (0)