fluent-plugin-geovis 0.0.3 → 0.0.4
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 +4 -4
- data/fluent-plugin-geovis.gemspec +1 -1
- data/lib/fluent/plugin/filter_geovis.rb +82 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ecae9544ef25c489a7c538488346d0eeafe51c18006ea741e064fc61c4793d5
|
4
|
+
data.tar.gz: 1f45276072d904bff25260d796ea0e48a8e983f7842efc827c333b22f3b7019c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d84a7a8aec1675bbc84e17b19b2cf73ea66feb816a3200ef059501fe8202363ec0cb73dde9b0fd66523a84fe96c9fd41c2b6fe6e2725ff58f29ce277328f6aa
|
7
|
+
data.tar.gz: 8ceedfbe7555743a38893274739fcbc77725efdcbd3612e7c4bf719ba654c347b5b7229084522b6a32890c636dd2b8ae3f25f8e8b3304bea16c8796b9c2fbabb
|
@@ -31,7 +31,7 @@ module Fluent
|
|
31
31
|
end
|
32
32
|
require 'kubeclient'
|
33
33
|
|
34
|
-
log.
|
34
|
+
log.debug "Geovis Filter configure"
|
35
35
|
|
36
36
|
# Use Kubernetes default service account if we're in a pod.
|
37
37
|
if @kubernetes_url.nil?
|
@@ -68,6 +68,7 @@ module Fluent
|
|
68
68
|
|
69
69
|
if !@kubernetes_url.nil?
|
70
70
|
if insecure
|
71
|
+
log.debug "Creating insecure K8S client"
|
71
72
|
@client = Kubeclient::Client.new @kubernetes_url, @apiVersion
|
72
73
|
else
|
73
74
|
ssl_options = {
|
@@ -84,7 +85,7 @@ module Fluent
|
|
84
85
|
auth_options[:bearer_token] = bearer_token
|
85
86
|
end
|
86
87
|
|
87
|
-
log.debug "Creating K8S client"
|
88
|
+
log.debug "Creating secure K8S client"
|
88
89
|
@client = Kubeclient::Client.new @kubernetes_url, @apiVersion,
|
89
90
|
ssl_options: ssl_options,
|
90
91
|
auth_options: auth_options
|
@@ -95,23 +96,99 @@ module Fluent
|
|
95
96
|
rescue KubeException => kube_error
|
96
97
|
raise Fluent::ConfigError, "Invalid Kubernetes API #{@apiVersion} endpoint #{@kubernetes_url}: #{kube_error.message}"
|
97
98
|
end
|
99
|
+
@podsHash = {}
|
100
|
+
fetch_pods
|
98
101
|
end
|
99
102
|
end
|
100
103
|
|
101
104
|
def filter_stream(tag, es)
|
102
|
-
|
105
|
+
log.debug "Geovis Filter filter"
|
103
106
|
return es if (es.respond_to?(:empty?) && es.empty?) || !es.is_a?(Fluent::EventStream)
|
104
107
|
new_es = Fluent::MultiEventStream.new
|
105
108
|
es.each do |time, record|
|
106
|
-
|
107
|
-
|
109
|
+
metadata = nil
|
110
|
+
if @podsHash.has_key?(record['uuid'])
|
111
|
+
metadata = @podsHash[record['uuid']]
|
112
|
+
log.info "find pod for uuid: #{record['uuid']}"
|
113
|
+
else
|
114
|
+
fetch_pods
|
115
|
+
if @podsHash.has_key?(record['uuid'])
|
116
|
+
metadata = @podsHash[record['uuid']]
|
117
|
+
else
|
118
|
+
log.error "pod does not exist: #{record['uuid']}"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
record = record.merge(metadata) if metadata
|
108
122
|
new_es.add(time, record)
|
109
123
|
end
|
110
124
|
|
111
125
|
new_es
|
112
126
|
end
|
113
127
|
|
128
|
+
def fetch_pods()
|
129
|
+
log.debug "Geovis Filter fetch_pods"
|
130
|
+
newPodsHash = {}
|
131
|
+
@client.get_pods.each do |pod_object|
|
132
|
+
kubernetes_metadata = parse_pod_metadata(pod_object)
|
133
|
+
newPodsHash[kubernetes_metadata['pod_id']] = kubernetes_metadata
|
134
|
+
end
|
135
|
+
log.info @podsHash.length
|
136
|
+
@podsHash = newPodsHash.merge @podsHash
|
137
|
+
log.info newPodsHash.length
|
138
|
+
end
|
139
|
+
|
140
|
+
def parse_pod_metadata(pod_object)
|
141
|
+
labels = syms_to_strs(pod_object['metadata']['labels'].to_h)
|
142
|
+
if @de_dot
|
143
|
+
self.de_dot!(labels)
|
144
|
+
self.de_dot!(annotations)
|
145
|
+
end
|
146
|
+
|
147
|
+
# collect container informations
|
148
|
+
container_meta = {}
|
149
|
+
begin
|
150
|
+
pod_object['status']['containerStatuses'].each do|container_status|
|
151
|
+
# get plain container id (eg. docker://hash -> hash)
|
152
|
+
container_id = container_status['containerID'].sub /^[-_a-zA-Z0-9]+:\/\//, ''
|
153
|
+
container_meta[container_id] = {
|
154
|
+
'name' => container_status['name'],
|
155
|
+
'image' => container_status['image'],
|
156
|
+
'image_id' => container_status['imageID']
|
157
|
+
}
|
158
|
+
end
|
159
|
+
rescue
|
160
|
+
log.debug("parsing container meta information failed for: #{pod_object['metadata']['namespace']}/#{pod_object['metadata']['name']} ")
|
161
|
+
end
|
162
|
+
|
163
|
+
kubernetes_metadata = {
|
164
|
+
'namespace_name' => pod_object['metadata']['namespace'],
|
165
|
+
'pod_id' => pod_object['metadata']['uid'],
|
166
|
+
'pod_name' => pod_object['metadata']['name'],
|
167
|
+
'containers' => syms_to_strs(container_meta),
|
168
|
+
'labels' => labels,
|
169
|
+
'host' => pod_object['spec']['nodeName'],
|
170
|
+
'master_url' => @kubernetes_url
|
171
|
+
}
|
172
|
+
return kubernetes_metadata
|
173
|
+
end
|
174
|
+
|
175
|
+
def syms_to_strs(hsh)
|
176
|
+
newhsh = {}
|
177
|
+
hsh.each_pair do |kk,vv|
|
178
|
+
if vv.is_a?(Hash)
|
179
|
+
vv = syms_to_strs(vv)
|
180
|
+
end
|
181
|
+
if kk.is_a?(Symbol)
|
182
|
+
newhsh[kk.to_s] = vv
|
183
|
+
else
|
184
|
+
newhsh[kk] = vv
|
185
|
+
end
|
186
|
+
end
|
187
|
+
newhsh
|
188
|
+
end
|
189
|
+
|
114
190
|
end
|
115
191
|
end
|
116
192
|
end
|
117
193
|
|
194
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-geovis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- li.baosheng
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|