From d344192b9baad71f4c12b14952b35386463ff3fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20So=CC=88derlund?= Date: Wed, 20 Mar 2019 22:34:27 +0100 Subject: [PATCH 1/4] Added support for additional placeholders from record_transform filter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jesper Söderlund --- README.md | 7 ++++--- lib/fluent/plugin/prometheus.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c8c6563..0530825 100644 --- a/README.md +++ b/README.md @@ -351,9 +351,10 @@ Reserved placeholders are: - `${hostname}`: hostname - `${worker_id}`: fluent worker id -- `${tag}`: tag name - - only available in Prometheus output/filter plugin - +- `${tag}`: tag name, only available in Prometheus output/filter plugin +- `${tag_parts[N]}`: refers to the Nth part of the tag, only available in Prometheus output/filter plugin +- `${tag_suffix}`: refers to the [N..] part of the tag, only available in Prometheus output/filter plugin +- `${tag_prefix}`: refers to the [0..N] part of the tag, only available in Prometheus output/filter plugin ### top-level labels and labels inside metric diff --git a/lib/fluent/plugin/prometheus.rb b/lib/fluent/plugin/prometheus.rb index b20555c..9e2e85d 100644 --- a/lib/fluent/plugin/prometheus.rb +++ b/lib/fluent/plugin/prometheus.rb @@ -67,9 +67,35 @@ def configure(conf) @hostname = Socket.gethostname end + def tag_prefix(tag_parts) + return [] if tag_parts.empty? + tag_prefix = [tag_parts.first] + 1.upto(tag_parts.size-1).each do |i| + tag_prefix[i] = "#{tag_prefix[i-1]}.#{tag_parts[i]}" + end + tag_prefix + end + + def tag_suffix(tag_parts) + return [] if tag_parts.empty? + rev_tag_parts = tag_parts.reverse + rev_tag_suffix = [rev_tag_parts.first] + 1.upto(tag_parts.size-1).each do |i| + rev_tag_suffix[i] = "#{rev_tag_parts[i]}.#{rev_tag_suffix[i-1]}" + end + rev_tag_suffix.reverse! + end + def instrument(tag, es, metrics) + tag_parts = tag.split('.') + tag_prefix = tag_prefix(tag_parts) + tag_suffix = tag_suffix(tag_parts) + placeholder_values = { 'tag' => tag, + 'tag_parts' => tag_parts, + 'tag_prefix' => tag_prefix, + 'tag_suffix' => tag_suffix, 'hostname' => @hostname, 'worker_id' => fluentd_worker_id, } From 24e32a76a20503707c0fa7a8cd87e9429fbe1d9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20So=CC=88derlund?= Date: Fri, 22 Mar 2019 08:55:49 +0100 Subject: [PATCH 2/4] Added tag-parts, suffixes and prefixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jesper Söderlund --- spec/fluent/plugin/filter_prometheus_spec.rb | 6 ++---- spec/fluent/plugin/shared.rb | 4 ++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spec/fluent/plugin/filter_prometheus_spec.rb b/spec/fluent/plugin/filter_prometheus_spec.rb index 0ddb362..466b348 100644 --- a/spec/fluent/plugin/filter_prometheus_spec.rb +++ b/spec/fluent/plugin/filter_prometheus_spec.rb @@ -2,9 +2,10 @@ require 'fluent/test/driver/filter' require 'fluent/plugin/filter_prometheus' require_relative 'shared' +require 'json' describe Fluent::Plugin::PrometheusFilter do - let(:tag) { 'prometheus.test' } + let(:tag) { 'prometheus.test.additional.parts' } let(:driver) { Fluent::Test::Driver::Filter.new(Fluent::Plugin::PrometheusFilter).configure(config) } let(:registry) { ::Prometheus::Client.registry } @@ -32,7 +33,4 @@ expect(es.first).to eq(message) end end - - it_behaves_like 'instruments record' - end end diff --git a/spec/fluent/plugin/shared.rb b/spec/fluent/plugin/shared.rb index 43ca97c..31dfbae 100644 --- a/spec/fluent/plugin/shared.rb +++ b/spec/fluent/plugin/shared.rb @@ -83,11 +83,15 @@ key foo foo ${foo} + the_prefix ${tag_prefix[2]} + another_part ${tag_parts[0]} tag ${tag} hostname ${hostname} + single_part ${tag_parts[1]} + the_suffix ${tag_suffix[2]} ] From b81aef81bc285ff23702ee5a4bcaa4f5e89131d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20So=CC=88derlund?= Date: Fri, 22 Mar 2019 10:54:24 +0100 Subject: [PATCH 3/4] Fixed typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jesper Söderlund --- spec/fluent/plugin/filter_prometheus_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/fluent/plugin/filter_prometheus_spec.rb b/spec/fluent/plugin/filter_prometheus_spec.rb index 466b348..0bae831 100644 --- a/spec/fluent/plugin/filter_prometheus_spec.rb +++ b/spec/fluent/plugin/filter_prometheus_spec.rb @@ -33,4 +33,7 @@ expect(es.first).to eq(message) end end + + it_behaves_like 'instruments record' + end end From 64de80a2921168e86d37a9fbe909a1bd56b57df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20So=CC=88derlund?= Date: Fri, 22 Mar 2019 10:57:22 +0100 Subject: [PATCH 4/4] Revert "Added tag-parts, suffixes and prefixes" This reverts commit 24e32a76a20503707c0fa7a8cd87e9429fbe1d9e. --- spec/fluent/plugin/filter_prometheus_spec.rb | 3 +-- spec/fluent/plugin/shared.rb | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/spec/fluent/plugin/filter_prometheus_spec.rb b/spec/fluent/plugin/filter_prometheus_spec.rb index 0bae831..0ddb362 100644 --- a/spec/fluent/plugin/filter_prometheus_spec.rb +++ b/spec/fluent/plugin/filter_prometheus_spec.rb @@ -2,10 +2,9 @@ require 'fluent/test/driver/filter' require 'fluent/plugin/filter_prometheus' require_relative 'shared' -require 'json' describe Fluent::Plugin::PrometheusFilter do - let(:tag) { 'prometheus.test.additional.parts' } + let(:tag) { 'prometheus.test' } let(:driver) { Fluent::Test::Driver::Filter.new(Fluent::Plugin::PrometheusFilter).configure(config) } let(:registry) { ::Prometheus::Client.registry } diff --git a/spec/fluent/plugin/shared.rb b/spec/fluent/plugin/shared.rb index 31dfbae..43ca97c 100644 --- a/spec/fluent/plugin/shared.rb +++ b/spec/fluent/plugin/shared.rb @@ -83,15 +83,11 @@ key foo foo ${foo} - the_prefix ${tag_prefix[2]} - another_part ${tag_parts[0]} tag ${tag} hostname ${hostname} - single_part ${tag_parts[1]} - the_suffix ${tag_suffix[2]} ]