logstash-filter-docker_metadata 0.1.4 → 0.1.5
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
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
|