mirror of https://github.com/mastodon/mastodon
				
				
				
			Add an optional metric exporter (#33734)
							parent
							
								
									b868e30fdf
								
							
						
					
					
						commit
						59384282ed
					
				@ -0,0 +1,27 @@
 | 
			
		||||
#!/usr/bin/env ruby
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# This file was generated by Bundler.
 | 
			
		||||
#
 | 
			
		||||
# The application 'prometheus_exporter' is installed as part of a gem, and
 | 
			
		||||
# this file is here to facilitate running it.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
 | 
			
		||||
 | 
			
		||||
bundle_binstub = File.expand_path("bundle", __dir__)
 | 
			
		||||
 | 
			
		||||
if File.file?(bundle_binstub)
 | 
			
		||||
  if File.read(bundle_binstub, 300).include?("This file was generated by Bundler")
 | 
			
		||||
    load(bundle_binstub)
 | 
			
		||||
  else
 | 
			
		||||
    abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
 | 
			
		||||
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
require "rubygems"
 | 
			
		||||
require "bundler/setup"
 | 
			
		||||
 | 
			
		||||
load Gem.bin_path("prometheus_exporter", "prometheus_exporter")
 | 
			
		||||
@ -0,0 +1,24 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
if ENV['MASTODON_PROMETHEUS_EXPORTER_ENABLED'] == 'true'
 | 
			
		||||
  if ENV['MASTODON_PROMETHEUS_EXPORTER_LOCAL'] == 'true'
 | 
			
		||||
    require 'prometheus_exporter/server'
 | 
			
		||||
    require 'prometheus_exporter/client'
 | 
			
		||||
 | 
			
		||||
    # bind is the address, on which the webserver will listen
 | 
			
		||||
    # port is the port that will provide the /metrics route
 | 
			
		||||
    server = PrometheusExporter::Server::WebServer.new bind: ENV.fetch('MASTODON_PROMETHEUS_EXPORTER_HOST', 'localhost'), port: ENV.fetch('MASTODON_PROMETHEUS_EXPORTER_PORT', '9394').to_i
 | 
			
		||||
    server.start
 | 
			
		||||
 | 
			
		||||
    # wire up a default local client
 | 
			
		||||
    PrometheusExporter::Client.default = PrometheusExporter::LocalClient.new(collector: server.collector)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  if ENV['MASTODON_PROMETHEUS_EXPORTER_WEB_DETAILED_METRICS'] == 'true'
 | 
			
		||||
    # Optional, as those metrics might generate extra overhead and be redundant with what OTEL provides
 | 
			
		||||
    require 'prometheus_exporter/middleware'
 | 
			
		||||
 | 
			
		||||
    # Per-action/controller request stats like HTTP status and timings
 | 
			
		||||
    Rails.application.middleware.unshift PrometheusExporter::Middleware
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue