fluent-plugin-kubernetes_metadata_filter_splunk 2.2.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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +56 -0
  3. data/.gitignore +20 -0
  4. data/Gemfile +7 -0
  5. data/LICENSE.txt +201 -0
  6. data/README.md +209 -0
  7. data/Rakefile +37 -0
  8. data/fluent-plugin-kubernetes_metadata_filter.gemspec +36 -0
  9. data/lib/fluent/plugin/filter_kubernetes_metadata.rb +446 -0
  10. data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +98 -0
  11. data/lib/fluent/plugin/kubernetes_metadata_common.rb +113 -0
  12. data/lib/fluent/plugin/kubernetes_metadata_stats.rb +46 -0
  13. data/lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb +65 -0
  14. data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +68 -0
  15. data/test/cassettes/invalid_api_server_config.yml +53 -0
  16. data/test/cassettes/kubernetes_docker_metadata.yml +228 -0
  17. data/test/cassettes/kubernetes_docker_metadata_annotations.yml +239 -0
  18. data/test/cassettes/kubernetes_docker_metadata_dotted_labels.yml +231 -0
  19. data/test/cassettes/kubernetes_docker_metadata_using_bearer_token.yml +248 -0
  20. data/test/cassettes/kubernetes_get_api_v1.yml +193 -0
  21. data/test/cassettes/kubernetes_get_api_v1_using_token.yml +195 -0
  22. data/test/cassettes/kubernetes_get_namespace_default.yml +69 -0
  23. data/test/cassettes/kubernetes_get_namespace_default_using_token.yml +71 -0
  24. data/test/cassettes/kubernetes_get_pod.yml +146 -0
  25. data/test/cassettes/kubernetes_get_pod_using_token.yml +148 -0
  26. data/test/cassettes/metadata_from_tag_and_journald_fields.yml +408 -0
  27. data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +540 -0
  28. data/test/cassettes/metadata_with_namespace_id.yml +276 -0
  29. data/test/cassettes/non_kubernetes_docker_metadata.yml +97 -0
  30. data/test/cassettes/valid_kubernetes_api_server.yml +55 -0
  31. data/test/cassettes/valid_kubernetes_api_server_using_token.yml +57 -0
  32. data/test/helper.rb +64 -0
  33. data/test/plugin/test.token +1 -0
  34. data/test/plugin/test_cache_stats.rb +36 -0
  35. data/test/plugin/test_cache_strategy.rb +196 -0
  36. data/test/plugin/test_filter_kubernetes_metadata.rb +970 -0
  37. data/test/plugin/test_watch_namespaces.rb +91 -0
  38. data/test/plugin/test_watch_pods.rb +145 -0
  39. data/test/plugin/watch_test.rb +57 -0
  40. metadata +295 -0
@@ -0,0 +1,540 @@
1
+ #
2
+ # Fluentd Kubernetes Metadata Filter Plugin - Enrich Fluentd events with
3
+ # Kubernetes metadata
4
+ #
5
+ # Copyright 2015 Red Hat, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ ---
20
+ http_interactions:
21
+ - request:
22
+ method: get
23
+ uri: https://localhost:8443/api
24
+ body:
25
+ encoding: US-ASCII
26
+ string: ''
27
+ headers:
28
+ Accept:
29
+ - "*/*; q=0.5, application/xml"
30
+ Accept-Encoding:
31
+ - gzip, deflate
32
+ User-Agent:
33
+ - Ruby
34
+ response:
35
+ status:
36
+ code: 200
37
+ message: OK
38
+ headers:
39
+ Content-Type:
40
+ - application/json
41
+ Date:
42
+ - Fri, 08 May 2015 10:35:37 GMT
43
+ Content-Length:
44
+ - '67'
45
+ body:
46
+ encoding: UTF-8
47
+ string: |-
48
+ {
49
+ "versions": [
50
+ "v1"
51
+ ]
52
+ }
53
+ http_version:
54
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
55
+ - request:
56
+ method: get
57
+ uri: https://localhost:8443/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc
58
+ body:
59
+ encoding: US-ASCII
60
+ string: ''
61
+ headers:
62
+ Accept:
63
+ - "*/*; q=0.5, application/xml"
64
+ Accept-Encoding:
65
+ - gzip, deflate
66
+ User-Agent:
67
+ - Ruby
68
+ response:
69
+ status:
70
+ code: 200
71
+ message: OK
72
+ headers:
73
+ Content-Type:
74
+ - application/json
75
+ Date:
76
+ - Fri, 08 May 2015 10:35:37 GMT
77
+ Transfer-Encoding:
78
+ - chunked
79
+ body:
80
+ encoding: UTF-8
81
+ string: |-
82
+ {
83
+ "kind": "Pod",
84
+ "apiVersion": "v1",
85
+ "metadata": {
86
+ "name": "fabric8-console-controller-98rqc",
87
+ "generateName": "fabric8-console-controller-",
88
+ "namespace": "default",
89
+ "selfLink": "/api/v1/namespaces/default/pods/fabric8-console-controller-98rqc",
90
+ "uid": "c76927af-f563-11e4-b32d-54ee7527188d",
91
+ "resourceVersion": "122",
92
+ "creationTimestamp": "2015-05-08T09:22:42Z",
93
+ "labels": {
94
+ "component": "fabric8Console"
95
+ }
96
+ },
97
+ "spec": {
98
+ "volumes": [
99
+ {
100
+ "name": "openshift-cert-secrets",
101
+ "hostPath": null,
102
+ "emptyDir": null,
103
+ "gcePersistentDisk": null,
104
+ "gitRepo": null,
105
+ "secret": {
106
+ "secretName": "openshift-cert-secrets"
107
+ },
108
+ "nfs": null,
109
+ "iscsi": null,
110
+ "glusterfs": null
111
+ }
112
+ ],
113
+ "containers": [
114
+ {
115
+ "name": "fabric8-console-container",
116
+ "image": "fabric8/hawtio-kubernetes:latest",
117
+ "ports": [
118
+ {
119
+ "containerPort": 9090,
120
+ "protocol": "TCP"
121
+ }
122
+ ],
123
+ "env": [
124
+ {
125
+ "name": "OAUTH_CLIENT_ID",
126
+ "value": "fabric8-console"
127
+ },
128
+ {
129
+ "name": "OAUTH_AUTHORIZE_URI",
130
+ "value": "https://localhost:8443/oauth/authorize"
131
+ }
132
+ ],
133
+ "resources": {},
134
+ "volumeMounts": [
135
+ {
136
+ "name": "openshift-cert-secrets",
137
+ "readOnly": true,
138
+ "mountPath": "/etc/secret-volume"
139
+ }
140
+ ],
141
+ "terminationMessagePath": "/dev/termination-log",
142
+ "imagePullPolicy": "IfNotPresent",
143
+ "capabilities": {}
144
+ }
145
+ ],
146
+ "restartPolicy": "Always",
147
+ "dnsPolicy": "ClusterFirst",
148
+ "nodeName": "jimmi-redhat.localnet"
149
+ },
150
+ "status": {
151
+ "phase": "Running",
152
+ "Condition": [
153
+ {
154
+ "type": "Ready",
155
+ "status": "True"
156
+ }
157
+ ],
158
+ "hostIP": "172.17.42.1",
159
+ "podIP": "172.17.0.8",
160
+ "containerStatuses": [
161
+ {
162
+ "name": "fabric8-console-container",
163
+ "state": {
164
+ "running": {
165
+ "startedAt": "2015-05-08T09:22:44Z"
166
+ }
167
+ },
168
+ "lastState": {},
169
+ "ready": true,
170
+ "restartCount": 0,
171
+ "image": "fabric8/hawtio-kubernetes:latest",
172
+ "imageID": "docker://b2bd1a24a68356b2f30128e6e28e672c1ef92df0d9ec01ec0c7faea5d77d2303",
173
+ "containerID": "docker://49095a2894da899d3b327c5fde1e056a81376cc9a8f8b09a195f2a92bceed459"
174
+ }
175
+ ]
176
+ }
177
+ }
178
+ http_version:
179
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
180
+ - request:
181
+ method: get
182
+ uri: https://localhost:8443/api/v1/namespaces/default
183
+ body:
184
+ encoding: US-ASCII
185
+ string: ''
186
+ headers:
187
+ Accept:
188
+ - "*/*; q=0.5, application/xml"
189
+ Accept-Encoding:
190
+ - gzip, deflate
191
+ User-Agent:
192
+ - Ruby
193
+ response:
194
+ status:
195
+ code: 200
196
+ message: OK
197
+ headers:
198
+ Content-Type:
199
+ - application/json
200
+ Date:
201
+ - Fri, 08 May 2015 10:35:37 GMT
202
+ Transfer-Encoding:
203
+ - chunked
204
+ body:
205
+ encoding: UTF-8
206
+ string: |-
207
+ {
208
+ "kind": "Namespace",
209
+ "apiVersion": "v1",
210
+ "metadata": {
211
+ "name": "default",
212
+ "selfLink": "/api/v1/namespaces/default",
213
+ "uid": "898268c8-4a36-11e5-9d81-42010af0194c",
214
+ "resourceVersion": "6",
215
+ "creationTimestamp": "2015-05-08T09:22:01Z"
216
+ },
217
+ "spec": {
218
+ "finalizers": [
219
+ "kubernetes"
220
+ ]
221
+ },
222
+ "status": {
223
+ "phase": "Active"
224
+ }
225
+ }
226
+ http_version:
227
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
228
+ - request:
229
+ method: get
230
+ uri: https://localhost:8443/api/v1/namespaces/default
231
+ body:
232
+ encoding: US-ASCII
233
+ string: ''
234
+ headers:
235
+ Accept:
236
+ - "*/*; q=0.5, application/xml"
237
+ Accept-Encoding:
238
+ - gzip, deflate
239
+ User-Agent:
240
+ - Ruby
241
+ response:
242
+ status:
243
+ code: 200
244
+ message: OK
245
+ headers:
246
+ Content-Type:
247
+ - application/json
248
+ Date:
249
+ - Fri, 08 May 2015 10:35:37 GMT
250
+ Transfer-Encoding:
251
+ - chunked
252
+ body:
253
+ encoding: UTF-8
254
+ string: |-
255
+ {
256
+ "kind": "Namespace",
257
+ "apiVersion": "v1",
258
+ "metadata": {
259
+ "name": "default",
260
+ "selfLink": "/api/v1/namespaces/default",
261
+ "uid": "898268c8-4a36-11e5-9d81-42010af0194c",
262
+ "resourceVersion": "6",
263
+ "creationTimestamp": "2015-05-08T09:22:01Z"
264
+ },
265
+ "spec": {
266
+ "finalizers": [
267
+ "kubernetes"
268
+ ]
269
+ },
270
+ "status": {
271
+ "phase": "Active"
272
+ }
273
+ }
274
+ http_version:
275
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
276
+ - request:
277
+ method: get
278
+ uri: https://localhost:8443/api/v1/namespaces/journald-namespace-name/pods/journald-pod-name
279
+ body:
280
+ encoding: US-ASCII
281
+ string: ''
282
+ headers:
283
+ Accept:
284
+ - "*/*; q=0.5, application/xml"
285
+ Accept-Encoding:
286
+ - gzip, deflate
287
+ User-Agent:
288
+ - Ruby
289
+ response:
290
+ status:
291
+ code: 200
292
+ message: OK
293
+ headers:
294
+ Content-Type:
295
+ - application/json
296
+ Date:
297
+ - Fri, 08 May 2015 10:35:37 GMT
298
+ Transfer-Encoding:
299
+ - chunked
300
+ body:
301
+ encoding: UTF-8
302
+ string: |-
303
+ {
304
+ "kind": "Pod",
305
+ "apiVersion": "v1",
306
+ "metadata": {
307
+ "name": "journald-pod-name",
308
+ "generateName": "journald-pod-name-",
309
+ "namespace": "journald-namespace-name",
310
+ "selfLink": "/api/v1/namespaces/journald-namespace-name/pods/journald-pod-name",
311
+ "uid": "5e1c1e27-b637-4e81-80b6-6d8a8c404d3b",
312
+ "resourceVersion": "122",
313
+ "creationTimestamp": "2015-05-08T09:22:42Z",
314
+ "labels": {
315
+ "component": "journald-test"
316
+ }
317
+ },
318
+ "spec": {
319
+ "containers": [
320
+ {
321
+ "name": "journald-container-name",
322
+ "image": "journald-container-image:latest",
323
+ "terminationMessagePath": "/dev/termination-log",
324
+ "imagePullPolicy": "IfNotPresent",
325
+ "capabilities": {}
326
+ }
327
+ ],
328
+ "nodeName": "jimmi-redhat.localnet"
329
+ },
330
+ "status": {
331
+ "phase": "Running",
332
+ "Condition": [
333
+ {
334
+ "type": "Ready",
335
+ "status": "True"
336
+ }
337
+ ],
338
+ "hostIP": "172.17.42.1",
339
+ "podIP": "172.17.0.8",
340
+ "containerStatuses": [
341
+ {
342
+ "name": "journald-container-name",
343
+ "state": {
344
+ "running": {
345
+ "startedAt": "2015-05-08T09:22:44Z"
346
+ }
347
+ },
348
+ "lastState": {},
349
+ "ready": true,
350
+ "restartCount": 0,
351
+ "image": "journald-container-image:latest",
352
+ "imageID": "docker://dda4c95705fb7050b701b10a7fe928ca5bc971a1dcb521ae3c339194cbf36b47",
353
+ "containerID": "docker://838350c64bacba968d39a30a50789b2795291fceca6ccbff55298671d46b0e3b"
354
+ }
355
+ ]
356
+ }
357
+ }
358
+ http_version:
359
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
360
+ - request:
361
+ method: get
362
+ uri: https://localhost:8443/api/v1/namespaces/journald-namespace-name
363
+ body:
364
+ encoding: US-ASCII
365
+ string: ''
366
+ headers:
367
+ Accept:
368
+ - "*/*; q=0.5, application/xml"
369
+ Accept-Encoding:
370
+ - gzip, deflate
371
+ User-Agent:
372
+ - Ruby
373
+ response:
374
+ status:
375
+ code: 200
376
+ message: OK
377
+ headers:
378
+ Content-Type:
379
+ - application/json
380
+ Date:
381
+ - Fri, 08 May 2015 10:35:37 GMT
382
+ Transfer-Encoding:
383
+ - chunked
384
+ body:
385
+ encoding: UTF-8
386
+ string: |-
387
+ {
388
+ "kind": "Namespace",
389
+ "apiVersion": "v1",
390
+ "metadata": {
391
+ "name": "journald-namespace-name",
392
+ "selfLink": "/api/v1/namespaces/journald-namespace-name",
393
+ "uid": "8282888f-733f-4f23-a3d3-1fdfa3bdacf2",
394
+ "resourceVersion": "6",
395
+ "creationTimestamp": "2015-05-08T09:22:01Z"
396
+ },
397
+ "spec": {
398
+ "finalizers": [
399
+ "kubernetes"
400
+ ]
401
+ },
402
+ "status": {
403
+ "phase": "Active"
404
+ }
405
+ }
406
+ http_version:
407
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
408
+ - request:
409
+ method: get
410
+ uri: https://localhost:8443/api/v1/namespaces/k8s-namespace-name/pods/k8s-pod-name
411
+ body:
412
+ encoding: US-ASCII
413
+ string: ''
414
+ headers:
415
+ Accept:
416
+ - "*/*; q=0.5, application/xml"
417
+ Accept-Encoding:
418
+ - gzip, deflate
419
+ User-Agent:
420
+ - Ruby
421
+ response:
422
+ status:
423
+ code: 200
424
+ message: OK
425
+ headers:
426
+ Content-Type:
427
+ - application/json
428
+ Date:
429
+ - Fri, 08 May 2015 10:35:37 GMT
430
+ Transfer-Encoding:
431
+ - chunked
432
+ body:
433
+ encoding: UTF-8
434
+ string: |-
435
+ {
436
+ "kind": "Pod",
437
+ "apiVersion": "v1",
438
+ "metadata": {
439
+ "name": "k8s-pod-name",
440
+ "generateName": "k8s-pod-name-",
441
+ "namespace": "k8s-namespace-name",
442
+ "selfLink": "/api/v1/namespaces/k8s-namespace-name/pods/k8s-pod-name",
443
+ "uid": "ebabf749-5fcd-4750-a3f0-aedd89476da8",
444
+ "resourceVersion": "122",
445
+ "creationTimestamp": "2015-05-08T09:22:42Z",
446
+ "labels": {
447
+ "component": "k8s-test"
448
+ }
449
+ },
450
+ "spec": {
451
+ "containers": [
452
+ {
453
+ "name": "k8s-container-name",
454
+ "image": "k8s-container-image:latest",
455
+ "terminationMessagePath": "/dev/termination-log",
456
+ "imagePullPolicy": "IfNotPresent",
457
+ "capabilities": {}
458
+ }
459
+ ],
460
+ "nodeName": "jimmi-redhat.localnet"
461
+ },
462
+ "status": {
463
+ "phase": "Running",
464
+ "Condition": [
465
+ {
466
+ "type": "Ready",
467
+ "status": "True"
468
+ }
469
+ ],
470
+ "hostIP": "172.17.42.1",
471
+ "podIP": "172.17.0.8",
472
+ "containerStatuses": [
473
+ {
474
+ "name": "k8s-container-name",
475
+ "state": {
476
+ "running": {
477
+ "startedAt": "2015-05-08T09:22:44Z"
478
+ }
479
+ },
480
+ "lastState": {},
481
+ "ready": true,
482
+ "restartCount": 0,
483
+ "image": "k8s-container-image:latest",
484
+ "imageID": "docker://d78c5217c41e9af08d37d9ae2cb070afa1fe3da6bc77bfb18879a8b4bfdf8a34",
485
+ "containerID": "docker://e463bc0d3ae38f5c89d92dca49b30e049e899799920b79d4d5f705acbe82ba95"
486
+ }
487
+ ]
488
+ }
489
+ }
490
+ http_version:
491
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
492
+ - request:
493
+ method: get
494
+ uri: https://localhost:8443/api/v1/namespaces/k8s-namespace-name
495
+ body:
496
+ encoding: US-ASCII
497
+ string: ''
498
+ headers:
499
+ Accept:
500
+ - "*/*; q=0.5, application/xml"
501
+ Accept-Encoding:
502
+ - gzip, deflate
503
+ User-Agent:
504
+ - Ruby
505
+ response:
506
+ status:
507
+ code: 200
508
+ message: OK
509
+ headers:
510
+ Content-Type:
511
+ - application/json
512
+ Date:
513
+ - Fri, 08 May 2015 10:35:37 GMT
514
+ Transfer-Encoding:
515
+ - chunked
516
+ body:
517
+ encoding: UTF-8
518
+ string: |-
519
+ {
520
+ "kind": "Namespace",
521
+ "apiVersion": "v1",
522
+ "metadata": {
523
+ "name": "k8s-namespace-name",
524
+ "selfLink": "/api/v1/namespaces/k8s-namespace-name",
525
+ "uid": "8e0dc8fc-59f2-49f7-a3e2-ed0913e19d9f",
526
+ "resourceVersion": "6",
527
+ "creationTimestamp": "2015-05-08T09:22:01Z"
528
+ },
529
+ "spec": {
530
+ "finalizers": [
531
+ "kubernetes"
532
+ ]
533
+ },
534
+ "status": {
535
+ "phase": "Active"
536
+ }
537
+ }
538
+ http_version:
539
+ recorded_at: Fri, 08 May 2015 10:35:37 GMT
540
+ recorded_with: VCR 2.9.3