fluent-plugin-kubernetes_metadata_filter 2.9.3 → 2.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +6 -38
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +1 -1
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +11 -10
- data/release_notes.md +42 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98c4002df3754262c547e0b22acf366e62bca72f0142a20430f6a0f6c91dadea
|
4
|
+
data.tar.gz: 3f9e5d2d19b505c7cad15d113b69dea7ccb0943a3d4605d121fdf2234952c4a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5474457d9a35d7951a8a380c0099deeb16af6d849a9f036c467ba47e0fcc47ce2ff7f77bbd75ad7d6487c9f172897e63406a91fd9f08dc6494eb32332e2b9373
|
7
|
+
data.tar.gz: 91a14c8edabcdd1eaa7b915c14bfd643b7829ae0cc8951ed8f9e77819483638207a5c6264094974971dcf4d7684c50c62a249cee4de36d23574b72cbe4e10589
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fluent-plugin-kubernetes_metadata_filter (2.9.
|
4
|
+
fluent-plugin-kubernetes_metadata_filter (2.9.4)
|
5
5
|
fluentd (>= 0.14.0, < 1.15)
|
6
6
|
kubeclient (>= 4.0.0, < 5.0.0)
|
7
7
|
lru_redux
|
@@ -155,4 +155,4 @@ DEPENDENCIES
|
|
155
155
|
yajl-ruby
|
156
156
|
|
157
157
|
BUNDLED WITH
|
158
|
-
2.
|
158
|
+
2.3.4
|
data/README.md
CHANGED
@@ -41,14 +41,14 @@ Configuration options for fluent.conf are:
|
|
41
41
|
* `client_key` - path to a client key file to authenticate to the API server
|
42
42
|
* `bearer_token_file` - path to a file containing the bearer token to use for authentication
|
43
43
|
* `tag_to_kubernetes_name_regexp` - the regular expression used to extract kubernetes metadata (pod name, container name, namespace) from the current fluentd tag.
|
44
|
-
This must
|
44
|
+
This must use named capture groups for `container_name`, `pod_name`, `namespace`, and either `pod_uuid (/var/log/pods)` or `docker_id (/var/log/containers)`
|
45
45
|
* `cache_size` - size of the cache of Kubernetes metadata to reduce requests to the API server (default: `1000`)
|
46
46
|
* `cache_ttl` - TTL in seconds of each cached element. Set to negative value to disable TTL eviction (default: `3600` - 1 hour)
|
47
47
|
* `watch` - set up a watch on pods on the API server for updates to metadata (default: `true`)
|
48
|
-
*
|
49
|
-
*
|
50
|
-
*
|
51
|
-
*
|
48
|
+
* *DEPRECATED*`de_dot` - replace dots in labels and annotations with configured `de_dot_separator`, required for Datadog and ElasticSearch 2.x compatibility (default: `true`)
|
49
|
+
* *DEPRECATED*`de_dot_separator` - separator to use if `de_dot` is enabled (default: `_`)
|
50
|
+
* *DEPRECATED*`de_slash` - replace slashes in labels and annotations with configured `de_slash_separator`, required for Datadog compatibility (default: `false`)
|
51
|
+
* *DEPRECATED*`de_slash_separator` - separator to use if `de_slash` is enabled (default: `__`)
|
52
52
|
* *DEPRECATED* `use_journal` - If false, messages are expected to be formatted and tagged as if read by the fluentd in\_tail plugin with wildcard filename. If true, messages are expected to be formatted as if read from the systemd journal. The `MESSAGE` field has the full message. The `CONTAINER_NAME` field has the encoded k8s metadata (see below). The `CONTAINER_ID_FULL` field has the full container uuid. This requires docker to use the `--log-driver=journald` log driver. If unset (the default), the plugin will use the `CONTAINER_NAME` and `CONTAINER_ID_FULL` fields
|
53
53
|
if available, otherwise, will use the tag in the `tag_to_kubernetes_name_regexp` format.
|
54
54
|
* `container_name_to_kubernetes_regexp` - The regular expression used to extract the k8s metadata encoded in the journal `CONTAINER_NAME` field default: See [code](https://github.com/fabric8io/fluent-plugin-kubernetes_metadata_filter/blob/master/lib/fluent/plugin/filter_kubernetes_metadata.rb#L68)
|
@@ -68,23 +68,6 @@ when true (default: `true`)
|
|
68
68
|
* `skip_namespace_metadata` - Skip the namespace_id field from the metadata. The fetch_namespace_metadata function will be skipped. The plugin will be faster and cpu consumption will be less.
|
69
69
|
* `watch_retry_interval` - The time interval in seconds for retry backoffs when watch connections fail. (default: `10`)
|
70
70
|
|
71
|
-
**NOTE:** As of the release 2.1.x of this plugin, it no longer supports parsing the source message into JSON and attaching it to the
|
72
|
-
payload. The following configuration options are removed:
|
73
|
-
|
74
|
-
* `merge_json_log`
|
75
|
-
* `preserve_json_log`
|
76
|
-
|
77
|
-
One way of preserving JSON logs can be through the [parser plugin](https://docs.fluentd.org/filter/parser)
|
78
|
-
|
79
|
-
**NOTE** As of release v2.1.4, the use of `use_journal` is **DEPRECATED**. If this setting is not present, the plugin will
|
80
|
-
attempt to figure out the source of the metadata fields from the following:
|
81
|
-
- If `lookup_from_k8s_field true` (the default) and the following fields are present in the record:
|
82
|
-
`docker.container_id`, `kubernetes.namespace_name`, `kubernetes.pod_name`, `kubernetes.container_name`,
|
83
|
-
then the plugin will use those values as the source to use to lookup the metadata
|
84
|
-
- If `use_journal true`, or `use_journal` is unset, and the fields `CONTAINER_NAME` and `CONTAINER_ID_FULL` are present in the record,
|
85
|
-
then the plugin will parse those values using `container_name_to_kubernetes_regexp` and use those as the source to lookup the metadata
|
86
|
-
- Otherwise, if the tag matches `tag_to_kubernetes_name_regexp`, the plugin will parse the tag and use those values to
|
87
|
-
lookup the metdata
|
88
71
|
|
89
72
|
Reading from the JSON formatted log files with `in_tail` and wildcard filenames while respecting the CRI-o log format with the same config you need the fluent-plugin "multi-format-parser":
|
90
73
|
|
@@ -154,22 +137,7 @@ Reading from the systemd journal (requires the fluentd `fluent-plugin-systemd` a
|
|
154
137
|
@type stdout
|
155
138
|
</match>
|
156
139
|
```
|
157
|
-
|
158
|
-
In former versions this plugin parsed the value of the key log as JSON. In the current version this feature was removed, to avoid duplicate features in the fluentd plugin ecosystem. It can parsed with the parser plugin like this:
|
159
|
-
```
|
160
|
-
<filter kubernetes.**>
|
161
|
-
@type parser
|
162
|
-
key_name log
|
163
|
-
<parse>
|
164
|
-
@type json
|
165
|
-
json_parser json
|
166
|
-
</parse>
|
167
|
-
replace_invalid_sequence true
|
168
|
-
reserve_data true # this preserves unparsable log lines
|
169
|
-
emit_invalid_record_to_error false # In case of unparsable log lines keep the error log clean
|
170
|
-
reserve_time # the time was already parsed in the source, we don't want to overwrite it with current time.
|
171
|
-
</filter>
|
172
|
-
```
|
140
|
+
|
173
141
|
|
174
142
|
## Environment variables for Kubernetes
|
175
143
|
|
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = 'fluent-plugin-kubernetes_metadata_filter'
|
8
|
-
gem.version = '2.9.
|
8
|
+
gem.version = '2.9.4'
|
9
9
|
gem.authors = ['Jimmi Dyson']
|
10
10
|
gem.email = ['jimmidyson@gmail.com']
|
11
11
|
gem.description = 'Filter plugin to add Kubernetes metadata'
|
@@ -52,8 +52,8 @@ module Fluent::Plugin
|
|
52
52
|
config_param :ca_file, :string, default: nil
|
53
53
|
config_param :verify_ssl, :bool, default: true
|
54
54
|
|
55
|
-
REGEX_VAR_LOG_PODS = '(
|
56
|
-
REGEX_VAR_LOG_CONTAINERS = '(
|
55
|
+
REGEX_VAR_LOG_PODS = '(var\.log\.pods)\.(?<namespace>[^_]+)_(?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<pod_uuid>[a-z0-9-]*)\.(?<container_name>.+)\..*\.log$'
|
56
|
+
REGEX_VAR_LOG_CONTAINERS = '(var\.log\.containers)\.(?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log$'
|
57
57
|
|
58
58
|
#tag_to_kubernetes_name_regexp which must include named capture groups:
|
59
59
|
# namespace - The namespace in which the pod is deployed
|
@@ -305,7 +305,7 @@ module Fluent::Plugin
|
|
305
305
|
end
|
306
306
|
end
|
307
307
|
|
308
|
-
def get_metadata_for_record(
|
308
|
+
def get_metadata_for_record(namespace_name, pod_name, container_name, cache_key, create_time, batch_miss_cache, docker_id)
|
309
309
|
metadata = {
|
310
310
|
'docker' => { 'container_id' => "" },
|
311
311
|
'kubernetes' => {
|
@@ -314,7 +314,7 @@ module Fluent::Plugin
|
|
314
314
|
'pod_name' => pod_name
|
315
315
|
}
|
316
316
|
}
|
317
|
-
metadata['docker']['container_id'] =
|
317
|
+
metadata['docker']['container_id'] = docker_id unless docker_id.nil?
|
318
318
|
container_cache_key = container_name
|
319
319
|
if present?(@kubernetes_url)
|
320
320
|
pod_metadata = get_pod_metadata(cache_key, namespace_name, pod_name, create_time, batch_miss_cache)
|
@@ -344,8 +344,9 @@ module Fluent::Plugin
|
|
344
344
|
else
|
345
345
|
tag_match_data['docker_id']
|
346
346
|
end
|
347
|
-
|
348
|
-
|
347
|
+
docker_id = tag_match_data.names.include?('docker_id') ? tag_match_data['docker_id'] : nil
|
348
|
+
tag_metadata = get_metadata_for_record(tag_match_data['namespace'], tag_match_data['pod_name'], tag_match_data['container_name'],
|
349
|
+
cache_key, create_time_from_record(record, time), batch_miss_cache, docker_id)
|
349
350
|
end
|
350
351
|
metadata = Marshal.load(Marshal.dump(tag_metadata)) if tag_metadata
|
351
352
|
if (@use_journal || @use_journal.nil?) &&
|
@@ -358,9 +359,9 @@ module Fluent::Plugin
|
|
358
359
|
record['kubernetes'].key?('pod_name') &&
|
359
360
|
record['kubernetes'].key?('container_name') &&
|
360
361
|
record['docker'].key?('container_id') &&
|
361
|
-
(k_metadata = get_metadata_for_record(
|
362
|
+
(k_metadata = get_metadata_for_record(record['kubernetes']['namespace_name'], record['kubernetes']['pod_name'],
|
362
363
|
record['kubernetes']['container_name'], record['docker']['container_id'],
|
363
|
-
create_time_from_record(record, time), batch_miss_cache))
|
364
|
+
create_time_from_record(record, time), batch_miss_cache, record['docker']['container_id']))
|
364
365
|
metadata = k_metadata
|
365
366
|
end
|
366
367
|
record = record.merge(metadata) if metadata
|
@@ -374,8 +375,8 @@ module Fluent::Plugin
|
|
374
375
|
metadata = nil
|
375
376
|
if record.key?('CONTAINER_NAME') && record.key?('CONTAINER_ID_FULL')
|
376
377
|
metadata = record['CONTAINER_NAME'].match(@container_name_to_kubernetes_regexp_compiled) do |match_data|
|
377
|
-
get_metadata_for_record(match_data['
|
378
|
-
record['CONTAINER_ID_FULL'], create_time_from_record(record, time), batch_miss_cache)
|
378
|
+
get_metadata_for_record(match_data['namespace'], match_data['pod_name'], match_data['container_name'],
|
379
|
+
record['CONTAINER_ID_FULL'], create_time_from_record(record, time), batch_miss_cache, record['CONTAINER_ID_FULL'])
|
379
380
|
end
|
380
381
|
unless metadata
|
381
382
|
log.debug "Error: could not match CONTAINER_NAME from record #{record}"
|
data/release_notes.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Release Notes
|
2
|
+
|
3
|
+
## 2.9.4
|
4
|
+
As of this release, the 'de_dot' functionality is depricated and will be removed in future releases.
|
5
|
+
Ref: https://github.com/fabric8io/fluent-plugin-kubernetes_metadata_filter/issues/320
|
6
|
+
|
7
|
+
## v2.1.4
|
8
|
+
The use of `use_journal` is **DEPRECATED**. If this setting is not present, the plugin will
|
9
|
+
attempt to figure out the source of the metadata fields from the following:
|
10
|
+
- If `lookup_from_k8s_field true` (the default) and the following fields are present in the record:
|
11
|
+
`docker.container_id`, `kubernetes.namespace_name`, `kubernetes.pod_name`, `kubernetes.container_name`,
|
12
|
+
then the plugin will use those values as the source to use to lookup the metadata
|
13
|
+
- If `use_journal true`, or `use_journal` is unset, and the fields `CONTAINER_NAME` and `CONTAINER_ID_FULL` are present in the record,
|
14
|
+
then the plugin will parse those values using `container_name_to_kubernetes_regexp` and use those as the source to lookup the metadata
|
15
|
+
- Otherwise, if the tag matches `tag_to_kubernetes_name_regexp`, the plugin will parse the tag and use those values to
|
16
|
+
lookup the metdata
|
17
|
+
|
18
|
+
## v2.1.x
|
19
|
+
|
20
|
+
As of the release 2.1.x of this plugin, it no longer supports parsing the source message into JSON and attaching it to the
|
21
|
+
payload. The following configuration options are removed:
|
22
|
+
|
23
|
+
* `merge_json_log`
|
24
|
+
* `preserve_json_log`
|
25
|
+
|
26
|
+
One way of preserving JSON logs can be through the [parser plugin](https://docs.fluentd.org/filter/parser).
|
27
|
+
It can parsed with the parser plugin like this:
|
28
|
+
|
29
|
+
```
|
30
|
+
<filter kubernetes.**>
|
31
|
+
@type parser
|
32
|
+
key_name log
|
33
|
+
<parse>
|
34
|
+
@type json
|
35
|
+
json_parser json
|
36
|
+
</parse>
|
37
|
+
replace_invalid_sequence true
|
38
|
+
reserve_data true # this preserves unparsable log lines
|
39
|
+
emit_invalid_record_to_error false # In case of unparsable log lines keep the error log clean
|
40
|
+
reserve_time # the time was already parsed in the source, we don't want to overwrite it with current time.
|
41
|
+
</filter>
|
42
|
+
```
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-kubernetes_metadata_filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.9.
|
4
|
+
version: 2.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jimmi Dyson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -228,6 +228,7 @@ files:
|
|
228
228
|
- lib/fluent/plugin/kubernetes_metadata_util.rb
|
229
229
|
- lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb
|
230
230
|
- lib/fluent/plugin/kubernetes_metadata_watch_pods.rb
|
231
|
+
- release_notes.md
|
231
232
|
- test/cassettes/invalid_api_server_config.yml
|
232
233
|
- test/cassettes/kubernetes_docker_metadata_annotations.yml
|
233
234
|
- test/cassettes/kubernetes_docker_metadata_dotted_slashed_labels.yml
|