fluent-plugin-cadvisor 0.2.5 → 0.3.0

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: cc27dc7b6eacb7f6a6ec2b6d1be24e779f19e338
4
- data.tar.gz: 45e9f5aed730fee19b6657ee4ee8e7d8692e4a8d
3
+ metadata.gz: ab3747c4c91314d4764aea6543e15c4039d10233
4
+ data.tar.gz: 2a30d6a9420f4d271aca5a36266b68274f12b95f
5
5
  SHA512:
6
- metadata.gz: a9fb706b609eeb8b40390a3a3044cba45338f53dcfc37538af3c579ab688c36db5dc4632116cf74705eede4ba94d18571a9b8a8a2c30e3e85b3d81f10d3b0b10
7
- data.tar.gz: e5c8eef8885dc44886d744bb763bb1d4007ba58583054bb1420f8dec6bdb46a7c2d949d4ac41f99bf9e90338a2fc0376a4704bef1816135cd56b5add5794aadf
6
+ metadata.gz: a23c22af27aaece96da264df40248712a9920519fba758326ad025337028717138767b0ad3464e8009425bdb6643d634e01ea4570f2b77e25ad3af5478c6e925
7
+ data.tar.gz: 38e7fba985453a847332ef4c4b764023a363640515269e2a49a0f9b2cc7007600756b7ff193085ee8d836d30a5ede626515d456243c3dd7080d66c0170758ceb
@@ -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-cadvisor"
7
- spec.version = "0.2.5"
7
+ spec.version = "0.3.0"
8
8
  spec.authors = ["Woorank"]
9
9
  spec.email = ["dev@woorank.com"]
10
10
  spec.summary = "cadvisor input plugin for Fluent event collector"
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.require_paths = ["lib"]
18
18
 
19
19
  spec.add_runtime_dependency 'rest-client', '>= 0'
20
+ spec.add_runtime_dependency 'docker-api', '>= 0'
20
21
 
21
22
  spec.add_development_dependency "bundler", "~> 1.5"
22
23
  spec.add_development_dependency "rake"
@@ -1,6 +1,7 @@
1
1
  require 'rest-client'
2
2
  require 'digest/sha1'
3
3
  require 'time'
4
+ require 'docker'
4
5
 
5
6
  class CadvisorInput < Fluent::Input
6
7
  class TimerWatcher < Coolio::TimerWatcher
@@ -25,10 +26,13 @@ class CadvisorInput < Fluent::Input
25
26
  config_param :api_version, :string, :default => '1.1'
26
27
  config_param :stats_interval, :time, :default => 60 # every minute
27
28
  config_param :tag_prefix, :string, :default => "metric"
29
+ config_param :docker_url, :string, :default => 'unix:///var/run/docker.sock'
28
30
 
29
31
  def initialize
30
32
  super
31
33
  require 'socket'
34
+
35
+ Docker.url = @docker_url
32
36
  @hostname = Socket.gethostname
33
37
  @dict = {}
34
38
  end
@@ -69,39 +73,19 @@ class CadvisorInput < Fluent::Input
69
73
 
70
74
  # Metrics collection methods
71
75
  def get_metrics
72
- list_container_ids.each do |obj|
76
+ Docker::Container.all.each do |obj|
73
77
  emit_container_info(obj)
74
78
  end
75
79
  end
76
80
 
77
- def list_container_ids
78
- socket_path = "/var/run/docker.sock"
79
- if File.exists?(socket_path)
80
- socket = Socket.unix(socket_path)
81
- socket.puts("GET /containers/json HTTP/1.0\n\r")
82
-
83
- res = socket.readlines
84
- socket.close
85
-
86
- # Find body position
87
- idx = -1
88
- res.to_a.each_with_index do | stats, index |
89
- if stats[0] == '['
90
- idx = index
91
- break;
92
- end
93
- end
81
+ def emit_container_info(obj)
82
+ container_json = obj.json
83
+ config = container_json['Config']
94
84
 
95
- #Remove HTTP Headers and parse the body
96
- jsn = JSON.parse(res.to_a[idx..-1].join)
97
- jsn.collect { |obj| {:id => obj['Id'], :name => obj['Image']} }
98
- else
99
- []
100
- end
101
- end
85
+ id = container_json['Id']
86
+ name = container_json['Image']
87
+ env = config['Hostname'].split('--')[2] || '' # app--version--env
102
88
 
103
- def emit_container_info(obj)
104
- id = obj[:id]
105
89
  response = RestClient.get(@cadvisorEP + "/containers/docker/" + id)
106
90
  res = JSON.parse(response.body)
107
91
 
@@ -133,9 +117,10 @@ class CadvisorInput < Fluent::Input
133
117
  interval_in_ns = get_interval(stats['timestamp'], prev['timestamp'])
134
118
 
135
119
  record = {
136
- 'id' => Digest::SHA1.hexdigest("#{obj[:name]}#{id}#{timestamp.to_s}"),
120
+ 'id' => Digest::SHA1.hexdigest("#{name}#{id}#{timestamp.to_s}"),
137
121
  'container_id' => id,
138
- 'image' => obj[:name],
122
+ 'image' => name,
123
+ 'environment' => env,
139
124
  'memory_current' => stats['memory']['usage'],
140
125
  'memory_limit' => memory_limit,
141
126
  'cpu_usage' => raw_usage,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-cadvisor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Woorank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-04 00:00:00.000000000 Z
11
+ date: 2015-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: docker-api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement