fluent-plugin-azure-loganalytics 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/ChangeLog.md +4 -0
- data/VERSION +1 -1
- data/fluent-plugin-azure-loganalytics.gemspec +1 -2
- data/lib/fluent/plugin/out_azure-loganalytics.rb +32 -17
- data/test/helper.rb +3 -0
- data/test/plugin/test_azure_loganalytics.rb +59 -51
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57ab3bae479504ce91c4deee0c6bad550af7fd26
|
4
|
+
data.tar.gz: 3fd0fc1df4b7f30ccbc0a6e5cfc682faba7a2861
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68477c13d879c7a932a6d8199472148ea17201b9b7f73c19d3adaa7a88612811d62c03fa41acf8bdd2ac63b36f19b019ee064105215705a9c35c6f9f21ac3f17
|
7
|
+
data.tar.gz: '0319e82f2f7ede315c91a6d863d06fe4d9548d119541e08e2bb0c47bf7d8709cfebd74b3c943f638e8a45765e53b935d0becd54cf5755432a920be7b2132bc31'
|
data/ChangeLog.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -18,11 +18,10 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
gem.add_dependency "fluentd", [">= 0.
|
21
|
+
gem.add_dependency "fluentd", [">= 0.14.15", "< 2"]
|
22
22
|
gem.add_dependency "rest-client"
|
23
23
|
gem.add_dependency "azure-loganalytics-datacollector-api", [">= 0.1.2"]
|
24
24
|
gem.add_development_dependency "bundler", "~> 1.11"
|
25
25
|
gem.add_development_dependency "rake", "~> 10.0"
|
26
26
|
gem.add_development_dependency "test-unit"
|
27
27
|
end
|
28
|
-
|
@@ -1,15 +1,16 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
require 'msgpack'
|
3
|
+
require 'time'
|
4
|
+
require "azure/loganalytics/datacollectorapi/client"
|
5
|
+
require 'fluent/plugin/output'
|
2
6
|
|
3
|
-
module Fluent
|
4
|
-
class AzureLogAnalyticsOutput <
|
5
|
-
Plugin.register_output('azure-loganalytics', self)
|
7
|
+
module Fluent::Plugin
|
8
|
+
class AzureLogAnalyticsOutput < Output
|
9
|
+
Fluent::Plugin.register_output('azure-loganalytics', self)
|
6
10
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
require 'time'
|
11
|
-
require "azure/loganalytics/datacollectorapi/client"
|
12
|
-
end
|
11
|
+
helpers :compat_parameters
|
12
|
+
|
13
|
+
DEFAULT_BUFFER_TYPE = "memory"
|
13
14
|
|
14
15
|
config_param :customer_id, :string,
|
15
16
|
:desc => "Your Operations Management Suite workspace ID"
|
@@ -32,18 +33,24 @@ module Fluent
|
|
32
33
|
config_param :tag_field_name, :string, :default => "tag",
|
33
34
|
:desc => "This is required only when add_time_field is true"
|
34
35
|
|
36
|
+
config_section :buffer do
|
37
|
+
config_set_default :@type, DEFAULT_BUFFER_TYPE
|
38
|
+
config_set_default :chunk_keys, ['tag']
|
39
|
+
end
|
40
|
+
|
35
41
|
def configure(conf)
|
42
|
+
compat_parameters_convert(conf, :buffer)
|
36
43
|
super
|
37
|
-
raise ConfigError, 'no customer_id' if @customer_id.empty?
|
38
|
-
raise ConfigError, 'no shared_key' if @shared_key.empty?
|
39
|
-
raise ConfigError, 'no log_type' if @log_type.empty?
|
44
|
+
raise Fluent::ConfigError, 'no customer_id' if @customer_id.empty?
|
45
|
+
raise Fluent::ConfigError, 'no shared_key' if @shared_key.empty?
|
46
|
+
raise Fluent::ConfigError, 'no log_type' if @log_type.empty?
|
40
47
|
if @add_time_field and @time_field_name.empty?
|
41
|
-
raise ConfigError, 'time_field_name must be set if add_time_field is true'
|
48
|
+
raise Fluent::ConfigError, 'time_field_name must be set if add_time_field is true'
|
42
49
|
end
|
43
50
|
if @add_tag_field and @tag_field_name.empty?
|
44
|
-
raise ConfigError, 'tag_field_name must be set if add_tag_field is true'
|
51
|
+
raise Fluent::ConfigError, 'tag_field_name must be set if add_tag_field is true'
|
45
52
|
end
|
46
|
-
@timef = TimeFormatter.new(@time_format, @localtime)
|
53
|
+
@timef = Fluent::TimeFormatter.new(@time_format, @localtime)
|
47
54
|
end
|
48
55
|
|
49
56
|
def start
|
@@ -67,6 +74,14 @@ module Fluent
|
|
67
74
|
record.to_msgpack
|
68
75
|
end
|
69
76
|
|
77
|
+
def formatted_to_msgpack_binary?
|
78
|
+
true
|
79
|
+
end
|
80
|
+
|
81
|
+
def multi_workers_ready?
|
82
|
+
true
|
83
|
+
end
|
84
|
+
|
70
85
|
def write(chunk)
|
71
86
|
records = []
|
72
87
|
chunk.msgpack_each { |record|
|
@@ -75,11 +90,11 @@ module Fluent
|
|
75
90
|
begin
|
76
91
|
res = @client.post_data(@log_type, records, @time_generated_field)
|
77
92
|
if not Azure::Loganalytics::Datacollectorapi::Client.is_success(res)
|
78
|
-
|
93
|
+
log.fatal "DataCollector API request failure: error code: "
|
79
94
|
+ "#{res.code}, data=>" + records.to_json
|
80
95
|
end
|
81
96
|
rescue Exception => ex
|
82
|
-
|
97
|
+
log.fatal "Exception occured in posting to DataCollector API: "
|
83
98
|
+ "'#{ex}', data=>" + records.to_json
|
84
99
|
end
|
85
100
|
end
|
data/test/helper.rb
CHANGED
@@ -23,7 +23,10 @@ unless ENV.has_key?('VERBOSE')
|
|
23
23
|
$log = nulllogger
|
24
24
|
end
|
25
25
|
|
26
|
+
require 'fluent/test/driver/output'
|
27
|
+
require 'fluent/test/helpers'
|
26
28
|
require 'fluent/plugin/out_azure-loganalytics'
|
27
29
|
|
28
30
|
class Test::Unit::TestCase
|
31
|
+
include Fluent::Test::Helpers
|
29
32
|
end
|
@@ -16,68 +16,77 @@ class AzureLogAnalyticsOutputTest < Test::Unit::TestCase
|
|
16
16
|
tag_field_name tag
|
17
17
|
]
|
18
18
|
|
19
|
-
def create_driver(conf = CONFIG
|
20
|
-
Fluent::Test::
|
19
|
+
def create_driver(conf = CONFIG)
|
20
|
+
Fluent::Test::Driver::Output.new(Fluent::Plugin::AzureLogAnalyticsOutput).configure(conf)
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_configure
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
d = create_driver
|
25
|
+
assert_equal '<Customer ID aka WorkspaceID String>', d.instance.customer_id
|
26
|
+
assert_equal '<Primary Key String>', d.instance.shared_key
|
27
|
+
assert_equal 'ApacheAccessLog', d.instance.log_type
|
28
|
+
assert_true d.instance.add_time_field
|
29
|
+
assert_true d.instance.localtime
|
30
|
+
assert_true d.instance.add_tag_field
|
31
|
+
assert_equal 'tag', d.instance.tag_field_name
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_format
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
35
|
+
d = create_driver
|
36
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
37
|
+
d.run(default_tag: 'test') do
|
38
|
+
d.feed(time, {"a"=>1})
|
39
|
+
d.feed(time, {"a"=>2})
|
40
|
+
end
|
41
|
+
formatted = d.formatted
|
42
|
+
unpacker = Fluent::Engine.msgpack_factory.unpacker
|
43
|
+
formatted.each_with_index {|f, idx|
|
44
|
+
unpacker.feed_each(f).each {|e|
|
45
|
+
assert_equal idx+1, e["a"]
|
46
|
+
assert_equal "test", e["tag"]
|
47
|
+
assert_equal "#{time.to_i}", e["time"]
|
48
|
+
}
|
49
|
+
}
|
44
50
|
end
|
45
51
|
|
46
52
|
def test_write
|
47
53
|
d = create_driver
|
48
54
|
|
49
|
-
time =
|
50
|
-
d.
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
{
|
67
|
-
:Log_ID => "7260iswx-8034-4cc3-uirtx-f068dd4cd659",
|
68
|
-
:date => "2016-12-10 09:45:14 JST",
|
69
|
-
:processing_time => "105",
|
70
|
-
:remote => "201.78.74.59",
|
71
|
-
:user => "-",
|
72
|
-
:method => "GET /manager/html HTTP/1.1",
|
73
|
-
:status =>"200",
|
74
|
-
:size => "-",
|
75
|
-
:referer => "-",
|
76
|
-
:agent => "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
|
77
|
-
:eventtime => "2016-12-10T09:45:14Z"
|
78
|
-
}, time)
|
55
|
+
time = event_time("2016-12-10 13:14:15 UTC")
|
56
|
+
d.run(default_tag: 'azure-loganalytics.test') do
|
57
|
+
d.feed(
|
58
|
+
time,
|
59
|
+
{
|
60
|
+
:Log_ID => "5cdad72f-c848-4df0-8aaa-ffe033e75d57",
|
61
|
+
:date => "2016-12-10 09:44:32 JST",
|
62
|
+
:processing_time => "372",
|
63
|
+
:remote => "101.202.74.59",
|
64
|
+
:user => "-",
|
65
|
+
:method => "GET / HTTP/1.1",
|
66
|
+
:status => "304",
|
67
|
+
:size => "-",
|
68
|
+
:referer => "-",
|
69
|
+
:agent => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:27.0) Gecko/20100101 Firefox/27.0",
|
70
|
+
:eventtime => "2016-12-10T09:44:32Z"
|
71
|
+
})
|
79
72
|
|
80
|
-
|
73
|
+
d.feed(
|
74
|
+
time,
|
75
|
+
{
|
76
|
+
:Log_ID => "7260iswx-8034-4cc3-uirtx-f068dd4cd659",
|
77
|
+
:date => "2016-12-10 09:45:14 JST",
|
78
|
+
:processing_time => "105",
|
79
|
+
:remote => "201.78.74.59",
|
80
|
+
:user => "-",
|
81
|
+
:method => "GET /manager/html HTTP/1.1",
|
82
|
+
:status =>"200",
|
83
|
+
:size => "-",
|
84
|
+
:referer => "-",
|
85
|
+
:agent => "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
|
86
|
+
:eventtime => "2016-12-10T09:45:14Z"
|
87
|
+
})
|
88
|
+
end
|
89
|
+
data = d.events
|
81
90
|
puts data
|
82
91
|
# ### FileOutput#write returns path
|
83
92
|
# path = d.run
|
@@ -85,4 +94,3 @@ class AzureLogAnalyticsOutputTest < Test::Unit::TestCase
|
|
85
94
|
# assert_equal expect_path, path
|
86
95
|
end
|
87
96
|
end
|
88
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-azure-loganalytics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoichi Kawasaki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.14.15
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '2'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.14.15
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '2'
|
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
141
|
version: '0'
|
142
142
|
requirements: []
|
143
143
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
144
|
+
rubygems_version: 2.5.2
|
145
145
|
signing_key:
|
146
146
|
specification_version: 4
|
147
147
|
summary: Azure Functions output plugin for Fluentd
|