fluent-plugin-cadvisor 0.2.5 → 0.3.0

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: 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