fluent-plugin-sumologic_output 1.7.2 → 1.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +5 -0
- data/.gitignore +2 -1
- data/README.md +1 -0
- data/Vagrantfile +27 -0
- data/fluent-plugin-sumologic_output.gemspec +1 -1
- data/lib/fluent/plugin/out_sumologic.rb +8 -5
- data/test/plugin/test_out_sumologic.rb +84 -0
- data/vagrant/README.md +43 -0
- data/vagrant/provision.sh +27 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52b0c77e900d61ba360421933440383208033b29b0f08b012250519189872f24
|
4
|
+
data.tar.gz: ff86f952744e650e30ba94d1185f4d270a3d8d6e7bfee5f30a0810e043a9483f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74c43d262f35e2767d170a05dbec58911590c0851a724f6c4adb0047a26601383e4d8fa5e2671c845bbd89a65781fb0d35e4bc2f8d7ed6bd0f0e376d6c7ec958
|
7
|
+
data.tar.gz: 73b8ea2a6dbf4593eca7d4a702eeea14f27728bd7aa28ddc15e968301a5a2eb21f76ae18f1be2dd759f42cb357c2ceda92aec49e136755d76c954ebded889cdd
|
data/.github/CODEOWNERS
ADDED
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -28,6 +28,7 @@ Configuration options for fluent.conf are:
|
|
28
28
|
* json_merge - Same as json but merge content of `log_key` into the top level and strip `log_key`
|
29
29
|
* `log_key` - Used to specify the key when merging json or sending logs in text format (default `message`)
|
30
30
|
* `open_timeout` - Set timeout seconds to wait until connection is opened.
|
31
|
+
* `send_timeout` - Timeout for sending to SumoLogic in seconds. Don't modify unless you see `HTTPClient::SendTimeoutError` in your Fluentd logs. (default `120`)
|
31
32
|
* `add_timestamp` - Add `timestamp` (or `timestamp_key`) field to logs before sending to sumologic (default `true`)
|
32
33
|
* `timestamp_key` - Field name when `add_timestamp` is on (default `timestamp`)
|
33
34
|
* `proxy_uri` - Add the `uri` of the `proxy` environment if present.
|
data/Vagrantfile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
unless Vagrant.has_plugin?("vagrant-disksize")
|
5
|
+
puts "vagrant-disksize plugin unavailable\n" +
|
6
|
+
"please install it via 'vagrant plugin install vagrant-disksize'"
|
7
|
+
exit 1
|
8
|
+
end
|
9
|
+
|
10
|
+
Vagrant.configure('2') do |config|
|
11
|
+
config.vm.box = 'ubuntu/focal64'
|
12
|
+
config.disksize.size = '50GB'
|
13
|
+
config.vm.box_check_update = false
|
14
|
+
config.vm.host_name = 'fluentd-output-sumologic'
|
15
|
+
config.vm.network :private_network, ip: "192.168.78.45"
|
16
|
+
|
17
|
+
config.vm.provider 'virtualbox' do |vb|
|
18
|
+
vb.gui = false
|
19
|
+
vb.cpus = 8
|
20
|
+
vb.memory = 16384
|
21
|
+
vb.name = 'fluentd-output-sumologic'
|
22
|
+
end
|
23
|
+
|
24
|
+
config.vm.provision 'shell', path: 'vagrant/provision.sh'
|
25
|
+
|
26
|
+
config.vm.synced_folder ".", "/sumologic"
|
27
|
+
end
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.name = "fluent-plugin-sumologic_output"
|
7
|
-
gem.version = "1.7.
|
7
|
+
gem.version = "1.7.3"
|
8
8
|
gem.authors = ["Steven Adams", "Frank Reno"]
|
9
9
|
gem.email = ["stevezau@gmail.com", "frank.reno@me.com"]
|
10
10
|
gem.description = %q{Output plugin to SumoLogic HTTP Endpoint}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'fluent/plugin/output'
|
2
2
|
require 'net/https'
|
3
|
+
require 'json'
|
3
4
|
require 'yajl'
|
4
5
|
require 'httpclient'
|
5
6
|
require 'zlib'
|
@@ -12,10 +13,10 @@ class SumologicConnection
|
|
12
13
|
COMPRESS_DEFLATE = 'deflate'
|
13
14
|
COMPRESS_GZIP = 'gzip'
|
14
15
|
|
15
|
-
def initialize(endpoint, verify_ssl, connect_timeout, proxy_uri, disable_cookies, sumo_client, compress_enabled, compress_encoding)
|
16
|
+
def initialize(endpoint, verify_ssl, connect_timeout, send_timeout, proxy_uri, disable_cookies, sumo_client, compress_enabled, compress_encoding)
|
16
17
|
@endpoint = endpoint
|
17
18
|
@sumo_client = sumo_client
|
18
|
-
create_http_client(verify_ssl, connect_timeout, proxy_uri, disable_cookies)
|
19
|
+
create_http_client(verify_ssl, connect_timeout, send_timeout, proxy_uri, disable_cookies)
|
19
20
|
@compress = compress_enabled
|
20
21
|
@compress_encoding = (compress_encoding ||= COMPRESS_GZIP).downcase
|
21
22
|
|
@@ -69,10 +70,11 @@ class SumologicConnection
|
|
69
70
|
verify_ssl==true ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
|
70
71
|
end
|
71
72
|
|
72
|
-
def create_http_client(verify_ssl, connect_timeout, proxy_uri, disable_cookies)
|
73
|
+
def create_http_client(verify_ssl, connect_timeout, send_timeout, proxy_uri, disable_cookies)
|
73
74
|
@http = HTTPClient.new(proxy_uri)
|
74
75
|
@http.ssl_config.verify_mode = ssl_options(verify_ssl)
|
75
76
|
@http.connect_timeout = connect_timeout
|
77
|
+
@http.send_timeout = send_timeout
|
76
78
|
if disable_cookies
|
77
79
|
@http.cookie_manager = nil
|
78
80
|
end
|
@@ -126,6 +128,7 @@ class Fluent::Plugin::Sumologic < Fluent::Plugin::Output
|
|
126
128
|
config_param :verify_ssl, :bool, :default => true
|
127
129
|
config_param :delimiter, :string, :default => "."
|
128
130
|
config_param :open_timeout, :integer, :default => 60
|
131
|
+
config_param :send_timeout, :integer, :default => 120
|
129
132
|
config_param :add_timestamp, :bool, :default => true
|
130
133
|
config_param :timestamp_key, :string, :default => 'timestamp'
|
131
134
|
config_param :proxy_uri, :string, :default => nil
|
@@ -210,6 +213,7 @@ class Fluent::Plugin::Sumologic < Fluent::Plugin::Output
|
|
210
213
|
conf['endpoint'],
|
211
214
|
conf['verify_ssl'],
|
212
215
|
conf['open_timeout'].to_i,
|
216
|
+
conf['send_timeout'].to_i,
|
213
217
|
conf['proxy_uri'],
|
214
218
|
conf['disable_cookies'],
|
215
219
|
conf['sumo_client'],
|
@@ -249,8 +253,7 @@ class Fluent::Plugin::Sumologic < Fluent::Plugin::Output
|
|
249
253
|
def dump_log(log)
|
250
254
|
log.delete('_sumo_metadata')
|
251
255
|
begin
|
252
|
-
|
253
|
-
hash = parser.parse(log[@log_key])
|
256
|
+
hash = JSON.parse(log[@log_key])
|
254
257
|
log[@log_key] = hash
|
255
258
|
Yajl.dump(log)
|
256
259
|
rescue
|
@@ -713,4 +713,88 @@ class SumologicOutput < Test::Unit::TestCase
|
|
713
713
|
times:1
|
714
714
|
end
|
715
715
|
|
716
|
+
def test_emit_fields_string_based
|
717
|
+
config = %{
|
718
|
+
endpoint https://collectors.sumologic.com/v1/receivers/http/1234
|
719
|
+
log_format fields
|
720
|
+
source_category test
|
721
|
+
source_host test
|
722
|
+
source_name test
|
723
|
+
|
724
|
+
}
|
725
|
+
driver = create_driver(config)
|
726
|
+
time = event_time
|
727
|
+
stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
|
728
|
+
driver.run do
|
729
|
+
driver.feed("output.test", time, {'message' => '{"foo": "bar", "message": "test"}'})
|
730
|
+
end
|
731
|
+
assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
|
732
|
+
headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
|
733
|
+
body: /\A{"timestamp":\d+.,"message":{"foo":"bar","message":"test"}}\z/,
|
734
|
+
times:1
|
735
|
+
end
|
736
|
+
|
737
|
+
def test_emit_fields_invalid_json_string_based_1
|
738
|
+
config = %{
|
739
|
+
endpoint https://collectors.sumologic.com/v1/receivers/http/1234
|
740
|
+
log_format fields
|
741
|
+
source_category test
|
742
|
+
source_host test
|
743
|
+
source_name test
|
744
|
+
|
745
|
+
}
|
746
|
+
driver = create_driver(config)
|
747
|
+
time = event_time
|
748
|
+
stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
|
749
|
+
driver.run do
|
750
|
+
driver.feed("output.test", time, {'message' => '{"foo": "bar", "message": "test"'})
|
751
|
+
end
|
752
|
+
assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
|
753
|
+
headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
|
754
|
+
body: /\A{"timestamp":\d+.,"message":"{\\"foo\\": \\"bar\\", \\"message\\": \\"test\\""}\z/,
|
755
|
+
times:1
|
756
|
+
end
|
757
|
+
|
758
|
+
def test_emit_fields_invalid_json_string_based_2
|
759
|
+
config = %{
|
760
|
+
endpoint https://collectors.sumologic.com/v1/receivers/http/1234
|
761
|
+
log_format fields
|
762
|
+
source_category test
|
763
|
+
source_host test
|
764
|
+
source_name test
|
765
|
+
|
766
|
+
}
|
767
|
+
driver = create_driver(config)
|
768
|
+
time = event_time
|
769
|
+
stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
|
770
|
+
driver.run do
|
771
|
+
driver.feed("output.test", time, {'message' => '{"foo": "bar", "message"'})
|
772
|
+
end
|
773
|
+
assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
|
774
|
+
headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
|
775
|
+
body: /\A{"timestamp":\d+.,"message":"{\\"foo\\": \\"bar\\", \\"message\\""}\z/,
|
776
|
+
times:1
|
777
|
+
end
|
778
|
+
|
779
|
+
def test_emit_fields_invalid_json_string_based_3
|
780
|
+
config = %{
|
781
|
+
endpoint https://collectors.sumologic.com/v1/receivers/http/1234
|
782
|
+
log_format fields
|
783
|
+
source_category test
|
784
|
+
source_host test
|
785
|
+
source_name test
|
786
|
+
|
787
|
+
}
|
788
|
+
driver = create_driver(config)
|
789
|
+
time = event_time
|
790
|
+
stub_request(:post, 'https://collectors.sumologic.com/v1/receivers/http/1234')
|
791
|
+
driver.run do
|
792
|
+
driver.feed("output.test", time, {'message' => '"foo\": \"bar\", \"mess'})
|
793
|
+
end
|
794
|
+
assert_requested :post, "https://collectors.sumologic.com/v1/receivers/http/1234",
|
795
|
+
headers: {'X-Sumo-Category'=>'test', 'X-Sumo-Client'=>'fluentd-output', 'X-Sumo-Host'=>'test', 'X-Sumo-Name'=>'test'},
|
796
|
+
body: /\A{"timestamp":\d+.,"message":"\\"foo\\\\\\": \\\\\\"bar\\\\\\", \\\\\\"mess"}\z/,
|
797
|
+
times:1
|
798
|
+
end
|
799
|
+
|
716
800
|
end
|
data/vagrant/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Vagrant
|
2
|
+
|
3
|
+
## Prerequisites
|
4
|
+
|
5
|
+
Please install the following:
|
6
|
+
|
7
|
+
- [VirtualBox](https://www.virtualbox.org/)
|
8
|
+
- [Vagrant](https://www.vagrantup.com/)
|
9
|
+
- [vagrant-disksize](https://github.com/sprotheroe/vagrant-disksize) plugin
|
10
|
+
|
11
|
+
### MacOS
|
12
|
+
|
13
|
+
```bash
|
14
|
+
brew cask install virtualbox
|
15
|
+
brew cask install vagrant
|
16
|
+
vagrant plugin install vagrant-disksize
|
17
|
+
```
|
18
|
+
|
19
|
+
## Setting up
|
20
|
+
|
21
|
+
You can set up the Vagrant environment with just one command:
|
22
|
+
|
23
|
+
```bash
|
24
|
+
vagrant up
|
25
|
+
```
|
26
|
+
|
27
|
+
After successfull installation you can ssh to the virtual machine with:
|
28
|
+
|
29
|
+
```bash
|
30
|
+
vagrant ssh
|
31
|
+
```
|
32
|
+
|
33
|
+
NOTICE: The directory with fluentd-output-sumologic repository on the host is synced with `/sumologic/` directory on the virtual machine.
|
34
|
+
|
35
|
+
## Runing tests
|
36
|
+
|
37
|
+
You can run tests using following commands:
|
38
|
+
|
39
|
+
```bash
|
40
|
+
cd /sumologic
|
41
|
+
bundle install
|
42
|
+
bundle exec rake
|
43
|
+
```
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -x
|
4
|
+
|
5
|
+
export DEBIAN_FRONTEND=noninteractive
|
6
|
+
apt-get update
|
7
|
+
apt-get --yes upgrade
|
8
|
+
apt-get --yes install apt-transport-https
|
9
|
+
|
10
|
+
echo "export EDITOR=vim" >> /home/vagrant/.bashrc
|
11
|
+
|
12
|
+
# Install docker
|
13
|
+
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
|
14
|
+
add-apt-repository \
|
15
|
+
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
|
16
|
+
$(lsb_release -cs) \
|
17
|
+
stable"
|
18
|
+
apt-get install -y docker-ce docker-ce-cli containerd.io
|
19
|
+
usermod -aG docker vagrant
|
20
|
+
|
21
|
+
# Install make
|
22
|
+
apt-get install -y make
|
23
|
+
|
24
|
+
# install requirements for ruby
|
25
|
+
snap install ruby --channel=2.6/stable --classic
|
26
|
+
su vagrant -c 'gem install bundler:2.1.4'
|
27
|
+
apt install -y gcc g++ libsnappy-dev libicu-dev zlib1g-dev cmake pkg-config libssl-dev
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-sumologic_output
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Adams
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-10-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -103,6 +103,7 @@ executables: []
|
|
103
103
|
extensions: []
|
104
104
|
extra_rdoc_files: []
|
105
105
|
files:
|
106
|
+
- ".github/CODEOWNERS"
|
106
107
|
- ".gitignore"
|
107
108
|
- ".travis.yml"
|
108
109
|
- CHANGELOG.md
|
@@ -110,11 +111,14 @@ files:
|
|
110
111
|
- LICENSE
|
111
112
|
- README.md
|
112
113
|
- Rakefile
|
114
|
+
- Vagrantfile
|
113
115
|
- ci/build.sh
|
114
116
|
- fluent-plugin-sumologic_output.gemspec
|
115
117
|
- lib/fluent/plugin/out_sumologic.rb
|
116
118
|
- test/helper.rb
|
117
119
|
- test/plugin/test_out_sumologic.rb
|
120
|
+
- vagrant/README.md
|
121
|
+
- vagrant/provision.sh
|
118
122
|
homepage: https://github.com/SumoLogic/fluentd-output-sumologic
|
119
123
|
licenses:
|
120
124
|
- Apache-2.0
|