fluent-plugin-druid-log 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: eaeeb7452e8a97475581d23b54cc06261c5d75077a73ab01c23a1488d0d643eb
4
+ data.tar.gz: a6ae4ea44c456ee0111a214bafc4b7194cdb2b60da97e5c17efdbfde00f3b1af
5
+ SHA512:
6
+ metadata.gz: 594d6853d057efd9059429465702b35c7804fd94e833995c8c2d8ad7f756957de3c91fa31744a4fc6c4ce8ce4e19d1ad75cee9cf7b0a10423af2aae1de1a39a3
7
+ data.tar.gz: d8ba20909a2b005b6b9e9835f99a5a47079219106aeb1daa5bfc8b48d2b3374bdec933df85cbd2e1c2c4f7605ba7ffcc4419453257e3274912040f200c90627b
data/.rubocop.yml ADDED
@@ -0,0 +1,37 @@
1
+ ---
2
+
3
+ plugins:
4
+ - rubocop-rake
5
+
6
+ AllCops:
7
+ TargetRubyVersion: 3.2
8
+ NewCops: enable
9
+ Exclude: []
10
+
11
+ Gemspec/DevelopmentDependencies:
12
+ EnforcedStyle: gemspec
13
+
14
+ Metrics/AbcSize:
15
+ Max: 20
16
+
17
+ Metrics/BlockLength:
18
+ Exclude:
19
+ - fluent-plugin-druid-log.gemspec
20
+ - test/**/*.rb
21
+
22
+ Metrics/ClassLength:
23
+ Exclude:
24
+ - test/**/*.rb
25
+
26
+ Metrics/MethodLength:
27
+ Max: 20
28
+
29
+ Metrics/ParameterLists:
30
+ Exclude:
31
+ - test/helper.rb
32
+
33
+ Naming/MethodParameterName:
34
+ Exclude: []
35
+
36
+ Style/Documentation:
37
+ Enabled: false
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # fluent-plugin-druid-log
2
+
3
+ [Fluentd](https://fluentd.org/) plugin for Apache Druid.
4
+
5
+ ## plugins
6
+
7
+ ### format-druid-audit-log-1 (filter)
8
+
9
+ Filter plugin to reformat Druid audit log
10
+
11
+ Example:
12
+
13
+ ``` text
14
+ <source>
15
+ @type tail
16
+ path /.../log/audit.log
17
+ pos_file /.../audit_log.pos
18
+ read_from_head true
19
+ tag druid_audit_log
20
+
21
+ <parse>
22
+ @type regexp
23
+ expression /^(?<timestamp>[^\t]+)\t(?<remote_addr>[^\t]*)\t{1,2}(?<query_result>[^\t]+)\t(?<raw_query>.*)$/
24
+ time_key timestamp
25
+ keep_time_key true
26
+ </parse>
27
+ </source>
28
+
29
+ <filter druid_audit_log>
30
+ @type format_druid_audit_log_1
31
+ </filter>
32
+
33
+ <match druid_audit_log>
34
+ @type stdout
35
+ </match>
36
+ ```
37
+
38
+ ## Installation
39
+
40
+ ### RubyGems
41
+
42
+ ```
43
+ $ gem install fluent-plugin-druid-log
44
+ ```
45
+
46
+ ### Bundler
47
+
48
+ Add following line to your Gemfile:
49
+
50
+ ```ruby
51
+ gem "fluent-plugin-druid-log"
52
+ ```
53
+
54
+ And then execute:
55
+
56
+ ```
57
+ $ bundle
58
+ ```
59
+
60
+ ## Copyright
61
+
62
+ * Copyright(c) 2026- Thomas Tych
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ require 'rake/testtask'
7
+
8
+ Rake::TestTask.new(:test) do |t|
9
+ t.libs.push('lib', 'test')
10
+ t.test_files = FileList['test/**/test_*.rb', 'test/**/*_test.rb']
11
+ t.verbose = true
12
+ t.warning = true
13
+ end
14
+
15
+ require 'rubocop/rake_task'
16
+ RuboCop::RakeTask.new
17
+
18
+ require 'bump/tasks'
19
+
20
+ task default: %i[test rubocop]
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fluent/plugin/filter'
4
+
5
+ module Fluent
6
+ module Plugin
7
+ class FormatDruidAuditLog1Filter < Fluent::Plugin::Filter
8
+ NAME = 'format_druid_audit_log_1'
9
+ Fluent::Plugin.register_filter(NAME, self)
10
+
11
+ helpers :event_emitter, :timer
12
+
13
+ DEFAULT_QUERY_KEY = 'query'
14
+
15
+ desc 'Query key'
16
+ config_param :query_key, :string, default: DEFAULT_QUERY_KEY
17
+
18
+ def configure(conf)
19
+ super
20
+
21
+ return unless query_key.nil?
22
+
23
+ raise Fluent::ConfigError, 'query_key should be specified'
24
+ end
25
+
26
+ def multi_workers_ready?
27
+ true
28
+ end
29
+
30
+ def filter(_tag, _time, record)
31
+ query_type = guess_query_type(record)
32
+
33
+ new_record = record.except(query_key)
34
+ new_record['query_type'] = query_type
35
+ new_record["#{query_type}_query".downcase] = record[query_key]
36
+ new_record
37
+ end
38
+
39
+ def guess_query_type(record)
40
+ record.dig(query_key,
41
+ 'queryType') || (record.dig('query_result',
42
+ 'sqlQuery/time') && 'sql') || (record.dig(query_key,
43
+ 'query') && 'sql') || 'unknown'
44
+ end
45
+ end
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,236 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-druid-log
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Tych
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: bump
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.10.0
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.10.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: bundler
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '4.0'
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 4.0.13
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '4.0'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 4.0.13
46
+ - !ruby/object:Gem::Dependency
47
+ name: byebug
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '13.0'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '13.0'
60
+ - !ruby/object:Gem::Dependency
61
+ name: mocha
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '3.1'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '3.1'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rake
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '13.4'
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 13.4.2
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '13.4'
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 13.4.2
94
+ - !ruby/object:Gem::Dependency
95
+ name: reek
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '6.5'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '6.5'
108
+ - !ruby/object:Gem::Dependency
109
+ name: rubocop
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '1.87'
115
+ type: :development
116
+ prerelease: false
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '1.87'
122
+ - !ruby/object:Gem::Dependency
123
+ name: rubocop-rake
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: 0.7.1
129
+ type: :development
130
+ prerelease: false
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: 0.7.1
136
+ - !ruby/object:Gem::Dependency
137
+ name: simplecov
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: '0.22'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '0.22'
150
+ - !ruby/object:Gem::Dependency
151
+ name: test-unit
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '3.7'
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 3.7.8
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.7'
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 3.7.8
170
+ - !ruby/object:Gem::Dependency
171
+ name: timecop
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: '0.9'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: '0.9'
184
+ - !ruby/object:Gem::Dependency
185
+ name: fluentd
186
+ requirement: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: 0.14.10
191
+ - - "<"
192
+ - !ruby/object:Gem::Version
193
+ version: '2'
194
+ type: :runtime
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: 0.14.10
201
+ - - "<"
202
+ - !ruby/object:Gem::Version
203
+ version: '2'
204
+ email:
205
+ - thomas.tych@gmail.com
206
+ executables: []
207
+ extensions: []
208
+ extra_rdoc_files: []
209
+ files:
210
+ - ".rubocop.yml"
211
+ - README.md
212
+ - Rakefile
213
+ - lib/fluent/plugin/filter_format_druid_audit_log_1.rb
214
+ homepage: https://gitlab.com/ttych/fluent-plugin-druid-log
215
+ licenses:
216
+ - Apache-2.0
217
+ metadata:
218
+ rubygems_mfa_required: 'true'
219
+ rdoc_options: []
220
+ require_paths:
221
+ - lib
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: 3.2.0
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ requirements: []
233
+ rubygems_version: 4.0.13
234
+ specification_version: 4
235
+ summary: fluentd plugins for Apache Druid
236
+ test_files: []