Class: Fluent::Plugin::DockerMetadataElasticFilter

Inherits:
Filter
  • Object
show all
Defined in:
lib/fluent/plugin/filter_docker_metadata_elastic.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDockerMetadataElasticFilter

Returns a new instance of DockerMetadataElasticFilter.



37
38
39
# File 'lib/fluent/plugin/filter_docker_metadata_elastic.rb', line 37

def initialize
  super
end

Class Method Details

.get_metadata(container_id) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/fluent/plugin/filter_docker_metadata_elastic.rb', line 29

def self.(container_id)
  begin
    Docker::Container.get(container_id).info
  rescue Docker::Error::NotFoundError
    nil
  end
end

Instance Method Details

#configure(conf) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/fluent/plugin/filter_docker_metadata_elastic.rb', line 41

def configure(conf)
  super

  require 'docker'
  require 'json'
  require 'lru_redux'

  Docker.url = @docker_url

  @cache = LruRedux::ThreadSafeCache.new(@cache_size)
  @container_id_regexp_compiled = Regexp.compile(@container_id_regexp)
end

#filter_stream(tag, es) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/fluent/plugin/filter_docker_metadata_elastic.rb', line 54

def filter_stream(tag, es)
  new_es = es
  container_id = tag.match(@container_id_regexp_compiled)
  if container_id && container_id[0]
    container_id = container_id[0]
     = @cache.getset(container_id){DockerMetadataElasticFilter.(container_id)}

    if 
      new_es = Fluent::MultiEventStream.new

      es.each {|time, record|
        record['docker'] = {
          'id' => ['id'],
          'name' => ['Name'][1..-1],
          'container_hostname' => ['Config']['Hostname'],
          'image' => ['Config']['Image'],
          'image_id' => ['Image'],
          'labels' => ['Config']['Labels'].map {|k,v| Hash[k.gsub('.','_'),v]}.inject({}, :merge),
          'state' => ['State'],
          'restart_count' => ['RestartCount']
        }
        new_es.add(time, record)
      }
    end
  end
  return new_es
end