Class: Fluent::Plugin::PrometheusMonitorInput
- Inherits:
-
Input
- Object
- Input
- Fluent::Plugin::PrometheusMonitorInput
- Includes:
- PrometheusLabelParser
- Defined in:
- lib/fluent/plugin/in_prometheus_monitor.rb
Instance Attribute Summary collapse
-
#registry ⇒ Object
readonly
Returns the value of attribute registry.
Instance Method Summary collapse
- #configure(conf) ⇒ Object
- #get_gauge(name, docstring) ⇒ Object
-
#initialize ⇒ PrometheusMonitorInput
constructor
A new instance of PrometheusMonitorInput.
- #labels(plugin_info) ⇒ Object
- #multi_workers_ready? ⇒ Boolean
- #start ⇒ Object
- #update_monitor_info ⇒ Object
Methods included from PrometheusLabelParser
Constructor Details
#initialize ⇒ PrometheusMonitorInput
Returns a new instance of PrometheusMonitorInput.
15 16 17 18 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 15 def initialize super @registry = ::Prometheus::Client.registry end |
Instance Attribute Details
#registry ⇒ Object (readonly)
Returns the value of attribute registry.
13 14 15 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 13 def registry @registry end |
Instance Method Details
#configure(conf) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 24 def configure(conf) super hostname = Socket.gethostname = Fluent::Plugin::Prometheus.(log) = .build({ 'hostname' => hostname, 'worker_id' => fluentd_worker_id }) @base_labels = parse_labels_elements(conf) @base_labels.each do |key, value| unless value.is_a?(String) raise Fluent::ConfigError, "record accessor syntax is not available in prometheus_monitor" end @base_labels[key] = .(value) end if defined?(Fluent::Plugin) && defined?(Fluent::Plugin::MonitorAgentInput) # from v0.14.6 @monitor_agent = Fluent::Plugin::MonitorAgentInput.new else @monitor_agent = Fluent::MonitorAgentInput.new end end |
#get_gauge(name, docstring) ⇒ Object
99 100 101 102 103 104 105 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 99 def get_gauge(name, docstring) if @registry.exist?(name) @registry.get(name) else @registry.gauge(name, docstring: docstring, labels: @base_labels.keys + [:plugin_id, :plugin_category, :type]) end end |
#labels(plugin_info) ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 91 def labels(plugin_info) @base_labels.merge( plugin_id: plugin_info["plugin_id"], plugin_category: plugin_info["plugin_category"], type: plugin_info["type"], ) end |
#multi_workers_ready? ⇒ Boolean
20 21 22 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 20 def multi_workers_ready? true end |
#start ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 46 def start super @buffer_newest_timekey = get_gauge( :fluentd_status_buffer_newest_timekey, 'Newest timekey in buffer.') @buffer_oldest_timekey = get_gauge( :fluentd_status_buffer_oldest_timekey, 'Oldest timekey in buffer.') buffer_queue_length = get_gauge( :fluentd_status_buffer_queue_length, 'Current buffer queue length.') buffer_total_queued_size = get_gauge( :fluentd_status_buffer_total_bytes, 'Current total size of queued buffers.') retry_counts = get_gauge( :fluentd_status_retry_count, 'Current retry counts.') @monitor_info = { 'buffer_queue_length' => buffer_queue_length, 'buffer_total_queued_size' => buffer_total_queued_size, 'retry_count' => retry_counts, } timer_execute(:in_prometheus_monitor, @interval, &method(:update_monitor_info)) end |
#update_monitor_info ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/fluent/plugin/in_prometheus_monitor.rb', line 73 def update_monitor_info @monitor_agent.plugins_info_all.each do |info| label = labels(info) @monitor_info.each do |name, metric| if info[name] metric.set(info[name], labels: label) end end timekeys = info["buffer_timekeys"] if timekeys && !timekeys.empty? @buffer_newest_timekey.set(timekeys.max, labels: label) @buffer_oldest_timekey.set(timekeys.min, labels: label) end end end |