fluent-plugin-windows-eventlog 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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