From a7d5fc0c01f7e8e51f04aadcecc3f2424afca1e1 Mon Sep 17 00:00:00 2001 From: Gabriel Moise Date: Wed, 12 Jun 2024 14:39:16 +0300 Subject: [PATCH 1/2] RPC_metrics: Add output size for each RPC call metric --- src/bin_node/node_run_command.ml | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/bin_node/node_run_command.ml b/src/bin_node/node_run_command.ml index 47ca0a7deaa8..6e2b8bf4ba90 100644 --- a/src/bin_node/node_run_command.ml +++ b/src/bin_node/node_run_command.ml @@ -378,6 +378,14 @@ let rpc_metrics = ~subsystem:"rpc" "calls" +let rpc_output_sizes = + Prometheus.Gauge.v_labels + ~label_names:["endpoint"; "method"] + ~help:"RPC endpoint response body output sizes in bytes." + ~namespace:Tezos_version.Octez_node_version.namespace + ~subsystem:"rpc" + "calls_output_size" + module Metrics_server = Prometheus_app.Cohttp (Cohttp_lwt_unix.Server) type port = int @@ -451,8 +459,23 @@ let launch_rpc_server (config : Config_file.t) dir rpc_server_kind addr = Lwt.return (`Response response) else Tezos_rpc_http_server.RPC_server.resto_callback server conn req body in - let update_metrics uri meth = - Prometheus.Summary.(time (labels rpc_metrics [uri; meth]) Sys.time) + (* Update total output size *) + let update_output_size uri meth output_size = + Prometheus.Gauge.( + inc (labels rpc_output_sizes [uri; meth]) (Int64.to_float output_size)) + in + let update_metrics uri meth callback = + let*! (response : Cohttp_lwt_unix.Server.response_action) = + (* Update number of operations and total time *) + Prometheus.Summary.(time (labels rpc_metrics [uri; meth]) Sys.time) + callback + in + match response with + | `Response (response, body) -> + let*! output_size, body = Cohttp_lwt.Body.length body in + update_output_size uri meth output_size ; + Lwt.return (`Response (response, body)) + | response -> Lwt.return response in let callback = RPC_middleware.rpc_metrics_transform_callback ~update_metrics dir callback -- GitLab From 2a53c556c31a23a445ce9231e4e0947f1210295b Mon Sep 17 00:00:00 2001 From: Gabriel Moise Date: Wed, 12 Jun 2024 14:53:17 +0300 Subject: [PATCH 2/2] [WIP] RPC_metrics: Add counter for status codes --- src/bin_node/node_run_command.ml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/bin_node/node_run_command.ml b/src/bin_node/node_run_command.ml index 6e2b8bf4ba90..9f657a6047f7 100644 --- a/src/bin_node/node_run_command.ml +++ b/src/bin_node/node_run_command.ml @@ -386,6 +386,13 @@ let rpc_output_sizes = ~subsystem:"rpc" "calls_output_size" +let rpc_ok_responses_counter = + Prometheus.Counter.v + ~help:"Total number of 200 response codes from RPC calls" + ~namespace:Tezos_version.Octez_node_version.namespace + ~subsystem:"rpc" + "200_status_codes" + module Metrics_server = Prometheus_app.Cohttp (Cohttp_lwt_unix.Server) type port = int @@ -464,6 +471,12 @@ let launch_rpc_server (config : Config_file.t) dir rpc_server_kind addr = Prometheus.Gauge.( inc (labels rpc_output_sizes [uri; meth]) (Int64.to_float output_size)) in + (* Update status code metric *) + let update_status_code (response : Cohttp_lwt.Response.t) = + match response.status with + | `OK -> Prometheus.Counter.inc_one rpc_ok_responses_counter + | _ -> () + in let update_metrics uri meth callback = let*! (response : Cohttp_lwt_unix.Server.response_action) = (* Update number of operations and total time *) @@ -474,8 +487,11 @@ let launch_rpc_server (config : Config_file.t) dir rpc_server_kind addr = | `Response (response, body) -> let*! output_size, body = Cohttp_lwt.Body.length body in update_output_size uri meth output_size ; + update_status_code response ; Lwt.return (`Response (response, body)) - | response -> Lwt.return response + | `Expert (response, _fn) as expert_response -> + update_status_code response ; + Lwt.return expert_response in let callback = RPC_middleware.rpc_metrics_transform_callback ~update_metrics dir callback -- GitLab