diff --git a/src/bin_node/node_run_command.ml b/src/bin_node/node_run_command.ml index fc478691af843e8904ddcb7207b79f9296f479bc..d1f11d4d8125bafee8d92eb238d3292cc958fc2c 100644 --- a/src/bin_node/node_run_command.ml +++ b/src/bin_node/node_run_command.ml @@ -753,6 +753,12 @@ let run ?verbosity ?sandbox ?target ?(cli_warnings = []) in let* () = Config_validation.check ?ignore_testchain_warning config in let* identity = init_identity_file config in + () + [@profiler.custom + {driver_ids = [Opentelemetry]} + (Opentelemetry_profiler.initialize + ~unique_identifier:(P2p_peer.Id.to_b58check identity.peer_id) + "octez-node")] ; Updater.init (Data_version.protocol_dir config.data_dir) ; let*! () = Event.(emit starting_node) @@ -892,10 +898,6 @@ let process sandbox verbosity target singleprocess force_history_mode_switch "Failed to parse the provided target. A ',' \ value was expected.") in - () - [@profiler.custom - {driver_ids = [Opentelemetry]} - (Opentelemetry_profiler.initialize "octez-node")] ; Lwt_lock_file.with_lock ~when_locked: (`Fail (Exn (Failure "Data directory is locked by another process"))) diff --git a/src/lib_profiler_backend/opentelemetry_profiler.ml b/src/lib_profiler_backend/opentelemetry_profiler.ml index 6d31761d4491a8675c747e7c04786a2a210a6107..602ffd3dc5fee8f8338740664295f3500bf0362f 100644 --- a/src/lib_profiler_backend/opentelemetry_profiler.ml +++ b/src/lib_profiler_backend/opentelemetry_profiler.ml @@ -5,7 +5,12 @@ (* *) (*****************************************************************************) -let initialize service_name = +let initialize ?unique_identifier service_name = + let service_name = + match unique_identifier with + | None -> service_name + | Some id -> Format.sprintf "%s-%s" service_name id + in Opentelemetry.Globals.service_name := service_name ; Opentelemetry.GC_metrics.basic_setup () ; Ambient_context.set_storage_provider (Ambient_context_lwt.storage ()) ; @@ -23,6 +28,9 @@ let add_event ?attrs name = |> Option.iter @@ fun scope -> Trace.add_event scope @@ fun () -> Event.make ?attrs name) +let add_attribute attrs id value = + match attrs with None -> [(id, value)] | Some attrs -> (id, value) :: attrs + let trace ?force_new_trace_id ?trace_state ?service_name ?attrs ?kind ?trace_id ?parent ?scope ?links name k = Opentelemetry.Trace.with_ @@ -42,12 +50,11 @@ let trace_operation op ?attrs = let op_hash = match op with `Operation op -> Operation.hash op | `Hash oph -> oph in - let metadata = - ( "operation_hash", - `String (Tezos_crypto.Hashed.Operation_hash.to_b58check op_hash) ) - in let attrs = - match attrs with None -> [metadata] | Some attrs -> metadata :: attrs + add_attribute + attrs + "operation_hash" + (`String (Tezos_crypto.Hashed.Operation_hash.to_b58check op_hash)) in trace ~trace_id:(op_hash_to_trace_id op_hash) ~attrs diff --git a/src/lib_profiler_backend/opentelemetry_profiler.mli b/src/lib_profiler_backend/opentelemetry_profiler.mli index d0ea56b73b3a0d6e6defc89946b77d6309497774..e6bc5aa3e651fa57b76fcef1fbe6cb8866576f73 100644 --- a/src/lib_profiler_backend/opentelemetry_profiler.mli +++ b/src/lib_profiler_backend/opentelemetry_profiler.mli @@ -5,9 +5,10 @@ (* *) (*****************************************************************************) -(** [initialize service_name] initializes the Opentelemetry client to output the - traces. *) -val initialize : string -> unit +(** [initialize ?unique_identifier service_name] initializes the Opentelemetry client to output the + traces. [?unique_identifier] can be used to discriminate a service used + in multiple binaries (for example multiple `octez-node` in the network). *) +val initialize : ?unique_identifier:string -> string -> unit (** [op_hash_to_trace_id op_hash] returns a valid [Opentelemetry.Trace_id.t] that can be used when tracing. When tracing an operation application, using the diff --git a/src/lib_shell/prevalidator.ml b/src/lib_shell/prevalidator.ml index b1f40cca9f119415fa40aba1ced35617b1b18ad8..c1750b1d27d97e5f1342f8571bc1152796eaa758 100644 --- a/src/lib_shell/prevalidator.ml +++ b/src/lib_shell/prevalidator.ml @@ -718,12 +718,18 @@ module Make_s else match Parser.parse oph op with | Error _ -> + () + [@profiler.custom + Opentelemetry_profiler.add_event "parse_operation failed"] ; let* () = Events.(emit unparsable_operation) oph in Prevalidator_classification.add_unparsable oph pv.shell.classification ; return_ok_unit | Ok parsed_op -> ( + () + [@profiler.custom + Opentelemetry_profiler.add_event "parse_operation succeeded"] ; let* v = pre_filter pv @@ -1532,6 +1538,8 @@ module Make op [@profiler.aggregate_s {verbosity = Notice; metadata = [("prometheus", "")]} "on_arrived"] + [@profiler.custom_s + Opentelemetry_profiler.trace_operation (`Hash oph) "on_arrived"] | Request.Advertise -> Requests.on_advertise pv.shell