remote_syslog 1.6.8 → 1.6.9

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.
data/README.md CHANGED
@@ -48,6 +48,7 @@ specified as command-line arguments (below).
48
48
  -s, --severity SEVERITY Severity (notice)
49
49
  --strip-color Strip color codes
50
50
  --tls Connect via TCP with TLS
51
+ --tcp Connect via TCP (no TLS)
51
52
  --new-file-check-interval INTERVAL
52
53
  Time between checks for new files
53
54
 
@@ -78,9 +79,9 @@ well as the file `/var/log/mysqld.log`. Send to port `logs.papertrailapp.com:123
78
79
 
79
80
  Stay attached to the terminal, look for and use `/etc/log_files.yml` if it
80
81
  exists, write PID to `/tmp/remote_syslog.pid`, and send with facility local0
81
- to `a.server.com:514`:
82
+ to `a.example.com:514`:
82
83
 
83
- $ remote_syslog -D -d a.server.com -f local0 -P /tmp /var/log/mysqld.log
84
+ $ remote_syslog -D -d a.example.com -f local0 --pid-file /tmp/remote_syslog.pid /var/log/mysqld.log
84
85
 
85
86
  ### Windows
86
87
 
@@ -190,10 +191,10 @@ matched.
190
191
  Run multiple instances to support more than one message-specific file format
191
192
  or to specify unique syslog hostnames.
192
193
 
193
- To do that, provide an alternate PID filename as a command-line option
194
- to the additional instance(s). For example:
194
+ To do that, provide an alternate PID path as a command-line option to the
195
+ additional instance(s). For example:
195
196
 
196
- --pid-file remote_syslog_2.pid
197
+ --pid-file /var/run/remote_syslog_2.pid
197
198
 
198
199
 
199
200
  ### Parse fields from log messages
@@ -13,7 +13,7 @@ prog="remote_syslog"
13
13
  config="/etc/log_files.yml"
14
14
  pid_dir="/var/run"
15
15
 
16
- EXTRAOPTIONS=""
16
+ EXTRAOPTIONS="--tls"
17
17
 
18
18
  pid_file="$pid_dir/$prog.pid"
19
19
 
@@ -29,7 +29,7 @@ start(){
29
29
  echo -n $"Starting $prog: "
30
30
 
31
31
  unset HOME MAIL USER USERNAME
32
- $prog -c $config -P $pid_dir "$EXTRAOPTIONS"
32
+ $prog -c $config --pid-file $pid_file "$EXTRAOPTIONS"
33
33
  RETVAL=$?
34
34
  echo
35
35
  return $RETVAL
@@ -1,4 +1,4 @@
1
1
  module RemoteSyslog
2
- VERSION = "1.6.8"
2
+ VERSION = "1.6.9"
3
3
  end
4
4
 
@@ -7,12 +7,16 @@ require 'remote_syslog/glob_watch'
7
7
  require 'remote_syslog/message_generator'
8
8
  require 'remote_syslog/udp_endpoint'
9
9
  require 'remote_syslog/tls_endpoint'
10
+ require 'remote_syslog/tcp_endpoint'
10
11
 
11
12
  module RemoteSyslog
12
13
  class Agent < Servolux::Server
13
14
  # Who should we connect to?
14
15
  attr_accessor :destination_host, :destination_port
15
16
 
17
+ # Should use TCP?
18
+ attr_accessor :tcp
19
+
16
20
  # Should use TLS?
17
21
  attr_accessor :tls
18
22
 
@@ -99,6 +103,11 @@ module RemoteSyslog
99
103
  :client_private_key => @client_private_key,
100
104
  :server_cert => @server_cert,
101
105
  :logger => logger)
106
+ elsif @tcp
107
+ max_message_size = 20480
108
+
109
+ connection = TcpEndpoint.new(@destination_host, @destination_port,
110
+ :logger => logger)
102
111
  else
103
112
  max_message_size = 1024
104
113
  connection = UdpEndpoint.new(@destination_host, @destination_port,
@@ -118,6 +127,16 @@ module RemoteSyslog
118
127
  end
119
128
  end
120
129
 
130
+ def endpoint_mode
131
+ @endpoint_mode ||= if @tls
132
+ 'TCP/TLS'
133
+ elsif @tcp
134
+ 'TCP'
135
+ else
136
+ 'UDP'
137
+ end
138
+ end
139
+
121
140
  def before_stopping
122
141
  EM.stop
123
142
  end
@@ -101,6 +101,9 @@ module RemoteSyslog
101
101
  opts.on("--strip-color", "Strip color codes") do
102
102
  @agent.strip_color = true
103
103
  end
104
+ opts.on("--tcp", "Connect via TCP (no TLS)") do
105
+ @agent.tcp = true
106
+ end
104
107
  opts.on("--tls", "Connect via TCP with TLS") do
105
108
  @agent.tls = true
106
109
  end
@@ -246,7 +249,7 @@ module RemoteSyslog
246
249
  end
247
250
 
248
251
  if @no_detach
249
- puts "Watching #{@agent.files.length} files/globs. Sending to #{@agent.destination_host}:#{@agent.destination_port} (#{@agent.tls ? 'TCP/TLS' : 'UDP'})."
252
+ puts "Watching #{@agent.files.length} files/globs. Sending to #{@agent.destination_host}:#{@agent.destination_port} (#{@agent.endpoint_mode})."
250
253
  @agent.run
251
254
  else
252
255
  daemon = Servolux::Daemon.new(:server => @agent, :after_fork => method(:redirect_io))
@@ -255,7 +258,7 @@ module RemoteSyslog
255
258
  error "Already running at #{@agent.pid_file}. To run another instance, specify a different `--pid-file`.", true
256
259
  end
257
260
 
258
- puts "Watching #{@agent.files.length} files/globs. Sending to #{@agent.destination_host}:#{@agent.destination_port} (#{@agent.tls ? 'TCP/TLS' : 'UDP'})."
261
+ puts "Watching #{@agent.files.length} files/globs. Sending to #{@agent.destination_host}:#{@agent.destination_port} (#{@agent.endpoint_mode})."
259
262
  daemon.startup
260
263
  end
261
264
  rescue Servolux::Daemon::StartupError => e
@@ -0,0 +1,87 @@
1
+ require 'eventmachine'
2
+
3
+ module RemoteSyslog
4
+ # Additional class that uses TCP but no TLS. Has the benefit of a greater max packet size
5
+ class TcpEndpoint
6
+ class Handler < EventMachine::Connection
7
+ def initialize(endpoint)
8
+ @endpoint = endpoint
9
+ super()
10
+ end
11
+
12
+ def connection_completed
13
+ @endpoint.connection = self
14
+ end
15
+
16
+ def unbind
17
+ @endpoint.unbind
18
+ end
19
+ end
20
+
21
+ attr_accessor :connection
22
+
23
+ attr_reader :logger
24
+
25
+ def initialize(address, port, options = {})
26
+ @address = address
27
+ @port = port.to_i
28
+ @queue_limit = options[:queue_limit] || 10_000
29
+ @logger = options[:logger] || Logger.new(STDERR)
30
+
31
+ # Try to resolve the address
32
+ resolve_address
33
+
34
+ # Every 60 seconds we'll see if the address has changed
35
+ EventMachine.add_periodic_timer(60) do
36
+ resolve_address
37
+ end
38
+
39
+ connect
40
+ end
41
+
42
+ def connection=(conn)
43
+ port, ip = Socket.unpack_sockaddr_in(conn.get_peername)
44
+ logger.debug "Connected to #{ip}:#{port}"
45
+ @connection = conn
46
+ end
47
+
48
+ def resolve_address
49
+ request = EventMachine::DnsResolver.resolve(@address)
50
+ request.callback do |addrs|
51
+ @cached_ip = addrs.first
52
+ end
53
+ end
54
+
55
+ def address
56
+ @cached_ip || @address
57
+ end
58
+
59
+ def connect
60
+ logger.debug "Connecting to #{address}:#{@port}"
61
+ EventMachine.connect(address, @port, TcpEndpoint::Handler, self)
62
+ end
63
+
64
+ def unbind
65
+ @connection = nil
66
+
67
+ EventMachine.add_timer(1) do
68
+ connect
69
+ end
70
+ end
71
+
72
+ def write(value)
73
+ if @connection
74
+ if @queue
75
+ @connection.send_data(@queue.join("\n") + "\n")
76
+ @queue = nil
77
+ end
78
+ @connection.send_data(value + "\n")
79
+ else
80
+ (@queue ||= []) << value
81
+
82
+ # Make sure our queue does not get to be too big
83
+ @queue.shift if @queue.length > @queue_limit
84
+ end
85
+ end
86
+ end
87
+ end
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  ## If your rubyforge_project name is different, then edit it and comment out
9
9
  ## the sub! line in the Rakefile
10
10
  s.name = 'remote_syslog'
11
- s.version = '1.6.8'
12
- s.date = '2012-10-23'
11
+ s.version = '1.6.9'
12
+ s.date = '2012-11-08'
13
13
  s.rubyforge_project = 'remote_syslog'
14
14
 
15
15
  ## Make sure your summary is short. The description may be as long
@@ -74,6 +74,7 @@ Gem::Specification.new do |s|
74
74
  lib/remote_syslog/file_tail_reader.rb
75
75
  lib/remote_syslog/glob_watch.rb
76
76
  lib/remote_syslog/message_generator.rb
77
+ lib/remote_syslog/tcp_endpoint.rb
77
78
  lib/remote_syslog/tls_endpoint.rb
78
79
  lib/remote_syslog/udp_endpoint.rb
79
80
  remote_syslog.gemspec
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 6
8
- - 8
9
- version: 1.6.8
8
+ - 9
9
+ version: 1.6.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Troy Davis
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-10-23 00:00:00 -07:00
18
+ date: 2012-11-08 00:00:00 -08:00
19
19
  default_executable: remote_syslog
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -132,6 +132,7 @@ files:
132
132
  - lib/remote_syslog/file_tail_reader.rb
133
133
  - lib/remote_syslog/glob_watch.rb
134
134
  - lib/remote_syslog/message_generator.rb
135
+ - lib/remote_syslog/tcp_endpoint.rb
135
136
  - lib/remote_syslog/tls_endpoint.rb
136
137
  - lib/remote_syslog/udp_endpoint.rb
137
138
  - remote_syslog.gemspec