fluent-plugin-azure-loganalytics 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|