Module: SidekiqPrometheus
- Defined in:
- lib/sidekiq_prometheus.rb,
lib/sidekiq_prometheus/version.rb
Defined Under Namespace
Modules: Metrics Classes: Error, JobMetrics, PeriodicMetrics
Constant Summary collapse
- VERSION =
"3.0.0"
Class Attribute Summary collapse
-
.client ⇒ Object
Prometheus::Client.
-
.custom_labels ⇒ Hash{Symbol => Array<Symbol>}
Custom labels applied to specific metrics.
-
.custom_metrics ⇒ Array
Custom metrics that will be registered on setup.
-
.gc_metrics_enabled ⇒ Boolean
Setting to control enabling/disabling GC metrics.
-
.global_metrics_enabled ⇒ Boolean
Setting to control enabling/disabling global metrics.
-
.init_label_sets ⇒ Hash{Symbol => Array(Hash)}
{ metric_name: [‘value1’, other_label: ‘value1’, ‘value1’, other_label: ‘value2’], another_metric_name: [‘value1’, other_label: ‘value1’] }.
-
.metrics_host ⇒ String
Host on which the metrics server will listen.
-
.metrics_port ⇒ Integer
Port on which the metrics server will listen.
-
.metrics_server_enabled ⇒ Boolean
Setting to control enabling/disabling the metrics server.
-
.metrics_server_logger_enabled ⇒ Boolean
When set to false will silence the metric server access logs.
-
.periodic_metrics_enabled ⇒ Boolean
Setting to control enabling/disabling periodic metrics.
-
.periodic_reporting_interval ⇒ Integer
Interval in seconds to record metrics.
-
.preset_labels ⇒ Hash
Preset labels applied to every registered metric.
-
.registry ⇒ Prometheus::Client::Registry
Prometheus client metric registry.
- .setup_complete ⇒ Object writeonly
Class Method Summary collapse
-
.[](metric) ⇒ Prometheus::Client::Metric
(also: get)
Get a metric from the registry.
-
.configure {|_self| ... } ⇒ Object
(also: configure!)
Configure SidekiqPrometheus and setup for reporting.
-
.gc_metrics_enabled? ⇒ Boolean
Helper method for
gc_metrics_enabled
configuration setting. -
.global_metrics_enabled? ⇒ Boolean
Helper method for
global_metrics_enabled
configuration setting RequiresSidekiq::Enterprise
as it uses the leader election functionality. -
.metrics_server ⇒ Object
Start a new Prometheus exporter in a new thread.
-
.metrics_server_enabled? ⇒ Boolean
Helper method for
metrics_server_enabled
configuration setting. -
.metrics_server_logger_enabled? ⇒ Boolean
Helper method for
metrics_server_logger_enabled
configuration setting. -
.periodic_metrics_enabled? ⇒ Boolean
Helper method for
periodic_metrics_enabled
configuration setting RequiresSidekiq::Enterprise
as it uses the leader election functionality. -
.register_custom_metrics ⇒ Object
Register custom metrics Internal method called by
setup
. -
.setup ⇒ Object
register metrics and instrument sidekiq.
-
.sidekiq_setup ⇒ Object
Add Prometheus instrumentation to sidekiq.
- .sidekiq_seven? ⇒ Boolean
Class Attribute Details
.client ⇒ Object
Returns Prometheus::Client.
100 101 102 |
# File 'lib/sidekiq_prometheus.rb', line 100 def client @client ||= Prometheus::Client end |
.custom_labels ⇒ Hash{Symbol => Array<Symbol>}
Returns Custom labels applied to specific metrics.
23 24 25 |
# File 'lib/sidekiq_prometheus.rb', line 23 def custom_labels @custom_labels end |
.custom_metrics ⇒ Array
Each element of the array is a hash and must have the required keys: ‘:name`, `:type`, and `:docstring`. The values for `:name` and `:type` should be symbols and `:docstring` should be a string. `preset_labels` is optional and, if used, must be a hash of labels that will be included on every instance of this metric.
Returns Custom metrics that will be registered on setup.
38 39 40 |
# File 'lib/sidekiq_prometheus.rb', line 38 def custom_metrics @custom_metrics end |
.gc_metrics_enabled ⇒ Boolean
Returns Setting to control enabling/disabling GC metrics. Default: true.
41 42 43 |
# File 'lib/sidekiq_prometheus.rb', line 41 def gc_metrics_enabled @gc_metrics_enabled end |
.global_metrics_enabled ⇒ Boolean
Returns Setting to control enabling/disabling global metrics. Default: true.
44 45 46 |
# File 'lib/sidekiq_prometheus.rb', line 44 def global_metrics_enabled @global_metrics_enabled end |
.init_label_sets ⇒ Hash{Symbol => Array(Hash)}
metric_name: [{label: 'value1', other_label: 'value1', 'value1', other_label: 'value2'],
another_metric_name: ['value1', other_label: 'value1']
}
52 53 54 |
# File 'lib/sidekiq_prometheus.rb', line 52 def init_label_sets @init_label_sets end |
.metrics_host ⇒ String
Returns Host on which the metrics server will listen. Default: localhost.
64 65 66 |
# File 'lib/sidekiq_prometheus.rb', line 64 def metrics_host @metrics_host end |
.metrics_port ⇒ Integer
Returns Port on which the metrics server will listen. Default: 9357.
67 68 69 |
# File 'lib/sidekiq_prometheus.rb', line 67 def metrics_port @metrics_port end |
.metrics_server_enabled ⇒ Boolean
Returns Setting to control enabling/disabling the metrics server. Default: true.
61 62 63 |
# File 'lib/sidekiq_prometheus.rb', line 61 def metrics_server_enabled @metrics_server_enabled end |
.metrics_server_logger_enabled ⇒ Boolean
Returns When set to false will silence the metric server access logs. Default: true.
70 71 72 |
# File 'lib/sidekiq_prometheus.rb', line 70 def metrics_server_logger_enabled @metrics_server_logger_enabled end |
.periodic_metrics_enabled ⇒ Boolean
Returns Setting to control enabling/disabling periodic metrics. Default: true.
55 56 57 |
# File 'lib/sidekiq_prometheus.rb', line 55 def periodic_metrics_enabled @periodic_metrics_enabled end |
.periodic_reporting_interval ⇒ Integer
Returns Interval in seconds to record metrics. Default: 30.
58 59 60 |
# File 'lib/sidekiq_prometheus.rb', line 58 def periodic_reporting_interval @periodic_reporting_interval end |
.preset_labels ⇒ Hash
Returns Preset labels applied to every registered metric.
20 21 22 |
# File 'lib/sidekiq_prometheus.rb', line 20 def preset_labels @preset_labels end |
.registry ⇒ Prometheus::Client::Registry
Prometheus client metric registry
169 170 171 |
# File 'lib/sidekiq_prometheus.rb', line 169 def registry @registry ||= client::Registry.new end |
.setup_complete=(value) ⇒ Object (writeonly)
81 82 83 |
# File 'lib/sidekiq_prometheus.rb', line 81 def setup_complete=(value) @setup_complete = value end |
Class Method Details
.[](metric) ⇒ Prometheus::Client::Metric Also known as: get
Get a metric from the registry
157 158 159 |
# File 'lib/sidekiq_prometheus.rb', line 157 def [](metric) registry.get(metric.to_sym) end |
.configure {|_self| ... } ⇒ Object Also known as: configure!
Configure SidekiqPrometheus and setup for reporting
112 113 114 115 |
# File 'lib/sidekiq_prometheus.rb', line 112 def configure yield self setup end |
.gc_metrics_enabled? ⇒ Boolean
Helper method for gc_metrics_enabled
configuration setting
119 120 121 |
# File 'lib/sidekiq_prometheus.rb', line 119 def gc_metrics_enabled? gc_metrics_enabled end |
.global_metrics_enabled? ⇒ Boolean
Helper method for global_metrics_enabled
configuration setting Requires Sidekiq::Enterprise
as it uses the leader election functionality
127 128 129 |
# File 'lib/sidekiq_prometheus.rb', line 127 def global_metrics_enabled? Object.const_defined?("Sidekiq::Enterprise") && global_metrics_enabled end |
.metrics_server ⇒ Object
Start a new Prometheus exporter in a new thread. Will listen on SidekiqPrometheus.metrics_host and SidekiqPrometheus.metrics_port
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/sidekiq_prometheus.rb', line 222 def metrics_server opts = { Port: SidekiqPrometheus.metrics_port, Host: SidekiqPrometheus.metrics_host } unless metrics_server_logger_enabled? opts[:Logger] = WEBrick::Log.new(File::NULL) opts[:AccessLog] = [] end @_metrics_server ||= Thread.new do Rackup::Handler::WEBrick.run( Rack::Builder.new { use Prometheus::Middleware::Exporter, registry: SidekiqPrometheus.registry run ->(_) { [301, {"Location" => "/metrics"}, []] } }, **opts ) end end |
.metrics_server_enabled? ⇒ Boolean
Helper method for metrics_server_enabled
configuration setting
142 143 144 |
# File 'lib/sidekiq_prometheus.rb', line 142 def metrics_server_enabled? metrics_server_enabled end |
.metrics_server_logger_enabled? ⇒ Boolean
Helper method for metrics_server_logger_enabled
configuration setting
149 150 151 |
# File 'lib/sidekiq_prometheus.rb', line 149 def metrics_server_logger_enabled? metrics_server_logger_enabled end |
.periodic_metrics_enabled? ⇒ Boolean
Helper method for periodic_metrics_enabled
configuration setting Requires Sidekiq::Enterprise
as it uses the leader election functionality
135 136 137 |
# File 'lib/sidekiq_prometheus.rb', line 135 def periodic_metrics_enabled? periodic_metrics_enabled end |
.register_custom_metrics ⇒ Object
Register custom metrics Internal method called by setup
. This method should not be called from application code in most cases.
176 177 178 179 180 181 182 |
# File 'lib/sidekiq_prometheus.rb', line 176 def register_custom_metrics return if custom_metrics.empty? raise SidekiqPrometheus::Error, "custom_metrics is not an array." unless custom_metrics.is_a?(Array) SidekiqPrometheus::Metrics.register_metrics(custom_metrics) end |
.setup ⇒ Object
register metrics and instrument sidekiq
186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/sidekiq_prometheus.rb', line 186 def setup return false if @setup_complete SidekiqPrometheus::Metrics.register_sidekiq_job_metrics SidekiqPrometheus::Metrics.register_sidekiq_gc_metric if gc_metrics_enabled? SidekiqPrometheus::Metrics.register_sidekiq_worker_gc_metrics if gc_metrics_enabled? && periodic_metrics_enabled? register_custom_metrics sidekiq_setup self.setup_complete = true end |
.sidekiq_setup ⇒ Object
Add Prometheus instrumentation to sidekiq
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/sidekiq_prometheus.rb', line 200 def sidekiq_setup Sidekiq.configure_server do |config| config.server_middleware do |chain| chain.add SidekiqPrometheus::JobMetrics end if periodic_metrics_enabled? config.on(:startup) { SidekiqPrometheus::PeriodicMetrics.reporter(config).start } config.on(:shutdown) { SidekiqPrometheus::PeriodicMetrics.reporter(config).stop } end if metrics_server_enabled? config.on(:startup) { SidekiqPrometheus.metrics_server } config.on(:shutdown) { SidekiqPrometheus.metrics_server.kill } end end end |
.sidekiq_seven? ⇒ Boolean
244 245 246 |
# File 'lib/sidekiq_prometheus.rb', line 244 def sidekiq_seven? @sk7 ||= Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("7.0") end |