fluent-plugin-sflow 0.2.1 → 0.3.0
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.
- checksums.yaml +4 -4
- data/README.md +8 -8
- data/ext/sflowtool/sflowtool.c +1 -1
- data/fluent-plugin-sflow.gemspec +2 -2
- data/lib/fluent/plugin/in_sflow.rb +9 -47
- data/lib/fluent/plugin/parser_sflow.rb +4 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0447a8846e6a71d5994fcf1c284e510b01991853
|
4
|
+
data.tar.gz: 8541fea3c74f3ebbe2c00fcb9b7867f702b228d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af658e53d271282c0e1b8a11525c82ad6744a1cb5e424b2e99444346fa5dca2943b8203242e502dd5cc92a9ac8cb2288006fc0436afb4f88d11f94ee67ae96b9
|
7
|
+
data.tar.gz: c790adea5b9e909c371e9e86cf41a6cc044e42a3fef203d44bc3f99edca004356cb57b06151f5e5729cad3af497df7b5081d01a2738eb8c492b04b91cdbffe72
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# fluent-plugin-sflow
|
2
2
|
|
3
|
-
[](https://travis-ci.org/codeout/fluent-plugin-sflow)
|
4
4
|
|
5
|
-
## This branch is valid only for Fluentd 0.
|
5
|
+
## This branch is valid only for Fluentd 0.14.x
|
6
6
|
|
7
|
-
See [0.
|
7
|
+
See [0.12.x branch](https://github.com/codeout/fluent-plugin-sflow) for Fluentd 0.12.x.
|
8
8
|
|
9
9
|
## Overview
|
10
10
|
|
@@ -103,13 +103,13 @@ See [sflowtool document](http://www.inmon.com/technology/sflowTools.php) for mor
|
|
103
103
|
|
104
104
|
## Requirement
|
105
105
|
|
106
|
-
* Fluentd: 0.
|
107
|
-
* See [0.
|
106
|
+
* Fluentd: 0.14.x
|
107
|
+
* See [0.12.x](https://github.com/codeout/fluent-plugin-sflow) branch for Fluentd 0.12.x.
|
108
108
|
|
109
109
|
## Install
|
110
110
|
|
111
111
|
``` shell
|
112
|
-
$ gem install fluent-plugin-sflow
|
112
|
+
$ gem install fluent-plugin-sflow
|
113
113
|
```
|
114
114
|
|
115
115
|
You can also use ```fluent-gem``` or ```td-agent-gem``` instead of ```gem``` command.
|
@@ -248,8 +248,8 @@ UDP port number on which this plugin will accept sFlow.
|
|
248
248
|
Here is a quick benchmark on Macbook Pro Mid 2015:
|
249
249
|
|
250
250
|
* sFlow v5 flow samples, 5.88 samples per packet in average
|
251
|
-
* Fluentd v0.
|
252
|
-
*
|
251
|
+
* Fluentd v0.14.17
|
252
|
+
* 13161 sFlow v5 records/s
|
253
253
|
|
254
254
|
|
255
255
|
## TODO
|
data/ext/sflowtool/sflowtool.c
CHANGED
@@ -2500,7 +2500,7 @@ static void readExtendedTCPInfo(SFSample *sample)
|
|
2500
2500
|
case PKTDIR_sent: direction = "sent"; break;
|
2501
2501
|
default: direction = "<bad value>"; break;
|
2502
2502
|
}
|
2503
|
-
sf_log(sample, "
|
2503
|
+
sf_log(sample, "tcpinfo_direction\":\"%s\",", direction);
|
2504
2504
|
sf_log_next32(sample, "tcpinfo_send_mss");
|
2505
2505
|
sf_log_next32(sample, "tcpinfo_receive_mss");
|
2506
2506
|
sf_log_next32(sample, "tcpinfo_unacked_pkts");
|
data/fluent-plugin-sflow.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "fluent-plugin-sflow"
|
7
|
-
spec.version = "0.
|
7
|
+
spec.version = "0.3.0"
|
8
8
|
spec.authors = ["Shintaro Kojima"]
|
9
9
|
spec.email = ["goodies@codeout.net"]
|
10
10
|
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
spec.extensions = ["ext/sflowtool/extconf.rb"]
|
22
22
|
|
23
|
-
spec.add_dependency "fluentd", "~>
|
23
|
+
spec.add_dependency "fluentd", "~>0.14.0"
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.12"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "rake-compiler", "~> 1.0"
|
@@ -1,10 +1,12 @@
|
|
1
|
-
require '
|
1
|
+
require 'fluent/plugin/input'
|
2
2
|
require 'fluent/plugin/parser_sflow'
|
3
3
|
|
4
4
|
|
5
|
-
module Fluent
|
5
|
+
module Fluent::Plugin
|
6
6
|
class SflowInput < Input
|
7
|
-
Plugin.register_input('sflow', self)
|
7
|
+
Fluent::Plugin.register_input('sflow', self)
|
8
|
+
|
9
|
+
helpers :server
|
8
10
|
|
9
11
|
config_param :bind, :string, default: '0.0.0.0'
|
10
12
|
config_param :port, :integer, default: 6343
|
@@ -14,31 +16,14 @@ module Fluent
|
|
14
16
|
|
15
17
|
def configure(conf)
|
16
18
|
super
|
17
|
-
@parser = Fluent::
|
19
|
+
@parser = Fluent::Plugin::SflowParser.new
|
18
20
|
end
|
19
21
|
|
20
22
|
def start
|
21
23
|
super
|
22
|
-
@
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@thread = Thread.new(&method(:run))
|
27
|
-
end
|
28
|
-
|
29
|
-
def shutdown
|
30
|
-
@loop.watchers.each {|w| w.detach }
|
31
|
-
@loop.stop
|
32
|
-
@handler.close
|
33
|
-
@thread.join
|
34
|
-
super
|
35
|
-
end
|
36
|
-
|
37
|
-
def run
|
38
|
-
@loop.run
|
39
|
-
rescue
|
40
|
-
log.error 'unexpected error', error_class: $!.class, error: $!.message
|
41
|
-
log.error_backtrace
|
24
|
+
server_create(:in_sflow_server, @port, proto: :udp, bind: @bind, max_bytes: @max_bytes) do |data, sock|
|
25
|
+
receive(data, sock.remote_host)
|
26
|
+
end
|
42
27
|
end
|
43
28
|
|
44
29
|
|
@@ -61,28 +46,5 @@ module Fluent
|
|
61
46
|
log.warn 'Unexpected error on parsing',
|
62
47
|
raw: raw, exporter: exporter, error_class: $!.class, error: $!.message
|
63
48
|
end
|
64
|
-
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def listen(callback)
|
69
|
-
log.info "listening sflow socket on #{@bind}:#{@port}"
|
70
|
-
@sock = SocketUtil.create_udp_socket(@bind)
|
71
|
-
@sock.bind @bind, @port
|
72
|
-
UdpHandler.new @sock, callback
|
73
|
-
end
|
74
|
-
|
75
|
-
class UdpHandler < Coolio::IO
|
76
|
-
def initialize(io, callback)
|
77
|
-
super io
|
78
|
-
@io = io
|
79
|
-
@callback = callback
|
80
|
-
end
|
81
|
-
|
82
|
-
def on_readable
|
83
|
-
msg, addr = @io.recvfrom_nonblock(4096)
|
84
|
-
@callback.call msg, addr[3]
|
85
|
-
end
|
86
|
-
end
|
87
49
|
end
|
88
50
|
end
|
@@ -1,10 +1,11 @@
|
|
1
|
-
require 'fluent/parser'
|
1
|
+
require 'fluent/plugin/parser'
|
2
|
+
require 'fluent/time'
|
2
3
|
require 'json'
|
3
4
|
require 'sflowtool'
|
4
5
|
|
5
6
|
|
6
7
|
module Fluent
|
7
|
-
|
8
|
+
module Plugin
|
8
9
|
class SflowParser < Parser
|
9
10
|
Plugin.register_parser('sflow', self)
|
10
11
|
|
@@ -13,7 +14,7 @@ module Fluent
|
|
13
14
|
data = JSON.load(Sflowtool.parse(raw, remote_host))
|
14
15
|
|
15
16
|
# NOTE: sFlow datagram doesn't have timestamp field, but sysUpTime only
|
16
|
-
time = data['header']['unix_seconds_utc']
|
17
|
+
time = Fluent::EventTime.new(data['header']['unix_seconds_utc'])
|
17
18
|
|
18
19
|
data['samples'].each do |sample|
|
19
20
|
yield time, data['header'].merge(sample)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-sflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shintaro Kojima
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.14.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.14.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|