logstash-output-syslog 2.0.2 → 2.1.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 -1
- data/README.md +3 -0
- data/lib/logstash/outputs/syslog.rb +36 -39
- data/logstash-output-syslog.gemspec +2 -1
- data/spec/outputs/syslog_spec.rb +49 -0
- metadata +27 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fed3005266aeadaa979f5943e57231766a852a1c
|
4
|
+
data.tar.gz: e9b7625982c94a62f18e80d7819fb23681ed65a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 876f0086824fb91936086645f1290f2864b450c301a9f5201512f8f3d75ed01d162cfe9ec203669a3578132b57a31b94729c18a33132d74f64ff624da8904880
|
7
|
+
data.tar.gz: cf49d0c4b980c542333d4691d3fb57d0f531439a8649cffb661b917795388a33bf42dbabfa7b6435c73626bb7eb3b82ee1223f347a517434d16654bfb8d2fdef
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
## 2.1.0
|
2
|
+
- reconnect on exception. added basic specs
|
3
|
+
|
1
4
|
## 2.0.0
|
2
|
-
- Plugins were updated to follow the new shutdown semantic, this mainly allows Logstash to instruct input plugins to terminate gracefully,
|
5
|
+
- Plugins were updated to follow the new shutdown semantic, this mainly allows Logstash to instruct input plugins to terminate gracefully,
|
3
6
|
instead of using Thread.raise on the plugins' threads. Ref: https://github.com/elastic/logstash/pull/3895
|
4
7
|
- Dependency on logstash-core update to 2.0
|
5
8
|
|
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Logstash Plugin
|
2
2
|
|
3
|
+
[](http://build-eu-00.elastic.co/view/LS%20Plugins/view/LS%20Outputs/job/logstash-plugin-output-syslog-unit/)
|
5
|
+
|
3
6
|
This is a plugin for [Logstash](https://github.com/elastic/logstash).
|
4
7
|
|
5
8
|
It is fully free and fully open source. The license is Apache 2.0, meaning you are pretty much free to use it however you want in whatever way.
|
@@ -57,10 +57,13 @@ class LogStash::Outputs::Syslog < LogStash::Outputs::Base
|
|
57
57
|
|
58
58
|
# syslog server address to connect to
|
59
59
|
config :host, :validate => :string, :required => true
|
60
|
-
|
60
|
+
|
61
61
|
# syslog server port to connect to
|
62
62
|
config :port, :validate => :number, :required => true
|
63
63
|
|
64
|
+
# when connection fails, retry interval in sec.
|
65
|
+
config :reconnect_interval, :validate => :number, :default => 1
|
66
|
+
|
64
67
|
# syslog server protocol. you can choose between udp and tcp
|
65
68
|
config :protocol, :validate => ["tcp", "udp"], :default => "udp"
|
66
69
|
|
@@ -84,71 +87,65 @@ class LogStash::Outputs::Syslog < LogStash::Outputs::Base
|
|
84
87
|
|
85
88
|
# message text to log
|
86
89
|
config :message, :validate => :string, :default => "%{message}"
|
87
|
-
|
90
|
+
|
88
91
|
# message id for syslog message
|
89
92
|
config :msgid, :validate => :string, :default => "-"
|
90
93
|
|
91
94
|
# syslog message format: you can choose between rfc3164 or rfc5424
|
92
95
|
config :rfc, :validate => ["rfc3164", "rfc5424"], :default => "rfc3164"
|
93
96
|
|
94
|
-
|
95
|
-
public
|
96
97
|
def register
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
private
|
101
|
-
def udp?
|
102
|
-
@protocol == "udp"
|
103
|
-
end
|
98
|
+
@client_socket = nil
|
104
99
|
|
105
|
-
|
106
|
-
|
107
|
-
@
|
108
|
-
end
|
100
|
+
facility_code = FACILITY_LABELS.index(@facility)
|
101
|
+
severity_code = SEVERITY_LABELS.index(@severity)
|
102
|
+
@priority = (facility_code * 8) + severity_code
|
109
103
|
|
110
|
-
|
111
|
-
|
112
|
-
if udp?
|
113
|
-
@client_socket = UDPSocket.new
|
114
|
-
@client_socket.connect(@host, @port)
|
115
|
-
else
|
116
|
-
@client_socket = TCPSocket.new(@host, @port)
|
117
|
-
end
|
104
|
+
# use instance variable to avoid string comparison for each event
|
105
|
+
@is_rfc3164 = (@rfc == "rfc3164")
|
118
106
|
end
|
119
107
|
|
120
|
-
public
|
121
108
|
def receive(event)
|
122
|
-
|
123
|
-
|
124
109
|
appname = event.sprintf(@appname)
|
125
110
|
procid = event.sprintf(@procid)
|
126
111
|
sourcehost = event.sprintf(@sourcehost)
|
127
112
|
|
128
|
-
|
129
|
-
|
130
|
-
severity_code = SEVERITY_LABELS.index(@severity)
|
131
|
-
|
132
|
-
priority = (facility_code * 8) + severity_code
|
133
|
-
|
134
|
-
if rfc3164?
|
113
|
+
if @is_rfc3164
|
135
114
|
timestamp = event.sprintf("%{+MMM dd HH:mm:ss}")
|
136
|
-
syslog_msg = "
|
115
|
+
syslog_msg = "<#{@priority.to_s}>#{timestamp} #{sourcehost} #{appname}[#{procid}]: #{event.sprintf(@message)}"
|
137
116
|
else
|
138
117
|
msgid = event.sprintf(@msgid)
|
139
118
|
timestamp = event.sprintf("%{+YYYY-MM-dd'T'HH:mm:ss.SSSZZ}")
|
140
|
-
syslog_msg = "
|
119
|
+
syslog_msg = "<#{@priority.to_s}>1 #{timestamp} #{sourcehost} #{appname} #{procid} #{msgid} - #{event.sprintf(@message)}"
|
141
120
|
end
|
142
121
|
|
143
122
|
begin
|
144
|
-
|
123
|
+
@client_socket ||= connect
|
145
124
|
@client_socket.write(syslog_msg + "\n")
|
146
125
|
rescue => e
|
147
|
-
@logger.warn(@protocol+" output exception", :host => @host, :port => @port,
|
148
|
-
:exception => e, :backtrace => e.backtrace)
|
126
|
+
@logger.warn("syslog " + @protocol + " output exception: closing, reconnecting and resending event", :host => @host, :port => @port, :exception => e, :backtrace => e.backtrace, :event => event)
|
149
127
|
@client_socket.close rescue nil
|
150
128
|
@client_socket = nil
|
129
|
+
|
130
|
+
sleep(@reconnect_interval)
|
131
|
+
retry
|
151
132
|
end
|
152
133
|
end
|
153
|
-
end
|
154
134
|
|
135
|
+
private
|
136
|
+
|
137
|
+
def udp?
|
138
|
+
@protocol == "udp"
|
139
|
+
end
|
140
|
+
|
141
|
+
def connect
|
142
|
+
socket = nil
|
143
|
+
if udp?
|
144
|
+
socket = UDPSocket.new
|
145
|
+
socket.connect(@host, @port)
|
146
|
+
else
|
147
|
+
socket = TCPSocket.new(@host, @port)
|
148
|
+
end
|
149
|
+
socket
|
150
|
+
end
|
151
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-output-syslog'
|
4
|
-
s.version = '2.0
|
4
|
+
s.version = '2.1.0'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Send events to a syslog server."
|
7
7
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
@@ -23,5 +23,6 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_runtime_dependency "logstash-core", ">= 2.0.0.beta2", "< 3.0.0"
|
24
24
|
|
25
25
|
s.add_development_dependency 'logstash-devutils'
|
26
|
+
s.add_development_dependency 'logstash-codec-plain'
|
26
27
|
end
|
27
28
|
|
data/spec/outputs/syslog_spec.rb
CHANGED
@@ -1 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require "logstash/devutils/rspec/spec_helper"
|
4
|
+
require "logstash/outputs/syslog"
|
5
|
+
|
6
|
+
describe LogStash::Outputs::Syslog do
|
7
|
+
|
8
|
+
it "should register without errors" do
|
9
|
+
plugin = LogStash::Plugin.lookup("output", "syslog").new({"host" => "foo", "port" => "123", "facility" => "kernel", "severity" => "emergency"})
|
10
|
+
expect { plugin.register }.to_not raise_error
|
11
|
+
end
|
12
|
+
|
13
|
+
subject do
|
14
|
+
plugin = LogStash::Plugin.lookup("output", "syslog").new(options)
|
15
|
+
plugin.register
|
16
|
+
plugin
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:socket) { double("fake socket") }
|
20
|
+
let(:event) { LogStash::Event.new({"message" => "bar", "host" => "baz"}) }
|
21
|
+
|
22
|
+
shared_examples "syslog output" do
|
23
|
+
it "should write expected format" do
|
24
|
+
expect(subject).to receive(:connect).and_return(socket)
|
25
|
+
expect(socket).to receive(:write).with(output)
|
26
|
+
subject.receive(event)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "rfc 3164 and udp by default" do
|
31
|
+
let(:options) { {"host" => "foo", "port" => "123", "facility" => "kernel", "severity" => "emergency"} }
|
32
|
+
let(:output) { /^<0>.+baz LOGSTASH\[-\]: bar\n/m }
|
33
|
+
|
34
|
+
it_behaves_like "syslog output"
|
35
|
+
end
|
36
|
+
|
37
|
+
context "rfc 5424 and tcp" do
|
38
|
+
let(:options) { {"rfc" => "rfc5424", "protocol" => "tcp", "host" => "foo", "port" => "123", "facility" => "kernel", "severity" => "emergency"} }
|
39
|
+
let(:output) { /^<0>1 .+baz LOGSTASH - - - bar\n/m }
|
40
|
+
|
41
|
+
it_behaves_like "syslog output"
|
42
|
+
end
|
43
|
+
|
44
|
+
context "calculate priority" do
|
45
|
+
let(:options) { {"host" => "foo", "port" => "123", "facility" => "mail", "severity" => "critical"} }
|
46
|
+
let(:output) { /^<18>.+baz LOGSTASH\[-\]: bar\n/m }
|
47
|
+
|
48
|
+
it_behaves_like "syslog output"
|
49
|
+
end
|
50
|
+
end
|
metadata
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-output-syslog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
|
14
|
+
name: logstash-core
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - '>='
|
17
18
|
- !ruby/object:Gem::Version
|
@@ -19,10 +20,7 @@ dependencies:
|
|
19
20
|
- - <
|
20
21
|
- !ruby/object:Gem::Version
|
21
22
|
version: 3.0.0
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
type: :runtime
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirement: !ruby/object:Gem::Requirement
|
26
24
|
requirements:
|
27
25
|
- - '>='
|
28
26
|
- !ruby/object:Gem::Version
|
@@ -30,35 +28,51 @@ dependencies:
|
|
30
28
|
- - <
|
31
29
|
- !ruby/object:Gem::Version
|
32
30
|
version: 3.0.0
|
31
|
+
prerelease: false
|
32
|
+
type: :runtime
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
+
name: logstash-devutils
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
34
40
|
requirement: !ruby/object:Gem::Requirement
|
35
41
|
requirements:
|
36
42
|
- - '>='
|
37
43
|
- !ruby/object:Gem::Version
|
38
44
|
version: '0'
|
39
|
-
name: logstash-devutils
|
40
45
|
prerelease: false
|
41
46
|
type: :development
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: logstash-codec-plain
|
42
49
|
version_requirements: !ruby/object:Gem::Requirement
|
43
50
|
requirements:
|
44
51
|
- - '>='
|
45
52
|
- !ruby/object:Gem::Version
|
46
53
|
version: '0'
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
prerelease: false
|
60
|
+
type: :development
|
47
61
|
description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
|
48
62
|
email: info@elastic.co
|
49
63
|
executables: []
|
50
64
|
extensions: []
|
51
65
|
extra_rdoc_files: []
|
52
66
|
files:
|
67
|
+
- lib/logstash/outputs/syslog.rb
|
68
|
+
- spec/outputs/syslog_spec.rb
|
69
|
+
- logstash-output-syslog.gemspec
|
53
70
|
- CHANGELOG.md
|
71
|
+
- README.md
|
54
72
|
- CONTRIBUTORS
|
55
73
|
- Gemfile
|
56
74
|
- LICENSE
|
57
75
|
- NOTICE.TXT
|
58
|
-
- README.md
|
59
|
-
- lib/logstash/outputs/syslog.rb
|
60
|
-
- logstash-output-syslog.gemspec
|
61
|
-
- spec/outputs/syslog_spec.rb
|
62
76
|
homepage: http://www.elastic.co/guide/en/logstash/current/index.html
|
63
77
|
licenses:
|
64
78
|
- Apache License (2.0)
|
@@ -81,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
95
|
version: '0'
|
82
96
|
requirements: []
|
83
97
|
rubyforge_project:
|
84
|
-
rubygems_version: 2.
|
98
|
+
rubygems_version: 2.1.9
|
85
99
|
signing_key:
|
86
100
|
specification_version: 4
|
87
101
|
summary: Send events to a syslog server.
|