fluent-plugin-papertrail 0.1.3 → 0.1.4
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 +17 -2
- data/docker/Dockerfile +1 -1
- data/docker/conf/kubernetes.conf +2 -0
- data/fluent-plugin-papertrail.gemspec +1 -1
- data/kubernetes/fluentd-daemonset-papertrail.yaml +1 -1
- data/lib/fluent/plugin/out_papertrail.rb +36 -15
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c23981bf5baa13f2c2d8a8ec0dd586a37b5db034
|
4
|
+
data.tar.gz: 29a543b565b6a14d407f6daacced1b8a7ea2eb35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a91ac215ba2fcc071522845b42d4e5ec78566747a176d155605f8689195b5e2bdba809808337d7ba77b02a55000791333fba1ba4230ccd55885c6009c4e2df48
|
7
|
+
data.tar.gz: 1e421735baa691d46ba660717dc64d46f472983e0ca069203f29bfd18e6c3d6a7599885259308e1dfc516d68ad73c34c97d1ca26275ee51f0bd5007ca1941673
|
data/README.md
CHANGED
@@ -83,9 +83,9 @@ If you want to change any of these parameters simply add them to a match stanza.
|
|
83
83
|
|
84
84
|
## Kubernetes
|
85
85
|
|
86
|
-
This repo
|
86
|
+
This repo includes a Kubernetes DaemonSet and accompanying Docker container which will stream all of your Kubernetes logs, containers and services, to Papertrail.
|
87
87
|
|
88
|
-
|
88
|
+
To deploy this plugin as a DaemonSet to your Kubernetes cluster, just adjust the `FLUENT_*` environment variables in `kubernetes/fluentd-daemonset-papertrail.yaml` and push it to your cluster with:
|
89
89
|
|
90
90
|
```
|
91
91
|
kubectl apply -f kubernetes/fluentd-daemonset-papertrail.yaml
|
@@ -93,6 +93,19 @@ kubectl apply -f kubernetes/fluentd-daemonset-papertrail.yaml
|
|
93
93
|
|
94
94
|
The Dockerfile that generates [the image used in this DaemonSet](https://quay.io/repository/solarwinds/fluentd-kubernetes), can be found at `docker/Dockerfile`.
|
95
95
|
|
96
|
+
### Annotations
|
97
|
+
|
98
|
+
You can redirect logs to alternate Papertrail destinations by adding annotations to your Pods or Namespaces:
|
99
|
+
|
100
|
+
```
|
101
|
+
solarwinds.io/papertrail_host: 'logs0.papertrailapp.com'
|
102
|
+
solarwinds.io/papertrail_port: '12345'
|
103
|
+
```
|
104
|
+
|
105
|
+
If both the Pod and Namespace have annotations for any running Pod, the Pod's annotation is used.
|
106
|
+
|
107
|
+
### Audit Logs
|
108
|
+
|
96
109
|
If you'd like to redirect Kubernetes API Server Audit logs to a seperate Papertrail destination, add the following to your `fluent.conf`:
|
97
110
|
```
|
98
111
|
<match kube-apiserver-audit>
|
@@ -104,6 +117,8 @@ If you'd like to redirect Kubernetes API Server Audit logs to a seperate Papertr
|
|
104
117
|
</match>
|
105
118
|
```
|
106
119
|
|
120
|
+
This requires you to configure an [audit policy file](https://kubernetes.io/docs/tasks/debug-application-cluster/audit/) on your cluster.
|
121
|
+
|
107
122
|
## Development
|
108
123
|
|
109
124
|
This plugin is targeting Ruby 2.4 and Fluentd v1.0, although it should work with older versions of both.
|
data/docker/Dockerfile
CHANGED
@@ -13,7 +13,7 @@ RUN apt-get update \
|
|
13
13
|
RUN echo 'gem: --no-document' >> /etc/gemrc \
|
14
14
|
&& gem install fluent-plugin-systemd -v 0.3.1 \
|
15
15
|
&& gem install fluent-plugin-rewrite-tag-filter -v 1.6.0 \
|
16
|
-
&& gem install fluent-plugin-papertrail -v 0.1.
|
16
|
+
&& gem install fluent-plugin-papertrail -v 0.1.4 \
|
17
17
|
&& gem install fluent-plugin-kubernetes_metadata_filter
|
18
18
|
|
19
19
|
RUN SUDO_FORCE_REMOVE=yes \
|
data/docker/conf/kubernetes.conf
CHANGED
@@ -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-papertrail"
|
7
|
-
spec.version = "0.1.
|
7
|
+
spec.version = "0.1.4"
|
8
8
|
spec.authors = ["Jonathan Lozinski", "Alex Ouzounis", "Chris Rust"]
|
9
9
|
spec.email = ["jonathan.lozinski@solarwinds.com", "alex.ouzounis@solarwinds.com", "chris.rust@solarwinds.com"]
|
10
10
|
|
@@ -22,7 +22,7 @@ spec:
|
|
22
22
|
effect: NoSchedule
|
23
23
|
containers:
|
24
24
|
- name: fluentd
|
25
|
-
image: quay.io/solarwinds/fluentd-kubernetes:v1.1.1-debian-papertrail
|
25
|
+
image: quay.io/solarwinds/fluentd-kubernetes:v1.1.1-debian-papertrail-0.1.4
|
26
26
|
imagePullPolicy: Always
|
27
27
|
env:
|
28
28
|
- name: FLUENT_PAPERTRAIL_HOST
|
@@ -3,7 +3,7 @@ require 'syslog_protocol'
|
|
3
3
|
module Fluent
|
4
4
|
class Papertrail < Fluent::BufferedOutput
|
5
5
|
class SocketFailureError < StandardError; end
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :sockets
|
7
7
|
|
8
8
|
# if left empty in fluent config these config_param's will error
|
9
9
|
config_param :papertrail_host, :string
|
@@ -13,13 +13,16 @@ module Fluent
|
|
13
13
|
# overriding default flush_interval (60 sec) from Fluent::BufferedOutput
|
14
14
|
config_param :flush_interval, :time, default: 1
|
15
15
|
|
16
|
-
|
17
16
|
# register as 'papertrail' fluent plugin
|
18
17
|
Fluent::Plugin.register_output('papertrail', self)
|
19
18
|
|
20
19
|
def configure(conf)
|
21
20
|
super
|
22
|
-
|
21
|
+
# create initial sockets hash and socket based on config param
|
22
|
+
@sockets = {}
|
23
|
+
socket_key = "#{@papertrail_host}:#{@papertrail_port}"
|
24
|
+
@sockets[socket_key] = create_socket(@papertrail_host, @papertrail_port)
|
25
|
+
# redefine default hostname if it's been passed in through ENV
|
23
26
|
@default_hostname = ENV['FLUENT_HOSTNAME'] || @default_hostname
|
24
27
|
end
|
25
28
|
|
@@ -29,8 +32,9 @@ module Fluent
|
|
29
32
|
|
30
33
|
def write(chunk)
|
31
34
|
chunk.msgpack_each {|(tag, time, record)|
|
35
|
+
socket_key = pick_socket(record)
|
32
36
|
packet = create_packet(tag, time, record)
|
33
|
-
send_to_papertrail(packet)
|
37
|
+
send_to_papertrail(packet, socket_key)
|
34
38
|
}
|
35
39
|
end
|
36
40
|
|
@@ -51,7 +55,7 @@ module Fluent
|
|
51
55
|
ssl
|
52
56
|
end
|
53
57
|
|
54
|
-
def create_packet(tag,time,record)
|
58
|
+
def create_packet(tag, time, record)
|
55
59
|
# construct syslog packet from fluent record
|
56
60
|
packet = SyslogProtocol::Packet.new
|
57
61
|
packet.hostname = record['hostname'] || @default_hostname
|
@@ -63,25 +67,42 @@ module Fluent
|
|
63
67
|
packet
|
64
68
|
end
|
65
69
|
|
66
|
-
def
|
67
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
|
70
|
+
def pick_socket(record)
|
71
|
+
# if kubernetes pod has papertrail destination as annotation, use it
|
72
|
+
if record.dig('kubernetes', 'annotations', 'solarwinds_io/papertrail_host') && \
|
73
|
+
record.dig('kubernetes', 'annotations', 'solarwinds_io/papertrail_port')
|
74
|
+
host = record['kubernetes']['annotations']['solarwinds_io/papertrail_host']
|
75
|
+
port = record['kubernetes']['annotations']['solarwinds_io/papertrail_port']
|
76
|
+
# else if kubernetes namespace has papertrail destination as annotation, use it
|
77
|
+
elsif record.dig('kubernetes', 'namespace_annotations', 'solarwinds_io/papertrail_host') && \
|
78
|
+
record.dig('kubernetes', 'namespace_annotations', 'solarwinds_io/papertrail_port')
|
79
|
+
host = record['kubernetes']['namespace_annotations']['solarwinds_io/papertrail_host']
|
80
|
+
port = record['kubernetes']['namespace_annotations']['solarwinds_io/papertrail_port']
|
81
|
+
# else use pre-configured destination
|
82
|
+
else
|
83
|
+
host = @papertrail_host
|
84
|
+
port = @papertrail_port
|
85
|
+
end
|
86
|
+
socket_key = "#{host}:#{port}"
|
87
|
+
# recreate the socket if it's nil
|
88
|
+
@sockets[socket_key] ||= create_socket(host, port)
|
89
|
+
socket_key
|
90
|
+
end
|
71
91
|
|
72
|
-
|
73
|
-
|
92
|
+
def send_to_papertrail(packet, socket_key)
|
93
|
+
if @sockets[socket_key].nil?
|
94
|
+
err_msg = "Unable to create socket with #{socket_key}"
|
74
95
|
log.error err_msg
|
75
96
|
raise SocketFailureError, err_msg
|
76
97
|
else
|
77
98
|
begin
|
78
99
|
# send it
|
79
|
-
@
|
100
|
+
@sockets[socket_key].puts packet.assemble
|
80
101
|
rescue => e
|
81
|
-
err_msg = "Error writing to #{
|
102
|
+
err_msg = "Error writing to #{socket_key}: #{e}"
|
82
103
|
log.error err_msg
|
83
104
|
# socket failed, reset to nil to recreate for the next write
|
84
|
-
@
|
105
|
+
@sockets[socket_key] = nil
|
85
106
|
raise SocketFailureError, err_msg, e.backtrace
|
86
107
|
end
|
87
108
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-papertrail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Lozinski
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-03-
|
13
|
+
date: 2018-03-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: fluentd
|
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
160
|
version: '0'
|
161
161
|
requirements: []
|
162
162
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.5.2.2
|
164
164
|
signing_key:
|
165
165
|
specification_version: 4
|
166
166
|
summary: Remote Syslog Output Fluentd plugin for papertrail
|