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 +4 -4
- data/fluent-plugin-cadvisor.gemspec +2 -1
- data/lib/fluent/plugin/in_cadvisor.rb +14 -29
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab3747c4c91314d4764aea6543e15c4039d10233
|
4
|
+
data.tar.gz: 2a30d6a9420f4d271aca5a36266b68274f12b95f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
-
|
76
|
+
Docker::Container.all.each do |obj|
|
73
77
|
emit_container_info(obj)
|
74
78
|
end
|
75
79
|
end
|
76
80
|
|
77
|
-
def
|
78
|
-
|
79
|
-
|
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
|
-
|
96
|
-
|
97
|
-
|
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("#{
|
120
|
+
'id' => Digest::SHA1.hexdigest("#{name}#{id}#{timestamp.to_s}"),
|
137
121
|
'container_id' => id,
|
138
|
-
'image' =>
|
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.
|
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-
|
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
|