logstash-filter-docker_metadata 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14333113d790da8f7dcb90098edff17202415619
|
4
|
+
data.tar.gz: 32845e1df70de9b55094da11470edb0c9d89d5a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47377aa16c3664d128ba4fa9e3e74bf147826e4e9f2401bc0d2938c2c995e4c33735b8105bdf3f74081a1663b5fae4be821a32ed739e6fa1085ae57d5adbc932
|
7
|
+
data.tar.gz: e3b6c7c146f68229d9c37ca9a13aed3ff5f1fa84d085f108aff73340b158f1d6dc9dacbbfc69cc175337b2dc92e774bab43976195dcfed3089adf538a8ee0991
|
@@ -4,7 +4,9 @@ require "logstash/namespace"
|
|
4
4
|
require 'docker'
|
5
5
|
require 'json'
|
6
6
|
require 'lru_redux'
|
7
|
-
|
7
|
+
|
8
|
+
require_relative 'docker_hash'
|
9
|
+
# This example filter will replace the contents of the default
|
8
10
|
# message field with whatever you specify in the configuration.
|
9
11
|
#
|
10
12
|
# It is only intended to be used as an example.
|
@@ -12,7 +14,7 @@ class LogStash::Filters::DockerMetadata < LogStash::Filters::Base
|
|
12
14
|
|
13
15
|
# Setting the config_name here is required.
|
14
16
|
config_name "docker_metadata"
|
15
|
-
|
17
|
+
|
16
18
|
|
17
19
|
config :docker_url,
|
18
20
|
:validate => :string,
|
@@ -37,7 +39,7 @@ class LogStash::Filters::DockerMetadata < LogStash::Filters::Base
|
|
37
39
|
:default => '(\w{64})',
|
38
40
|
:required => false,
|
39
41
|
:deprecated => false
|
40
|
-
|
42
|
+
|
41
43
|
def get_metadata(container_id)
|
42
44
|
begin
|
43
45
|
Docker::Container.get(container_id).info
|
@@ -59,7 +61,7 @@ class LogStash::Filters::DockerMetadata < LogStash::Filters::Base
|
|
59
61
|
|
60
62
|
public
|
61
63
|
def register
|
62
|
-
# Add instance variables
|
64
|
+
# Add instance variables
|
63
65
|
Docker.url = @docker_url
|
64
66
|
|
65
67
|
@cache = LruRedux::ThreadSafeCache.new(@cache_size)
|
@@ -68,13 +70,11 @@ class LogStash::Filters::DockerMetadata < LogStash::Filters::Base
|
|
68
70
|
|
69
71
|
public
|
70
72
|
def filter(event)
|
71
|
-
|
72
73
|
# get container id from @field_docker_id field
|
73
74
|
if event[@field_docker_id]
|
74
75
|
container_id = event[@field_docker_id].match(@container_id_regexp_compiled)
|
75
76
|
end
|
76
77
|
|
77
|
-
|
78
78
|
if container_id && container_id[0]
|
79
79
|
container_id = container_id[0]
|
80
80
|
# try the cache else call the docker API
|
@@ -83,16 +83,17 @@ class LogStash::Filters::DockerMetadata < LogStash::Filters::Base
|
|
83
83
|
|
84
84
|
if metadata
|
85
85
|
# add a docker field with all informations
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
86
|
+
# Added as custom hash so we get easy IndifferentAccess as symbol keys
|
87
|
+
# proved pretty hard to work with in logstash config
|
88
|
+
event["docker"] = DockerHash.new
|
89
|
+
event["docker"][:id] = metadata['id']
|
90
|
+
event["docker"][:name] = metadata['Name']
|
91
|
+
event["docker"][:container_hostname] = metadata['Config']['Hostname'],
|
92
|
+
event["docker"][:image] = metadata['Config']['Image'],
|
93
|
+
event["docker"][:image_id] = metadata['Image'],
|
94
|
+
event["docker"][:labels] = metadata['Config']['Labels'],
|
95
|
+
event["docker"][:env] = self.format_env(metadata['Config']['Env'])
|
96
|
+
|
96
97
|
end
|
97
98
|
|
98
99
|
# filter_matched should go in the last line of our successful code
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-filter-docker_metadata'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.5'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = "This filter add docker metadata to messages that contain a docker ID. It's heavily inspired from https://github.com/fabric8io/fluent-plugin-docker_metadata_filter."
|
6
6
|
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"
|
@@ -18,10 +18,11 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
|
19
19
|
|
20
20
|
# Gem dependencies
|
21
|
-
s.add_runtime_dependency "logstash-core",
|
22
|
-
s.add_runtime_dependency 'docker-api'
|
23
|
-
s.add_runtime_dependency 'lru_redux'
|
24
|
-
s.add_runtime_dependency 'json'
|
21
|
+
s.add_runtime_dependency "logstash-core", ">= 2.0.0", "< 3.0.0"
|
22
|
+
s.add_runtime_dependency 'docker-api'
|
23
|
+
s.add_runtime_dependency 'lru_redux'
|
24
|
+
s.add_runtime_dependency 'json'
|
25
|
+
s.add_runtime_dependency 'hashie'
|
25
26
|
|
26
27
|
s.add_development_dependency 'logstash-devutils'
|
27
28
|
end
|
@@ -1,20 +1,44 @@
|
|
1
|
-
|
2
|
-
require "logstash/filters/
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
require "logstash/filters/docker_metadata"
|
3
3
|
|
4
|
-
describe LogStash::Filters::
|
5
|
-
|
4
|
+
describe LogStash::Filters::DockerMetadata do
|
5
|
+
|
6
|
+
let(:container_info) do
|
7
|
+
metadata = {}
|
8
|
+
metadata['id'] = "123456789"
|
9
|
+
metadata['Name'] = "container"
|
10
|
+
metadata['Image'] = "image_id"
|
11
|
+
metadata['Config'] = {}
|
12
|
+
metadata['Config']['Hostname'] = "hostname"
|
13
|
+
metadata['Config']['Image'] = "image"
|
14
|
+
metadata['Config']['Labels'] = { "label1" => "label_value"}
|
15
|
+
metadata['Config']['Env'] = [
|
16
|
+
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
17
|
+
"NGINX_VERSION=1.9.5-1~jessie"
|
18
|
+
]
|
19
|
+
metadata
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe "Docker container metadada as symbol keys in hash by default" do
|
6
24
|
let(:config) do <<-CONFIG
|
7
25
|
filter {
|
8
26
|
docker_metadata {
|
9
|
-
|
27
|
+
|
10
28
|
}
|
11
29
|
}
|
12
30
|
CONFIG
|
13
31
|
end
|
14
32
|
|
15
|
-
sample("
|
16
|
-
|
17
|
-
expect(
|
33
|
+
sample("path" => "/var/lib/docker/containers/d58155b6b2979776ef3594838536375ec19c6452431888f1d71bb7b2d5b8d84b/d58155b6b2979776ef3594838536375ec19c6452431888f1d71bb7b2d5b8d84b-json.log") do
|
34
|
+
c = double()
|
35
|
+
expect(Docker::Container).to receive(:get).with('d58155b6b2979776ef3594838536375ec19c6452431888f1d71bb7b2d5b8d84b').and_return(c)
|
36
|
+
expect(c).to receive(:info).and_return(container_info)
|
37
|
+
|
38
|
+
expect(subject['docker']).not_to be_nil
|
39
|
+
expect(subject['docker']['name']).to eq('container')
|
40
|
+
expect(subject['docker']['name']).to eq(subject['docker'][:name])
|
41
|
+
expect(subject['docker']['env']['NGINX_VERSION']).to eq('1.9.5-1~jessie')
|
18
42
|
end
|
19
43
|
end
|
20
44
|
end
|
metadata
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-docker_metadata
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
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-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - '>='
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version:
|
18
|
+
version: 2.0.0
|
19
19
|
- - <
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 3.0.0
|
22
22
|
name: logstash-core
|
23
23
|
prerelease: false
|
24
24
|
type: :runtime
|
@@ -26,10 +26,10 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 2.0.0
|
30
30
|
- - <
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 3.0.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
35
35
|
requirements:
|
@@ -72,6 +72,20 @@ dependencies:
|
|
72
72
|
- - '>='
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
name: hashie
|
82
|
+
prerelease: false
|
83
|
+
type: :runtime
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
75
89
|
- !ruby/object:Gem::Dependency
|
76
90
|
requirement: !ruby/object:Gem::Requirement
|
77
91
|
requirements:
|
@@ -99,6 +113,7 @@ files:
|
|
99
113
|
- README.md
|
100
114
|
- Rakefile
|
101
115
|
- dockerTest.sh
|
116
|
+
- lib/logstash/filters/docker_hash.rb
|
102
117
|
- lib/logstash/filters/docker_metadata.rb
|
103
118
|
- logstash-filter-docker_metadata.gemspec
|
104
119
|
- setup.sh
|