fluent-plugin-parser-winevt_xml 0.1.2 → 0.2.0

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
  SHA256:
3
- metadata.gz: 7411e3cffa23808b75834b504b3c72aef7d9d23ad2d39a26455b9e7ff5a3c3ae
4
- data.tar.gz: 71cdf36beee23db60f832a6aad6544e06799df70e2863fd9eea5ce28ea653b69
3
+ metadata.gz: 0c3d11e84c92255ce5fbe0813857d38a5f59824985a0453b0f2fd7880d0a9000
4
+ data.tar.gz: 0fae4fa404654a30cfa0c101a34074c3ece238be70bdb79cd19ceeea3a1206e0
5
5
  SHA512:
6
- metadata.gz: bafcecd0c1e43f66fd96250a9f0c0268389534324091c1b67813bec7474d93f88b4c7869d6cada2ec79f1733c319d2a14d9fc9cc1089cb1b3324a75dc12126d6
7
- data.tar.gz: ac0d44e0f2680dc364d377f94aca62b94e384441ab4c05b81f115b4963aecaf2baed8945725d21ac3b06d5bb166dcadf08c4ed0def8bf226779ac5603fdb47ad
6
+ metadata.gz: 7b08784bd72df92216146953b49dd69d559e6d40373326e54f72cca6ca981b192901aca427ca3a61064c37ab9aebb82379bf6be72675021748e784f95c62f486
7
+ data.tar.gz: 9a0c3fede86321a65baa5373123a085c72a6bbb81e146b29383bd9c979d4c71e5f865bb97387743619e87f56bcfdfd375e193dd3015525bd323c3d5f2e95d07a
data/README.md CHANGED
@@ -17,12 +17,24 @@ gem install fluent-plugin-parser-winevt_xml
17
17
 
18
18
  ## Configuration
19
19
 
20
+ ### parser_winevt_xml
21
+
20
22
  ```aconf
21
23
  <parse>
22
24
  @type winevt_xml
23
25
  </parse>
24
26
  ```
25
27
 
28
+ ### parser_winevt_sax
29
+
30
+ This plugin is a bit faster than `winevt_xml`.
31
+
32
+ ```aconf
33
+ <parse>
34
+ @type winevt_sax
35
+ </parse>
36
+ ```
37
+
26
38
  ## Copyright
27
39
 
28
40
  ### Copyright
@@ -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-parser-winevt_xml"
7
- spec.version = "0.1.2"
7
+ spec.version = "0.2.0"
8
8
  spec.authors = ["Hiroshi Hatake", "Masahiro Nakagawa"]
9
9
  spec.email = ["cosmo0920.oucc@gmail.com", "repeatedly@gmail.com"]
10
10
  spec.summary = %q{Fluentd Parser plugin to parse XML rendered windows event log.}
@@ -0,0 +1,21 @@
1
+ require 'fluent/plugin/parser'
2
+ require 'fluent/plugin/winevt_sax_document'
3
+ require 'nokogiri'
4
+
5
+ module Fluent::Plugin
6
+ class WinevtSAXparser < Parser
7
+ Fluent::Plugin.register_parser('winevt_sax', self)
8
+
9
+ def winevt_xml?
10
+ true
11
+ end
12
+
13
+ def parse(text)
14
+ evtxml = WinevtXMLDocument.new
15
+ parser = Nokogiri::XML::SAX::Parser.new(evtxml)
16
+ parser.parse(text)
17
+ time = @estimate_current_event ? Fluent::EventTime.now : nil
18
+ yield time, evtxml.result
19
+ end
20
+ end
21
+ end
@@ -23,9 +23,10 @@ module Fluent::Plugin
23
23
  record["Keywords"] = (system_elem/'Keywords').text rescue nil
24
24
  record["TimeCreated"] = (system_elem/'TimeCreated').attribute("SystemTime").text rescue nil
25
25
  record["EventRecordID"] = (system_elem/'EventRecordID').text rescue nil
26
- record["ActivityID"] = (system_elem/'ActivityID').text rescue nil
27
- record["RelatedActivityID"] = (system_elem/'Correlation').attribute("ActivityID").text rescue nil
26
+ record["ActivityID"] = (system_elem/'Correlation').attribute('ActivityID').text rescue nil
27
+ record["RelatedActivityID"] = (system_elem/'Correlation').attribute("RelatedActivityID").text rescue nil
28
28
  record["ThreadID"] = (system_elem/'Execution').attribute("ThreadID").text rescue nil
29
+ record["ProcessID"] = (system_elem/'Execution').attribute("ProcessID").text rescue nil
29
30
  record["Channel"] = (system_elem/'Channel').text rescue nil
30
31
  record["Computer"] = (system_elem/"Computer").text rescue nil
31
32
  record["UserID"] = (system_elem/'Security').attribute("UserID").text rescue nil
@@ -0,0 +1,50 @@
1
+ require 'nokogiri'
2
+
3
+ class WinevtXMLDocument < Nokogiri::XML::SAX::Document
4
+ attr_reader :result
5
+
6
+ def initialize
7
+ @stack = []
8
+ @result = {}
9
+ super
10
+ end
11
+
12
+ def start_document
13
+ end
14
+
15
+ def start_element(name, attributes = [])
16
+ @stack << name
17
+
18
+ if name == "Provider"
19
+ @result["PrividerName"] = attributes[0][1] rescue nil
20
+ @result["ProviderGUID"] = attributes[1][1] rescue nil
21
+ elsif name == "EventID"
22
+ @result["Qualifiers"] = attributes[0][1] rescue nil
23
+ elsif name == "TimeCreated"
24
+ @result["TimeCreated"] = attributes[0][1] rescue nil
25
+ elsif name == "Correlation"
26
+ @result["ActivityID"] = attributes[0][1] rescue nil
27
+ @result["RelatedActivityID"] = attributes[1][1] rescue nil
28
+ elsif name == "Execution"
29
+ @result["ProcessID"] = attributes[0][1] rescue nil
30
+ @result["ThreadID"] = attributes[1][1] rescue nil
31
+ elsif name == "Security"
32
+ @result["UserID"] = attributes[0][1] rescue nil
33
+ end
34
+ end
35
+
36
+ def characters(string)
37
+ element = @stack.last
38
+
39
+ if /^EventID|Level|Task|Opcode|Keywords|EventRecordID|
40
+ ActivityID|Channel|Computer|Security|Version$/ === element
41
+ @result[element] = string
42
+ end
43
+ end
44
+
45
+ def end_element(name, attributes = [])
46
+ end
47
+
48
+ def end_document
49
+ end
50
+ end
data/test/helper.rb CHANGED
@@ -15,6 +15,7 @@ require 'fluent/test'
15
15
 
16
16
  require 'fluent/test/driver/parser'
17
17
  require 'fluent/plugin/parser_winevt_xml'
18
+ require 'fluent/plugin/parser_winevt_sax'
18
19
 
19
20
  class Test::Unit::TestCase
20
21
  end
@@ -0,0 +1,43 @@
1
+ require 'helper'
2
+
3
+ class WinevtSAXparserTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Fluent::Test.setup
7
+ end
8
+
9
+ CONFIG = %[]
10
+ XMLLOG = File.open(File.join(__dir__, "..", "data", "eventlog.xml") )
11
+
12
+ def create_driver(conf = CONFIG)
13
+ Fluent::Test::Driver::Parser.new(Fluent::Plugin::WinevtSAXparser).configure(conf)
14
+ end
15
+
16
+ def test_parse
17
+ d = create_driver
18
+ xml = XMLLOG
19
+ expected = {"PrividerName" => "Microsoft-Windows-Security-Auditing",
20
+ "ProviderGUID" => "{54849625-5478-4994-A5BA-3E3B0328C30D}",
21
+ "EventID" => "4624",
22
+ "Qualifiers" => nil,
23
+ "Level" => "0",
24
+ "Task" => "12544",
25
+ "Opcode" => "0",
26
+ "Keywords" => "0x8020000000000000",
27
+ "TimeCreated" => "2019-06-13T09:21:23.345889600Z",
28
+ "EventRecordID" => "80688",
29
+ "ActivityID" => "{587F0743-1F71-0006-5007-7F58711FD501}",
30
+ "RelatedActivityID" => nil,
31
+ "ProcessID" => "912",
32
+ "ThreadID" => "24708",
33
+ "Channel" => "Security",
34
+ "Computer" => "Fluentd-Developing-Windows",
35
+ "UserID" => nil,
36
+ "Version" => "2",}
37
+ d.instance.parse(xml) do |time, record|
38
+ assert_equal(expected, record)
39
+ end
40
+
41
+ assert_true(d.instance.winevt_xml?)
42
+ end
43
+ end
@@ -26,8 +26,9 @@ class WinevtXMLparserTest < Test::Unit::TestCase
26
26
  "Keywords" => "0x8020000000000000",
27
27
  "TimeCreated" => "2019-06-13T09:21:23.345889600Z",
28
28
  "EventRecordID" => "80688",
29
- "ActivityID" => "",
30
- "RelatedActivityID" => "{587F0743-1F71-0006-5007-7F58711FD501}",
29
+ "ActivityID" => "{587F0743-1F71-0006-5007-7F58711FD501}",
30
+ "RelatedActivityID" => nil,
31
+ "ProcessID" => "912",
31
32
  "ThreadID" => "24708",
32
33
  "Channel" => "Security",
33
34
  "Computer" => "Fluentd-Developing-Windows",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-parser-winevt_xml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroshi Hatake
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-10-10 00:00:00.000000000 Z
12
+ date: 2019-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -103,9 +103,12 @@ files:
103
103
  - Rakefile
104
104
  - appveyor.yml
105
105
  - fluent-plugin-parser-winevt_xml.gemspec
106
+ - lib/fluent/plugin/parser_winevt_sax.rb
106
107
  - lib/fluent/plugin/parser_winevt_xml.rb
108
+ - lib/fluent/plugin/winevt_sax_document.rb
107
109
  - test/data/eventlog.xml
108
110
  - test/helper.rb
111
+ - test/plugin/test_parser_winevt_sax.rb
109
112
  - test/plugin/test_parser_winevt_xml.rb
110
113
  homepage: https://github.com/fluent/fluent-plugin-parser-winevt_xml
111
114
  licenses:
@@ -133,4 +136,5 @@ summary: Fluentd Parser plugin to parse XML rendered windows event log.
133
136
  test_files:
134
137
  - test/data/eventlog.xml
135
138
  - test/helper.rb
139
+ - test/plugin/test_parser_winevt_sax.rb
136
140
  - test/plugin/test_parser_winevt_xml.rb