fluent-plugin-prometheus 1.2.0 → 1.2.1
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 +5 -5
- data/README.md +4 -2
- data/fluent-plugin-prometheus.gemspec +1 -1
- data/lib/fluent/plugin/in_prometheus_monitor.rb +3 -1
- data/lib/fluent/plugin/prometheus.rb +12 -3
- data/spec/fluent/plugin/in_prometheus_monitor_spec.rb +25 -0
- data/spec/fluent/plugin/shared.rb +40 -0
- metadata +5 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 64ed448a556ffbc5fda04297363a53663dc2acff960d358bb24b07e227b99b3a
         | 
| 4 | 
            +
              data.tar.gz: 2ad3f13b35c60b0fad6664831e9d4edcacfcf963a3a819c658aad761bc64af2f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: cb6b43bf8e18dea2ff324a1a75738b51513c652ca3afdea8bf941f5d56e0b44028d19726daef5ee704070597e243e0c5262db1edaf6027adb3f1a2f6baf3c76a
         | 
| 7 | 
            +
              data.tar.gz: 0dd07480d6a1a4db6345e14727f932b1c2ce09ce9683f01f4fe4c3e008c608742ef47a68aca27371f182dc1b8cd995420bef3a4d666abe6ff0ec6ed218513916
         | 
    
        data/README.md
    CHANGED
    
    | @@ -339,9 +339,11 @@ You can add labels with static value or dynamic value from records. In `promethe | |
| 339 339 |  | 
| 340 340 | 
             
            All labels sections has same format. Each lines have key/value for label.
         | 
| 341 341 |  | 
| 342 | 
            -
            You can  | 
| 342 | 
            +
            You can access nested fields in records via dot or bracket notation (https://docs.fluentd.org/v1.0/articles/api-plugin-helper-record_accessor#syntax), for example: `$.kubernetes.namespace`, `$['key1'][0]['key2']`. The record accessor is enable only if the value starts with `$.` or `$[`. Other values are handled as raw string as is and may be expanded by placeholder described later.
         | 
| 343 343 |  | 
| 344 | 
            -
            You can  | 
| 344 | 
            +
            You can use placeholder for label values. The placeholders will be expanded from reserved values and records.
         | 
| 345 | 
            +
            If you specify `${hostname}`, it will be expanded by value of a hostname where fluentd runs.
         | 
| 346 | 
            +
            The placeholder for records is deprecated. Use record accessor syntax instead.
         | 
| 345 347 |  | 
| 346 348 | 
             
            Reserved placeholders are:
         | 
| 347 349 |  | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Gem::Specification.new do |spec|
         | 
| 2 2 | 
             
              spec.name          = "fluent-plugin-prometheus"
         | 
| 3 | 
            -
              spec.version       = "1.2. | 
| 3 | 
            +
              spec.version       = "1.2.1"
         | 
| 4 4 | 
             
              spec.authors       = ["Masahiro Sano"]
         | 
| 5 5 | 
             
              spec.email         = ["sabottenda@gmail.com"]
         | 
| 6 6 | 
             
              spec.summary       = %q{A fluent plugin that collects metrics and exposes for Prometheus.}
         | 
| @@ -27,7 +27,9 @@ module Fluent::Plugin | |
| 27 27 | 
             
                  placeholders = expander.prepare_placeholders({'hostname' => hostname, 'worker_id' => fluentd_worker_id})
         | 
| 28 28 | 
             
                  @base_labels = Fluent::Plugin::Prometheus.parse_labels_elements(conf)
         | 
| 29 29 | 
             
                  @base_labels.each do |key, value|
         | 
| 30 | 
            -
                     | 
| 30 | 
            +
                    if value.is_a?(String)
         | 
| 31 | 
            +
                      @base_labels[key] = expander.expand(value, placeholders)
         | 
| 32 | 
            +
                    end
         | 
| 31 33 | 
             
                  end
         | 
| 32 34 |  | 
| 33 35 | 
             
                  if defined?(Fluent::Plugin) && defined?(Fluent::Plugin::MonitorAgentInput)
         | 
| @@ -18,7 +18,13 @@ module Fluent | |
| 18 18 | 
             
                      labels.first.each do |key, value|
         | 
| 19 19 | 
             
                        labels.first.has_key?(key)
         | 
| 20 20 |  | 
| 21 | 
            -
                         | 
| 21 | 
            +
                        # use RecordAccessor only for $. and $[ syntax
         | 
| 22 | 
            +
                        # otherwise use the value as is or expand the value by RecordTransformer for ${} syntax
         | 
| 23 | 
            +
                        if value.start_with?('$.') || value.start_with?('$[')
         | 
| 24 | 
            +
                          base_labels[key.to_sym] = PluginHelper::RecordAccessor::Accessor.new(value)
         | 
| 25 | 
            +
                        else
         | 
| 26 | 
            +
                          base_labels[key.to_sym] = value
         | 
| 27 | 
            +
                        end
         | 
| 22 28 | 
             
                      end
         | 
| 23 29 | 
             
                    end
         | 
| 24 30 |  | 
| @@ -102,8 +108,11 @@ module Fluent | |
| 102 108 | 
             
                    def labels(record, expander, placeholders)
         | 
| 103 109 | 
             
                      label = {}
         | 
| 104 110 | 
             
                      @base_labels.each do |k, v|
         | 
| 105 | 
            -
                         | 
| 106 | 
            -
             | 
| 111 | 
            +
                        if v.is_a?(String)
         | 
| 112 | 
            +
                          label[k] = expander.expand(v, placeholders)
         | 
| 113 | 
            +
                        else
         | 
| 114 | 
            +
                          label[k] = v.call(record)
         | 
| 115 | 
            +
                        end
         | 
| 107 116 | 
             
                      end
         | 
| 108 117 | 
             
                      label
         | 
| 109 118 | 
             
                    end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'fluent/plugin/in_prometheus_monitor'
         | 
| 3 | 
            +
            require 'fluent/test/driver/input'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe Fluent::Plugin::PrometheusMonitorInput do
         | 
| 6 | 
            +
              MONITOR_CONFIG = %[
         | 
| 7 | 
            +
              @type prometheus_monitor
         | 
| 8 | 
            +
              <labels>
         | 
| 9 | 
            +
                host ${hostname}
         | 
| 10 | 
            +
                foo bar
         | 
| 11 | 
            +
                no_effect1 $.foo.bar
         | 
| 12 | 
            +
                no_effect2 $[0][1]
         | 
| 13 | 
            +
              </labels>
         | 
| 14 | 
            +
            ]
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              let(:config) { MONITOR_CONFIG }
         | 
| 17 | 
            +
              let(:port) { 24231 }
         | 
| 18 | 
            +
              let(:driver) { Fluent::Test::Driver::Input.new(Fluent::Plugin::PrometheusMonitorInput).configure(config) }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              describe '#configure' do
         | 
| 21 | 
            +
                it 'does not raise error' do
         | 
| 22 | 
            +
                  expect{driver}.not_to raise_error
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -73,6 +73,18 @@ PLACEHOLDER_CONFIG = BASE_CONFIG + %[ | |
| 73 73 | 
             
              </labels>
         | 
| 74 74 | 
             
            ]
         | 
| 75 75 |  | 
| 76 | 
            +
            ACCESSOR_CONFIG = BASE_CONFIG + %[
         | 
| 77 | 
            +
              <metric>
         | 
| 78 | 
            +
                name accessor_foo
         | 
| 79 | 
            +
                type counter
         | 
| 80 | 
            +
                desc Something foo.
         | 
| 81 | 
            +
                key foo
         | 
| 82 | 
            +
                <labels>
         | 
| 83 | 
            +
                  foo $.foo
         | 
| 84 | 
            +
                </labels>
         | 
| 85 | 
            +
              </metric>
         | 
| 86 | 
            +
            ]
         | 
| 87 | 
            +
             | 
| 76 88 | 
             
            COUNTER_WITHOUT_KEY_CONFIG = BASE_CONFIG + %[
         | 
| 77 89 | 
             
              <metric>
         | 
| 78 90 | 
             
                name without_key_foo
         | 
| @@ -107,6 +119,13 @@ shared_context 'placeholder_config' do | |
| 107 119 | 
             
              let(:counter) { registry.get(name) }
         | 
| 108 120 | 
             
            end
         | 
| 109 121 |  | 
| 122 | 
            +
            shared_context 'accessor_config' do
         | 
| 123 | 
            +
              let(:orig_name) { 'accessor_foo' }
         | 
| 124 | 
            +
              let(:config) { ACCESSOR_CONFIG.gsub(orig_name, name.to_s) }
         | 
| 125 | 
            +
              let(:name) { "#{orig_name}_#{gen_time_suffix}".to_sym }
         | 
| 126 | 
            +
              let(:counter) { registry.get(name) }
         | 
| 127 | 
            +
            end
         | 
| 128 | 
            +
             | 
| 110 129 | 
             
            shared_context 'counter_without_key_config' do
         | 
| 111 130 | 
             
              let(:orig_name) { 'without_key_foo' }
         | 
| 112 131 | 
             
              let(:config) { COUNTER_WITHOUT_KEY_CONFIG.gsub(orig_name, name.to_s) }
         | 
| @@ -137,6 +156,11 @@ shared_examples_for 'output configuration' do | |
| 137 156 | 
             
                it { expect{driver}.not_to raise_error }
         | 
| 138 157 | 
             
              end
         | 
| 139 158 |  | 
| 159 | 
            +
              describe 'configure accessor configuration' do
         | 
| 160 | 
            +
                include_context 'accessor_config'
         | 
| 161 | 
            +
                it { expect{driver}.not_to raise_error }
         | 
| 162 | 
            +
              end
         | 
| 163 | 
            +
             | 
| 140 164 | 
             
              describe 'configure counter without key configuration' do
         | 
| 141 165 | 
             
                include_context 'counter_without_key_config'
         | 
| 142 166 | 
             
                it { expect{driver}.not_to raise_error }
         | 
| @@ -217,6 +241,22 @@ shared_examples_for 'instruments record' do | |
| 217 241 | 
             
                end
         | 
| 218 242 | 
             
              end
         | 
| 219 243 |  | 
| 244 | 
            +
              context 'accessor config' do
         | 
| 245 | 
            +
                include_context 'accessor_config'
         | 
| 246 | 
            +
             | 
| 247 | 
            +
                before :each do
         | 
| 248 | 
            +
                  es
         | 
| 249 | 
            +
                end
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                it 'expands accessor with record values' do
         | 
| 252 | 
            +
                  expect(registry.metrics.map(&:name)).to include(name)
         | 
| 253 | 
            +
                  expect(counter).to be_kind_of(::Prometheus::Client::Metric)
         | 
| 254 | 
            +
                  key, _ = counter.values.find {|k,v| v ==  100 }
         | 
| 255 | 
            +
                  expect(key).to be_kind_of(Hash)
         | 
| 256 | 
            +
                  expect(key[:foo]).to eq(100)
         | 
| 257 | 
            +
                end
         | 
| 258 | 
            +
              end
         | 
| 259 | 
            +
             | 
| 220 260 | 
             
              context 'counter_without config' do
         | 
| 221 261 | 
             
                include_context 'counter_without_key_config'
         | 
| 222 262 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fluent-plugin-prometheus
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.2. | 
| 4 | 
            +
              version: 1.2.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Masahiro Sano
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-11- | 
| 11 | 
            +
            date: 2018-11-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: fluentd
         | 
| @@ -127,6 +127,7 @@ files: | |
| 127 127 | 
             
            - misc/prometheus.yaml
         | 
| 128 128 | 
             
            - misc/prometheus_alerts.yaml
         | 
| 129 129 | 
             
            - spec/fluent/plugin/filter_prometheus_spec.rb
         | 
| 130 | 
            +
            - spec/fluent/plugin/in_prometheus_monitor_spec.rb
         | 
| 130 131 | 
             
            - spec/fluent/plugin/out_prometheus_spec.rb
         | 
| 131 132 | 
             
            - spec/fluent/plugin/prometheus_spec.rb
         | 
| 132 133 | 
             
            - spec/fluent/plugin/shared.rb
         | 
| @@ -151,12 +152,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 151 152 | 
             
                  version: '0'
         | 
| 152 153 | 
             
            requirements: []
         | 
| 153 154 | 
             
            rubyforge_project: 
         | 
| 154 | 
            -
            rubygems_version: 2.6 | 
| 155 | 
            +
            rubygems_version: 2.7.6
         | 
| 155 156 | 
             
            signing_key: 
         | 
| 156 157 | 
             
            specification_version: 4
         | 
| 157 158 | 
             
            summary: A fluent plugin that collects metrics and exposes for Prometheus.
         | 
| 158 159 | 
             
            test_files:
         | 
| 159 160 | 
             
            - spec/fluent/plugin/filter_prometheus_spec.rb
         | 
| 161 | 
            +
            - spec/fluent/plugin/in_prometheus_monitor_spec.rb
         | 
| 160 162 | 
             
            - spec/fluent/plugin/out_prometheus_spec.rb
         | 
| 161 163 | 
             
            - spec/fluent/plugin/prometheus_spec.rb
         | 
| 162 164 | 
             
            - spec/fluent/plugin/shared.rb
         |