fluent-plugin-syscheck 0.2.0 → 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/.rubocop.yml +1 -1
- data/README.md +27 -1
- data/lib/fluent/plugin/in_syscheck_mounts.rb +2 -5
- data/lib/fluent/plugin/in_syscheck_sockets.rb +94 -0
- metadata +66 -39
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 793b60b98e80ea983169dec24aaf13725d3dfa93e0f73c05c49a325a9a8103ab
|
|
4
|
+
data.tar.gz: 976bc5154d1b1a93047f75aaa2bcd933844bb604e07e53619d9d6dc97b8cf471
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: daeb3dbc21f3bce7b804eeb060475285bdfcb103860d84c2845c12e18da7ff80b423e6859013dca7c25b2e49fae3329275b00b109c54d02476e29a06431bdc51
|
|
7
|
+
data.tar.gz: '08c092e9e4552c8f2177bfab4496157ba9f6088adaba318f7766f4fbeb23e7baa5ce616378efe25591e8fbefc3b5f3843b38848b7654a7838229e6c3045140aa'
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
|
@@ -56,8 +56,34 @@ Parameters are:
|
|
|
56
56
|
</source>
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
## plugin : syscheck_sockets
|
|
60
|
+
|
|
61
|
+
### configuration
|
|
62
|
+
|
|
63
|
+
Parameters are:
|
|
64
|
+
|
|
65
|
+
| parameter | type | purpose |
|
|
66
|
+
|-------------------------|--------|----------------------------------------------|
|
|
67
|
+
| tag | string | tag to emit event on |
|
|
68
|
+
| interval | time | interval to exec mount check |
|
|
69
|
+
| first_run_wait_interval | bool | first collect wait interval before execution |
|
|
70
|
+
| list_sockets | bool | dump sockets information |
|
|
71
|
+
|
|
72
|
+
### examples
|
|
73
|
+
|
|
74
|
+
``` text
|
|
75
|
+
<source>
|
|
76
|
+
@type syscheck_sockets
|
|
77
|
+
|
|
78
|
+
tag test
|
|
79
|
+
interval 60
|
|
80
|
+
first_run_wait_interval false
|
|
81
|
+
list_sockets true
|
|
82
|
+
</source>
|
|
83
|
+
```
|
|
84
|
+
|
|
59
85
|
## Copyright
|
|
60
86
|
|
|
61
|
-
* Copyright(c) 2025- Thomas Tych
|
|
87
|
+
* Copyright(c) 2025-2026 Thomas Tych
|
|
62
88
|
* License
|
|
63
89
|
* Apache License, Version 2.0
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
require 'fluent/plugin/input'
|
|
19
19
|
|
|
20
|
-
# rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/MethodLength
|
|
20
|
+
# rubocop:disable-next Metrics/AbcSize, Metrics/ClassLength, Metrics/MethodLength
|
|
21
21
|
module Fluent
|
|
22
22
|
module Plugin
|
|
23
23
|
class SyscheckMountsInput < Fluent::Plugin::Input
|
|
@@ -80,9 +80,7 @@ module Fluent
|
|
|
80
80
|
def configure(conf)
|
|
81
81
|
super
|
|
82
82
|
|
|
83
|
-
raise Fluent::ConfigError, 'tag should not be empty' if tag.empty?
|
|
84
|
-
|
|
85
|
-
true
|
|
83
|
+
raise Fluent::ConfigError, 'tag should not be empty' if tag.nil? || tag.empty?
|
|
86
84
|
end
|
|
87
85
|
|
|
88
86
|
def start
|
|
@@ -222,4 +220,3 @@ module Fluent
|
|
|
222
220
|
end
|
|
223
221
|
end
|
|
224
222
|
end
|
|
225
|
-
# rubocop:enable Metrics/AbcSize, Metrics/ClassLength, Metrics/MethodLength
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2026- Thomas Tych
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
|
|
18
|
+
require 'fluent/plugin/input'
|
|
19
|
+
|
|
20
|
+
require 'procfs_rb'
|
|
21
|
+
require 'procfs_rb/proc_fs/parser/net_tcp_parser'
|
|
22
|
+
|
|
23
|
+
module Fluent
|
|
24
|
+
module Plugin
|
|
25
|
+
class SyscheckSocketsInput < Fluent::Plugin::Input
|
|
26
|
+
NAME = 'syscheck_sockets'
|
|
27
|
+
Fluent::Plugin.register_input(NAME, self)
|
|
28
|
+
|
|
29
|
+
helpers :event_emitter, :timer
|
|
30
|
+
|
|
31
|
+
INTERVAL = 300
|
|
32
|
+
|
|
33
|
+
DEFAULT_LIST = false
|
|
34
|
+
DEFAULT_FIRST_RUN_WAIT_INTERVAL = true
|
|
35
|
+
|
|
36
|
+
desc 'The tag of the event is emitted on'
|
|
37
|
+
config_param :tag, :string
|
|
38
|
+
desc 'interval for probe execution'
|
|
39
|
+
config_param :interval, :time, default: INTERVAL
|
|
40
|
+
desc 'Wait interval for first execution'
|
|
41
|
+
config_param :first_run_wait_interval, :bool, default: DEFAULT_FIRST_RUN_WAIT_INTERVAL
|
|
42
|
+
|
|
43
|
+
desc 'List sockets'
|
|
44
|
+
config_param :list_sockets, :bool, default: DEFAULT_LIST
|
|
45
|
+
|
|
46
|
+
def configure(conf)
|
|
47
|
+
super
|
|
48
|
+
|
|
49
|
+
raise Fluent::ConfigError, 'tag should not be empty' if tag.nil? || tag.empty?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def start
|
|
53
|
+
super
|
|
54
|
+
|
|
55
|
+
timer_execute(:run_check_first, 1, repeat: false, &method(:run_check)) unless first_run_wait_interval
|
|
56
|
+
timer_execute(:run_check, interval, repeat: true, &method(:run_check))
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def run_check
|
|
60
|
+
run_check_tcp4
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def run_check_tcp4
|
|
64
|
+
tcp4_content = read_file_content('/proc/net/tcp')
|
|
65
|
+
parser = ProcFS::Parser::NetTcpParser.new
|
|
66
|
+
tcp4_info = parser.parse(tcp4_content)
|
|
67
|
+
|
|
68
|
+
emit_list_sockets(tcp4_info) if list_sockets
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def emit_list_sockets(sockets)
|
|
72
|
+
log.debug "#{NAME}: emit list_sockets"
|
|
73
|
+
|
|
74
|
+
event_time = Fluent::EventTime.from_time(sockets.timestamp)
|
|
75
|
+
sockets.each do |socket|
|
|
76
|
+
router.emit(
|
|
77
|
+
tag,
|
|
78
|
+
event_time,
|
|
79
|
+
socket.to_h
|
|
80
|
+
.merge('timestamp' => sockets.timestamp.iso8601(3))
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
private
|
|
86
|
+
|
|
87
|
+
def read_file_content(path)
|
|
88
|
+
File.read(path)
|
|
89
|
+
rescue Errno::ENOENT => e
|
|
90
|
+
log.error "#{NAME}: can't read \"#{path}\" content: #{e}"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fluent-plugin-syscheck
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Thomas Tych
|
|
@@ -29,128 +29,128 @@ dependencies:
|
|
|
29
29
|
requirements:
|
|
30
30
|
- - "~>"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '4.0'
|
|
33
33
|
- - ">="
|
|
34
34
|
- !ruby/object:Gem::Version
|
|
35
|
-
version:
|
|
35
|
+
version: 4.0.21
|
|
36
36
|
type: :development
|
|
37
37
|
prerelease: false
|
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
39
39
|
requirements:
|
|
40
40
|
- - "~>"
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: '
|
|
42
|
+
version: '4.0'
|
|
43
43
|
- - ">="
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
|
-
version:
|
|
45
|
+
version: 4.0.21
|
|
46
46
|
- !ruby/object:Gem::Dependency
|
|
47
47
|
name: byebug
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
|
49
49
|
requirements:
|
|
50
50
|
- - "~>"
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
|
-
version: '
|
|
53
|
-
- - ">="
|
|
54
|
-
- !ruby/object:Gem::Version
|
|
55
|
-
version: 11.1.3
|
|
52
|
+
version: '13.0'
|
|
56
53
|
type: :development
|
|
57
54
|
prerelease: false
|
|
58
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
59
56
|
requirements:
|
|
60
57
|
- - "~>"
|
|
61
58
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: '
|
|
63
|
-
- - ">="
|
|
64
|
-
- !ruby/object:Gem::Version
|
|
65
|
-
version: 11.1.3
|
|
59
|
+
version: '13.0'
|
|
66
60
|
- !ruby/object:Gem::Dependency
|
|
67
61
|
name: irb
|
|
68
62
|
requirement: !ruby/object:Gem::Requirement
|
|
69
63
|
requirements:
|
|
64
|
+
- - "~>"
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '1.18'
|
|
70
67
|
- - ">="
|
|
71
68
|
- !ruby/object:Gem::Version
|
|
72
|
-
version:
|
|
69
|
+
version: 1.18.0
|
|
73
70
|
type: :development
|
|
74
71
|
prerelease: false
|
|
75
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
76
73
|
requirements:
|
|
74
|
+
- - "~>"
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '1.18'
|
|
77
77
|
- - ">="
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
|
-
version:
|
|
79
|
+
version: 1.18.0
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: mocha
|
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
|
83
83
|
requirements:
|
|
84
84
|
- - "~>"
|
|
85
85
|
- !ruby/object:Gem::Version
|
|
86
|
-
version: '
|
|
86
|
+
version: '3.1'
|
|
87
87
|
- - ">="
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
89
|
+
version: 3.1.0
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
96
|
+
version: '3.1'
|
|
97
97
|
- - ">="
|
|
98
98
|
- !ruby/object:Gem::Version
|
|
99
|
-
version:
|
|
99
|
+
version: 3.1.0
|
|
100
100
|
- !ruby/object:Gem::Dependency
|
|
101
101
|
name: rake
|
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
|
103
103
|
requirements:
|
|
104
104
|
- - "~>"
|
|
105
105
|
- !ruby/object:Gem::Version
|
|
106
|
-
version: '13.
|
|
106
|
+
version: '13.4'
|
|
107
107
|
- - ">="
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: 13.2
|
|
109
|
+
version: 13.4.2
|
|
110
110
|
type: :development
|
|
111
111
|
prerelease: false
|
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
|
113
113
|
requirements:
|
|
114
114
|
- - "~>"
|
|
115
115
|
- !ruby/object:Gem::Version
|
|
116
|
-
version: '13.
|
|
116
|
+
version: '13.4'
|
|
117
117
|
- - ">="
|
|
118
118
|
- !ruby/object:Gem::Version
|
|
119
|
-
version: 13.2
|
|
119
|
+
version: 13.4.2
|
|
120
120
|
- !ruby/object:Gem::Dependency
|
|
121
121
|
name: reek
|
|
122
122
|
requirement: !ruby/object:Gem::Requirement
|
|
123
123
|
requirements:
|
|
124
124
|
- - "~>"
|
|
125
125
|
- !ruby/object:Gem::Version
|
|
126
|
-
version: '6.
|
|
126
|
+
version: '6.5'
|
|
127
127
|
type: :development
|
|
128
128
|
prerelease: false
|
|
129
129
|
version_requirements: !ruby/object:Gem::Requirement
|
|
130
130
|
requirements:
|
|
131
131
|
- - "~>"
|
|
132
132
|
- !ruby/object:Gem::Version
|
|
133
|
-
version: '6.
|
|
133
|
+
version: '6.5'
|
|
134
134
|
- !ruby/object:Gem::Dependency
|
|
135
135
|
name: rubocop
|
|
136
136
|
requirement: !ruby/object:Gem::Requirement
|
|
137
137
|
requirements:
|
|
138
138
|
- - "~>"
|
|
139
139
|
- !ruby/object:Gem::Version
|
|
140
|
-
version: '1.
|
|
140
|
+
version: '1.91'
|
|
141
141
|
- - ">="
|
|
142
142
|
- !ruby/object:Gem::Version
|
|
143
|
-
version: 1.
|
|
143
|
+
version: 1.91.0
|
|
144
144
|
type: :development
|
|
145
145
|
prerelease: false
|
|
146
146
|
version_requirements: !ruby/object:Gem::Requirement
|
|
147
147
|
requirements:
|
|
148
148
|
- - "~>"
|
|
149
149
|
- !ruby/object:Gem::Version
|
|
150
|
-
version: '1.
|
|
150
|
+
version: '1.91'
|
|
151
151
|
- - ">="
|
|
152
152
|
- !ruby/object:Gem::Version
|
|
153
|
-
version: 1.
|
|
153
|
+
version: 1.91.0
|
|
154
154
|
- !ruby/object:Gem::Dependency
|
|
155
155
|
name: rubocop-rake
|
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -177,34 +177,40 @@ dependencies:
|
|
|
177
177
|
requirements:
|
|
178
178
|
- - "~>"
|
|
179
179
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: '
|
|
180
|
+
version: '1.3'
|
|
181
|
+
- - ">="
|
|
182
|
+
- !ruby/object:Gem::Version
|
|
183
|
+
version: 1.3.1
|
|
181
184
|
type: :development
|
|
182
185
|
prerelease: false
|
|
183
186
|
version_requirements: !ruby/object:Gem::Requirement
|
|
184
187
|
requirements:
|
|
185
188
|
- - "~>"
|
|
186
189
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: '
|
|
190
|
+
version: '1.3'
|
|
191
|
+
- - ">="
|
|
192
|
+
- !ruby/object:Gem::Version
|
|
193
|
+
version: 1.3.1
|
|
188
194
|
- !ruby/object:Gem::Dependency
|
|
189
195
|
name: test-unit
|
|
190
196
|
requirement: !ruby/object:Gem::Requirement
|
|
191
197
|
requirements:
|
|
192
198
|
- - "~>"
|
|
193
199
|
- !ruby/object:Gem::Version
|
|
194
|
-
version: '3.
|
|
200
|
+
version: '3.7'
|
|
195
201
|
- - ">="
|
|
196
202
|
- !ruby/object:Gem::Version
|
|
197
|
-
version: 3.
|
|
203
|
+
version: 3.7.8
|
|
198
204
|
type: :development
|
|
199
205
|
prerelease: false
|
|
200
206
|
version_requirements: !ruby/object:Gem::Requirement
|
|
201
207
|
requirements:
|
|
202
208
|
- - "~>"
|
|
203
209
|
- !ruby/object:Gem::Version
|
|
204
|
-
version: '3.
|
|
210
|
+
version: '3.7'
|
|
205
211
|
- - ">="
|
|
206
212
|
- !ruby/object:Gem::Version
|
|
207
|
-
version: 3.
|
|
213
|
+
version: 3.7.8
|
|
208
214
|
- !ruby/object:Gem::Dependency
|
|
209
215
|
name: timecop
|
|
210
216
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -214,7 +220,7 @@ dependencies:
|
|
|
214
220
|
version: '0.9'
|
|
215
221
|
- - ">="
|
|
216
222
|
- !ruby/object:Gem::Version
|
|
217
|
-
version: 0.9.
|
|
223
|
+
version: 0.9.11
|
|
218
224
|
type: :development
|
|
219
225
|
prerelease: false
|
|
220
226
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -224,7 +230,7 @@ dependencies:
|
|
|
224
230
|
version: '0.9'
|
|
225
231
|
- - ">="
|
|
226
232
|
- !ruby/object:Gem::Version
|
|
227
|
-
version: 0.9.
|
|
233
|
+
version: 0.9.11
|
|
228
234
|
- !ruby/object:Gem::Dependency
|
|
229
235
|
name: fluentd
|
|
230
236
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -245,6 +251,26 @@ dependencies:
|
|
|
245
251
|
- - "<"
|
|
246
252
|
- !ruby/object:Gem::Version
|
|
247
253
|
version: '2'
|
|
254
|
+
- !ruby/object:Gem::Dependency
|
|
255
|
+
name: procfs_rb
|
|
256
|
+
requirement: !ruby/object:Gem::Requirement
|
|
257
|
+
requirements:
|
|
258
|
+
- - "~>"
|
|
259
|
+
- !ruby/object:Gem::Version
|
|
260
|
+
version: '0.1'
|
|
261
|
+
- - ">="
|
|
262
|
+
- !ruby/object:Gem::Version
|
|
263
|
+
version: 0.1.1
|
|
264
|
+
type: :runtime
|
|
265
|
+
prerelease: false
|
|
266
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
267
|
+
requirements:
|
|
268
|
+
- - "~>"
|
|
269
|
+
- !ruby/object:Gem::Version
|
|
270
|
+
version: '0.1'
|
|
271
|
+
- - ">="
|
|
272
|
+
- !ruby/object:Gem::Version
|
|
273
|
+
version: 0.1.1
|
|
248
274
|
email:
|
|
249
275
|
- thomas.tych@gmail.com
|
|
250
276
|
executables: []
|
|
@@ -256,6 +282,7 @@ files:
|
|
|
256
282
|
- README.md
|
|
257
283
|
- Rakefile
|
|
258
284
|
- lib/fluent/plugin/in_syscheck_mounts.rb
|
|
285
|
+
- lib/fluent/plugin/in_syscheck_sockets.rb
|
|
259
286
|
homepage: https://gitlab.com/ttych/fluent-plugin-syscheck
|
|
260
287
|
licenses:
|
|
261
288
|
- Apache-2.0
|
|
@@ -270,14 +297,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
270
297
|
requirements:
|
|
271
298
|
- - ">="
|
|
272
299
|
- !ruby/object:Gem::Version
|
|
273
|
-
version: 3.
|
|
300
|
+
version: 3.2.0
|
|
274
301
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
275
302
|
requirements:
|
|
276
303
|
- - ">="
|
|
277
304
|
- !ruby/object:Gem::Version
|
|
278
305
|
version: '0'
|
|
279
306
|
requirements: []
|
|
280
|
-
rubygems_version:
|
|
307
|
+
rubygems_version: 4.0.21
|
|
281
308
|
specification_version: 4
|
|
282
309
|
summary: fluentd plugin to check system part
|
|
283
310
|
test_files: []
|