class GRPCPrometheus::ServerMetrics
Attributes
server_handled_counter[R]
server_started_counter[R]
Public Class Methods
new()
click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 10 def initialize @registry = ::Prometheus::Client.registry @server_started_counter = @registry.counter( :grpc_server_started_total, 'Total number of RPCs started on the server.', ) @server_handled_counter = @registry.counter( :grpc_server_handled_total, 'Total number of RPCs completed on the server, regardless of success or failure.', ) end
Public Instance Methods
initialize_metrics(server)
click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 26 def initialize_metrics(server) # FIXME server.instance_variable_get(:@rpc_descs).each do |full_method_name, method_info| matches = full_method_name.match(%r{^/([^/]+)/}) service_name = matches[1] method_name = matches[2] pre_register_method(service_name, method_info) end end
pre_register_method(service_name, method_info)
click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 36 def pre_register_method(service_name, method_info) labels = { grpc_service: service_name, grpc_method: method_info.name.to_s, grpc_type: Util.type_from_method_info(method_info), } server_started_counter.increment(labels, 0) Util::ALL_CODES.each do |code, code_as_str| labels_with_code = labels.dup.merge({ grpc_code: code_as_str }) server_handled_counter.increment(labels_with_code, 0) end end
server_interceptor()
click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 22 def server_interceptor ServerInterceptor.new(self) end
start_metric_endpoint_in_background(bind: '0.0.0.0', port: 19191, metrics_path: '/metrics')
click to toggle source
# File lib/grpc_prometheus/server_metrics.rb, line 49 def start_metric_endpoint_in_background(bind: '0.0.0.0', port: 19191, metrics_path: '/metrics') config = { BindAddress: bind, Port: port, MaxClients: 5, Logger: ::WEBrick::Log.new(STDERR, ::WEBrick::Log::FATAL), AccessLog: [], } server = ::WEBrick::HTTPServer.new(config) server.mount(metrics_path, MonitorServlet, @registry) Thread.start do server.start end end