fluent-plugin-windows-eventlog 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 44561910d111a16a85de6b5d9faee8cf052fed71
4
- data.tar.gz: 2bc58308403d20000efe50f2b6f73e86a9a6585a
3
+ metadata.gz: 31b8825e93acb7560e0faf0ccd8805c5536c4abe
4
+ data.tar.gz: '09d0929c2d91a475ea74b4f2cd5ec8691c2cd62c'
5
5
  SHA512:
6
- metadata.gz: 194172daa6b8dd788a785d89e392e3698fe7ed6b8ffa0de360ddc89bf2bd9d37818d8abd43bf5c6e71434cffdd603a91126f674ab80c45455aeffe969a5101c2
7
- data.tar.gz: 2b45ac6f8ce1c4d142ce1aae21104945c2bdb706db26c57eb6f9a0e2ef90ba468a7b3fd5172242817c6e43f3b1575b2167bcd5f65ebd52600f4f461f3c0780ad
6
+ metadata.gz: 6563ea82ba4b3ca319e04d477d58ba7e14ff171fccd3b01a74172ada116766f3fb8782c41e62b02c950e0ee1708a1e16579c6aa334a63b9eed70fede15a5c8be
7
+ data.tar.gz: 597d95a5fb7e09723bfd12a59c57863759b24764e3572b25835ec80c241245809a2db089b328d8ea957df53b7e9e99fa40420f2ebf76cae0bc95e8fbf11716e0
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Component
4
4
 
5
- #### fluentd Input plugin for the Windows Event Log
5
+ ### fluentd Input plugin for the Windows Event Log
6
6
 
7
7
  [Fluentd](http://fluentd.org) plugin to read the Windows Event Log.
8
8
 
@@ -10,7 +10,8 @@
10
10
  gem install fluent-plugin-windows-eventlog
11
11
 
12
12
  ## Configuration
13
- #### fluentd Input plugin for the Windows Event Log
13
+
14
+ ### fluentd Input plugin for the Windows Event Log
14
15
 
15
16
  <source>
16
17
  @type windows_eventlog
@@ -26,19 +27,21 @@
26
27
  </storage>
27
28
  </source>
28
29
 
29
- #### parameters
30
+ ### parameters
30
31
 
31
32
  |name | description |
32
33
  |:----- |:----- |
33
- |`channels` | (option) 'application' as default. One or more of {'application', 'system', 'setup', 'security'}. If you want to read 'setup' or 'security' logs, you must launch fluentd with administrator privileges.|
34
- |`keys` | (option) A subset of [keys](#read-keys) to read. Defaults to all keys.|
35
- |`read_interval` | (option) Read interval in seconds. 2 seconds as default.|
36
- |`from_encoding` | (option) Input character encoding. `nil` as default.|
37
- |`encoding` | (option) Output character encoding. `nil` as default.|
38
- |`read_from_head`| (option) Start to read the entries from the oldest, not from when fluentd is started. Defaults to `false`.|
39
- |`<storage>` | Setting for `storage` plugin for recording read position like `in_tail`'s `pos_file`.|
40
-
41
- #### read keys
34
+ |`channels` | (option) 'application' as default. One or more of {'application', 'system', 'setup', 'security'}. If you want to read 'setup' or 'security' logs, you must launch fluentd with administrator privileges.|
35
+ |`keys` | (option) A subset of [keys](#read-keys) to read. Defaults to all keys.|
36
+ |`read_interval` | (option) Read interval in seconds. 2 seconds as default.|
37
+ |`from_encoding` | (option) Input character encoding. `nil` as default.|
38
+ |`encoding` | (option) Output character encoding. `nil` as default.|
39
+ |`read_from_head` | (option) Start to read the entries from the oldest, not from when fluentd is started. Defaults to `false`.|
40
+ |`<storage>` | Setting for `storage` plugin for recording read position like `in_tail`'s `pos_file`.|
41
+ |`parse_description`| (option) parse `description` field and set parsed result into the record. `parse` and `string_inserts` fields are removed|
42
+
43
+ #### Available keys
44
+
42
45
  This plugin reads the following fields from Windows Event Log entries. Use the `keys` configuration option to select a subset. No other customization is allowed for now.
43
46
 
44
47
  |key|
@@ -55,9 +58,75 @@ This plugin reads the following fields from Windows Event Log entries. Use the `
55
58
  |`description` |
56
59
  |`string_inserts`|
57
60
 
61
+ #### `parse_description` details
62
+
63
+ Here is an example with `parse_description true`.
64
+
65
+ ```
66
+ {
67
+ "channel": "security",
68
+ "record_number": "91698",
69
+ "time_generated": "2017-08-29 20:12:29 +0000",
70
+ "time_written": "2017-08-29 20:12:29 +0000",
71
+ "event_id": "4798",
72
+ "event_type": "audit_success",
73
+ "event_category": "13824",
74
+ "source_name": "Microsoft-Windows-Security-Auditing",
75
+ "computer_name": "TEST",
76
+ "user": "",
77
+ "description": "A user's local group membership was enumerated.\r\n\r\nSubject:\r\n\tSecurity ID:\t\tS-XXX\r\n\tAccount Name:\t\tTEST$\r\n\tAccount Domain:\t\tWORKGROUP\r\n\tLogon ID:\t\t0x3e7\r\n\r\nUser:\r\n\tSecurity ID:\t\tS-XXX-YYY-ZZZ\r\n\tAccount Name:\t\tAdministrator\r\n\tAccount Domain:\t\tTEST\r\n\r\nProcess Information:\r\n\tProcess ID:\t\t0x7dc\r\n\tProcess Name:\t\tC:\\Windows\\System32\\LogonUI.exe\r\n",
78
+ "string_inserts": [
79
+ "Administrator",
80
+ "TEST",
81
+ "S-XXX-YYY-ZZZ",
82
+ "S-XXX",
83
+ "TEST$",
84
+ "WORKGROUP",
85
+ "0x3e7",
86
+ "0x7dc",
87
+ "C:\\Windows\\System32\\LogonUI.exe"
88
+ ]
89
+ }
90
+ ```
91
+
92
+ This record is transformed to
93
+
94
+ ```
95
+ {
96
+ "channel": "security",
97
+ "record_number": "91698",
98
+ "time_generated": "2017-08-29 20:12:29 +0000",
99
+ "time_written": "2017-08-29 20:12:29 +0000",
100
+ "event_id": "4798",
101
+ "event_type": "audit_success",
102
+ "event_category": "13824",
103
+ "source_name": "Microsoft-Windows-Security-Auditing",
104
+ "computer_name": "TEST",
105
+ "user": "",
106
+ "description_title": "A user's local group membership was enumerated.",
107
+ "subject.security_id": "S-XXX",
108
+ "subject.account_name": "TEST$",
109
+ "subject.account_domain": "WORKGROUP",
110
+ "subject.logon_id": "0x3e7",
111
+ "user.security_id": "S-XXX-YYY-ZZZ",
112
+ "user.account_name": "Administrator",
113
+ "user.account_domain": "TEST",
114
+ "process_information.process_id": "0x7dc",
115
+ "process_information.process_name": "C:\\Windows\\System32\\LogonUI.exe\r\n"
116
+ }
117
+ ```
118
+
119
+ NOTE: This feature assumes `description` field has following formats:
120
+
121
+ - group delimiter: `\r\n\r\n`
122
+ - record delimiter: `\r\n\t`
123
+ - field delimiter: `\t\t`
124
+
125
+ If your `description` doesn't follow this format, the parsed result is only `description_title` field with same `description` content.
126
+
58
127
  ## Copyright
59
- #### Copyright
128
+ ### Copyright
60
129
  Copyright(C) 2014- @okahashi117
61
- #### License
130
+ ### License
62
131
  Apache License, Version 2.0
63
132
 
@@ -5,10 +5,11 @@ version: '{build}'
5
5
 
6
6
  install:
7
7
  - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
8
- - "%devkit%\\devkitvars.bat"
8
+ - IF %ridk%==0 "%devkit%\\devkitvars.bat"
9
9
  - ruby --version
10
10
  - gem --version
11
- - bundle install
11
+ - IF %ridk%==1 ridk.cmd exec bundle install
12
+ - IF %ridk%==0 bundle install
12
13
  build: off
13
14
  test_script:
14
15
  - bundle exec rake test
@@ -23,5 +24,11 @@ environment:
23
24
  matrix:
24
25
  - ruby_version: "23-x64"
25
26
  devkit: C:\Ruby23-x64\DevKit
27
+ ridk: 0
26
28
  - ruby_version: "23"
27
29
  devkit: C:\Ruby23\DevKit
30
+ ridk: 0
31
+ - ruby_version: "24-x64"
32
+ ridk: 1
33
+ - ruby_version: "24"
34
+ ridk: 1
@@ -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-windows-eventlog"
7
- spec.version = "0.2.1"
7
+ spec.version = "0.2.2"
8
8
  spec.authors = ["okahashi117", "Hiroshi Hatake", "Masahiro Nakagawa"]
9
9
  spec.email = ["naruki_okahashi@jbat.co.jp", "cosmo0920.oucc@gmail.com", "repeatedly@gmail.com"]
10
10
  spec.summary = %q{Fluentd Input plugin to read windows event log.}
@@ -30,6 +30,8 @@ module Fluent::Plugin
30
30
  config_param :read_from_head, :bool, default: false
31
31
  config_param :from_encoding, :string, default: nil
32
32
  config_param :encoding, :string, default: nil
33
+ desc "Parse 'description' field and set parsed result into event record. 'description' and 'string_inserts' fields are removed from the record"
34
+ config_param :parse_description, :bool, default: false
33
35
 
34
36
  config_section :storage do
35
37
  config_set_default :usage, "positions"
@@ -56,6 +58,8 @@ module Fluent::Plugin
56
58
  if @keynames.empty?
57
59
  @keynames = KEY_MAP.keys
58
60
  end
61
+ @keynames.delete('string_inserts') if @parse_description
62
+
59
63
  @tag = tag
60
64
  @stop = false
61
65
  configure_encoding
@@ -136,6 +140,7 @@ module Fluent::Plugin
136
140
  raise "Unknown value type: #{type}"
137
141
  end
138
142
  end
143
+ parse_desc(h) if @parse_description
139
144
  #h = Hash[@keynames.map {|k| [k, r.send(KEY_MAP[k][0]).to_s]}]
140
145
  router.emit(@tag, Fluent::Engine.now, h)
141
146
  end
@@ -183,5 +188,47 @@ module Fluent::Plugin
183
188
  ensure
184
189
  el.close
185
190
  end
191
+
192
+ GROUP_DELIMITER = "\r\n\r\n".freeze
193
+ RECORD_DELIMITER = "\r\n\t".freeze
194
+ FIELD_DELIMITER = "\t\t".freeze
195
+ NONE_FIELD_DELIMITER = "\t".freeze
196
+
197
+ def parse_desc(record)
198
+ desc = record.delete('description'.freeze)
199
+ return if desc.nil?
200
+
201
+ elems = desc.split(GROUP_DELIMITER)
202
+ record['description_title'] = elems.shift
203
+ elems.each { |elem|
204
+ parent_key = nil
205
+ elem.split(RECORD_DELIMITER).each { |r|
206
+ key, value = if r.index(FIELD_DELIMITER)
207
+ r.split(FIELD_DELIMITER)
208
+ else
209
+ r.split(NONE_FIELD_DELIMITER)
210
+ end
211
+ key.chop! # remove ':' from key
212
+ if value.nil?
213
+ parent_key = to_key(key)
214
+ else
215
+ # parsed value sometimes contain unexpected "\t". So remove it.
216
+ value.strip!
217
+ if parent_key.nil?
218
+ record[to_key(key)] = value
219
+ else
220
+ k = "#{parent_key}.#{to_key(key)}"
221
+ record[k] = value
222
+ end
223
+ end
224
+ }
225
+ }
226
+ end
227
+
228
+ def to_key(key)
229
+ key.downcase!
230
+ key.gsub!(' '.freeze, '_'.freeze)
231
+ key
232
+ end
186
233
  end
187
234
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-windows-eventlog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - okahashi117
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-06-06 00:00:00.000000000 Z
13
+ date: 2017-09-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler