fluent-plugin-logmatic 0.9.0 → 0.9.1
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/README.md +19 -1
- data/fluent-plugin-logmatic.gemspec +2 -1
- data/lib/fluent/plugin/out_logmatic.rb +4 -2
- data/lib/fluent/plugin/out_logmatic_http.rb +39 -24
- metadata +24 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a30e2c66cf206b595f59ba1be9bbd34a0c3ac26
|
4
|
+
data.tar.gz: 3a426bb92f291ade3dbbe01d669c7f68c97937a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbc9ec516620c079c5c00ad5948e398fa814d4982f15a8d43909d8e19d3af7cb32205ac6922ba4aa93ce6f3c61cb56114840f345590f7b1c89e1d5bb7ef9fd07
|
7
|
+
data.tar.gz: 30d38f4691524a4641f23ea69db610ce9a32ee6d4ce0260eed1a8cc00cddbd54e8ca4b724f347b4f4886a400ef5ed00840058b168a95e9cc96af49e1dd76bad1
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Fluentd output plugin for Logmatic.io.
|
2
|
-
Link to the [Logmatic.io documentation](http://doc.logmatic.io/docs/using-fluentd)
|
2
|
+
Link to the [Logmatic.io documentation](http://doc.logmatic.io/docs/using-fluentd)
|
3
3
|
|
4
4
|
|
5
5
|
It mainly contains a proper JSON formatter and a socket handler that
|
@@ -17,6 +17,7 @@ To add the plugin to your fluentd agent, use the following command:
|
|
17
17
|
|
18
18
|
To match events and send them to logmatic.io, simply add the following code to your configuration file.
|
19
19
|
|
20
|
+
TCP example
|
20
21
|
```xml
|
21
22
|
# Match events tagged with "logmatic.**" and
|
22
23
|
# send them to Logmatic.io
|
@@ -32,6 +33,23 @@ To match events and send them to logmatic.io, simply add the following code to y
|
|
32
33
|
|
33
34
|
</match>
|
34
35
|
|
36
|
+
```
|
37
|
+
HTTP example
|
38
|
+
```xml
|
39
|
+
# Match events tagged with "logmatic.**" and
|
40
|
+
# send them to Logmatic.io
|
41
|
+
<match logmatic.**>
|
42
|
+
|
43
|
+
@type logmatic_http
|
44
|
+
@id awesome_agent
|
45
|
+
api_key <your_api_key>
|
46
|
+
|
47
|
+
# Optional
|
48
|
+
include_tag_key true
|
49
|
+
tag_key 'tag'
|
50
|
+
|
51
|
+
</match>
|
52
|
+
|
35
53
|
```
|
36
54
|
|
37
55
|
After a restart of FluentD, any child events tagged with `logmatic` are shipped to your plateform.
|
@@ -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-logmatic"
|
7
|
-
spec.version = "0.9.
|
7
|
+
spec.version = "0.9.1"
|
8
8
|
spec.authors = ["Logmatic support team"]
|
9
9
|
spec.email = ["support@logmatic.io"]
|
10
10
|
spec.summary = "Logmatic output plugin for Fluent event collector"
|
@@ -18,4 +18,5 @@ Gem::Specification.new do |spec|
|
|
18
18
|
|
19
19
|
spec.add_development_dependency "bundler", "~> 1.5"
|
20
20
|
spec.add_development_dependency "rake"
|
21
|
+
spec.add_development_dependency "yajl-ruby", "~> 1.2"
|
21
22
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require 'openssl'
|
3
|
+
require 'yajl'
|
3
4
|
|
4
5
|
class Fluent::LogmaticOutput < Fluent::BufferedOutput
|
5
6
|
class ConnectionFailure < StandardError; end
|
@@ -75,12 +76,13 @@ class Fluent::LogmaticOutput < Fluent::BufferedOutput
|
|
75
76
|
messages = Array.new
|
76
77
|
chunk.msgpack_each do |tag, record|
|
77
78
|
next unless record.is_a? Hash
|
78
|
-
next unless
|
79
|
+
next unless record.has_key? "message"
|
80
|
+
|
79
81
|
if @include_tag_key
|
80
82
|
record[@tag_key] = tag
|
81
83
|
end
|
82
84
|
if @use_json
|
83
|
-
messages.push "#{api_key} " + record
|
85
|
+
messages.push "#{api_key} " + Yajl.dump(record) + "\n"
|
84
86
|
else
|
85
87
|
messages.push "#{api_key} " + record["message"].rstrip() + "\n"
|
86
88
|
end
|
@@ -1,3 +1,8 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
require 'uri'
|
4
|
+
require 'yajl'
|
5
|
+
|
1
6
|
class Fluent::LogmaticOutput < Fluent::BufferedOutput
|
2
7
|
class ConnectionFailure < StandardError;
|
3
8
|
end
|
@@ -20,9 +25,6 @@ class Fluent::LogmaticOutput < Fluent::BufferedOutput
|
|
20
25
|
|
21
26
|
def initialize
|
22
27
|
super
|
23
|
-
require 'net/http'
|
24
|
-
require 'net/https'
|
25
|
-
require 'uri'
|
26
28
|
end
|
27
29
|
|
28
30
|
def configure(conf)
|
@@ -56,45 +58,58 @@ class Fluent::LogmaticOutput < Fluent::BufferedOutput
|
|
56
58
|
|
57
59
|
# Pack messages
|
58
60
|
chunk.msgpack_each do |tag, record|
|
61
|
+
|
62
|
+
log.trace("New chunk received: #{record}, #{tag}")
|
59
63
|
next unless record.is_a? Hash
|
60
|
-
next unless
|
64
|
+
next unless record.has_key? "message"
|
65
|
+
|
61
66
|
|
62
67
|
if @include_tag_key
|
63
68
|
record[@tag_key] = tag
|
64
69
|
end
|
65
|
-
|
70
|
+
|
71
|
+
log.trace("Json message: #{Yajl.dump(record)}")
|
72
|
+
messages.push Yajl.dump(record)
|
66
73
|
end
|
67
74
|
|
68
75
|
# Send them
|
69
76
|
log.trace("Sending #{messages.length} messages")
|
70
77
|
retries = 0
|
71
|
-
|
78
|
+
force_retry = false
|
79
|
+
|
80
|
+
if (messages.length > 0)
|
72
81
|
|
73
|
-
|
74
|
-
|
75
|
-
req.body = data
|
76
|
-
log.trace("Posting data")
|
77
|
-
res = @https.request(messages.to_json)
|
78
|
-
log.trace("Status code: #{res.code}")
|
82
|
+
log.trace("Full message body: #{Yajl.dump(messages)}")
|
83
|
+
begin
|
79
84
|
|
80
|
-
|
81
|
-
|
85
|
+
force_retry = false
|
86
|
+
req = Net::HTTP::Post.new(@uri.path)
|
87
|
+
req['Content-Type'] = 'application/json'
|
88
|
+
req.body = Yajl.dump(messages)
|
89
|
+
log.trace("Posting data")
|
90
|
+
res = @https.request(req)
|
91
|
+
log.trace("Status code: #{res.code}")
|
82
92
|
|
83
|
-
|
84
|
-
|
85
|
-
retries += 1
|
86
|
-
log.warn "Could not push logs to Logmatic, attempt=#{retries} max_attempts=#{max_retries} wait=#{a_couple_of_seconds}s error=#{res.code}"
|
93
|
+
if (res.code.to_i != 0 && res.code.to_i != 200)
|
94
|
+
if retries < @max_retries || max_retries == -1
|
87
95
|
|
88
|
-
|
96
|
+
a_couple_of_seconds = retries ** 2
|
97
|
+
a_couple_of_seconds = 30 unless a_couple_of_seconds < 30
|
98
|
+
retries += 1
|
99
|
+
log.warn "Could not push logs to Logmatic, attempt=#{retries} max_attempts=#{max_retries} wait=#{a_couple_of_seconds}s error=#{res.code}"
|
89
100
|
|
90
|
-
|
101
|
+
sleep a_couple_of_seconds
|
102
|
+
force_retry = true
|
103
|
+
raise "Status code: #{res.code}"
|
91
104
|
|
105
|
+
end
|
92
106
|
end
|
107
|
+
rescue => e
|
108
|
+
# Handle some failures
|
109
|
+
log.error("Error while sending data. Making a new attempt. Error: #{e}")
|
110
|
+
retry if force_retry
|
111
|
+
raise ConnectionFailure, "Could not push logs to Logmatic after #{retries} retries, #{e.message}"
|
93
112
|
end
|
94
|
-
rescue => e
|
95
|
-
# Handle some failures
|
96
|
-
retry
|
97
|
-
raise ConnectionFailure, "Could not push logs to Logmatic after #{retries} retries, #{e.message}"
|
98
113
|
end
|
99
114
|
end
|
100
115
|
|
metadata
CHANGED
@@ -1,43 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-logmatic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Logmatic support team
|
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: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.5'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yajl-ruby
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.2'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
41
55
|
description:
|
42
56
|
email:
|
43
57
|
- support@logmatic.io
|
@@ -45,7 +59,7 @@ executables: []
|
|
45
59
|
extensions: []
|
46
60
|
extra_rdoc_files: []
|
47
61
|
files:
|
48
|
-
-
|
62
|
+
- .gitignore
|
49
63
|
- Gemfile
|
50
64
|
- LICENSE
|
51
65
|
- README.md
|
@@ -63,17 +77,17 @@ require_paths:
|
|
63
77
|
- lib
|
64
78
|
required_ruby_version: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - '>='
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
84
|
requirements:
|
71
|
-
- -
|
85
|
+
- - '>='
|
72
86
|
- !ruby/object:Gem::Version
|
73
87
|
version: '0'
|
74
88
|
requirements: []
|
75
89
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
90
|
+
rubygems_version: 2.0.14.1
|
77
91
|
signing_key:
|
78
92
|
specification_version: 4
|
79
93
|
summary: Logmatic output plugin for Fluent event collector
|