mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-13 05:56:20 -04:00
feat: use runtime metric conventions; add runtime attributes
See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/semantic_conventions/runtime-environment-metrics.md#runtime-environment-specific-metrics---processruntimeenvironment
This commit is contained in:
parent
ba70c5d71b
commit
bf4ac37f21
1 changed files with 66 additions and 24 deletions
|
|
@ -208,6 +208,38 @@ end = struct
|
||||||
let of_hex s = of_bytes (Util_.bytes_of_hex s)
|
let of_hex s = of_bytes (Util_.bytes_of_hex s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
module Conventions = struct
|
||||||
|
module Attributes = struct
|
||||||
|
module Process = struct
|
||||||
|
module Runtime = struct
|
||||||
|
let name = "process.runtime.name"
|
||||||
|
let version = "process.runtime.version"
|
||||||
|
let description = "process.runtime.description"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
module Service = struct
|
||||||
|
let name = "service.name"
|
||||||
|
let namespace = "service.namespace"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module Metrics = struct
|
||||||
|
module Process = struct
|
||||||
|
module Runtime = struct
|
||||||
|
module Ocaml = struct
|
||||||
|
module GC = struct
|
||||||
|
let compactions = "process.runtime.ocaml.gc.compactions"
|
||||||
|
let major_collections = "process.runtime.ocaml.gc.major_collections"
|
||||||
|
let major_heap = "process.runtime.ocaml.gc.major_heap"
|
||||||
|
let minor_allocated = "process.runtime.ocaml.gc.minor_allocated"
|
||||||
|
let minor_collections = "process.runtime.ocaml.gc.minor_collections"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
(** Process-wide metadata, environment variables, etc. *)
|
(** Process-wide metadata, environment variables, etc. *)
|
||||||
module Globals = struct
|
module Globals = struct
|
||||||
open Proto.Common
|
open Proto.Common
|
||||||
|
|
@ -418,15 +450,16 @@ module Trace = struct
|
||||||
~spans () in
|
~spans () in
|
||||||
let attributes =
|
let attributes =
|
||||||
let open Proto.Common in
|
let open Proto.Common in
|
||||||
|
let open Conventions.Attributes in
|
||||||
let l = List.map _conv_key_value attrs in
|
let l = List.map _conv_key_value attrs in
|
||||||
let l =
|
let l =
|
||||||
default_key_value ~key:"service.name"
|
default_key_value ~key:Service.name
|
||||||
~value:(Some (String_value service_name)) () :: l
|
~value:(Some (String_value service_name)) () :: l
|
||||||
in
|
in
|
||||||
let l = match !Globals.service_namespace with
|
let l = match !Globals.service_namespace with
|
||||||
| None -> l
|
| None -> l
|
||||||
| Some v ->
|
| Some v ->
|
||||||
default_key_value ~key:"service.namespace"
|
default_key_value ~key:Service.namespace
|
||||||
~value:(Some (String_value v)) () :: l
|
~value:(Some (String_value v)) () :: l
|
||||||
in
|
in
|
||||||
l |> Globals.merge_global_attributes_
|
l |> Globals.merge_global_attributes_
|
||||||
|
|
@ -681,6 +714,14 @@ module GC_metrics : sig
|
||||||
val get_metrics : unit -> Metrics.t list
|
val get_metrics : unit -> Metrics.t list
|
||||||
(** Get a few metrics from the current state of the GC *)
|
(** Get a few metrics from the current state of the GC *)
|
||||||
end = struct
|
end = struct
|
||||||
|
(** See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/process.md#process-runtimes *)
|
||||||
|
let runtime_attributes : Proto.Common.key_value list =
|
||||||
|
Conventions.Attributes.[
|
||||||
|
(Process.Runtime.name, "ocaml");
|
||||||
|
(Process.Runtime.version, Sys.ocaml_version);
|
||||||
|
]
|
||||||
|
|> List.map (fun (key, value) ->
|
||||||
|
Proto.Common.default_key_value ~key ~value:(Some (String_value value)) ())
|
||||||
|
|
||||||
let basic_setup () =
|
let basic_setup () =
|
||||||
let trigger() =
|
let trigger() =
|
||||||
|
|
@ -701,26 +742,27 @@ end = struct
|
||||||
let gc = Gc.quick_stat () in
|
let gc = Gc.quick_stat () in
|
||||||
let start_time_unix_nano = !last in
|
let start_time_unix_nano = !last in
|
||||||
last := Timestamp_ns.now_unix_ns();
|
last := Timestamp_ns.now_unix_ns();
|
||||||
Metrics.(
|
let open Metrics in
|
||||||
[
|
let open Conventions.Metrics in
|
||||||
gauge ~name:"ocaml.gc.major_heap" ~unit_:"B"
|
[
|
||||||
[ int (word_to_bytes gc.Gc.heap_words) ];
|
gauge ~name:Process.Runtime.Ocaml.GC.major_heap ~unit_:"B"
|
||||||
sum ~name:"ocaml.gc_minor_allocated"
|
[ int (word_to_bytes gc.Gc.heap_words) ];
|
||||||
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
sum ~name:Process.Runtime.Ocaml.GC.minor_allocated
|
||||||
~is_monotonic:true
|
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
||||||
~unit_:"B"
|
~is_monotonic:true
|
||||||
[ float ~start_time_unix_nano (word_to_bytes_f gc.Gc.minor_words) ];
|
~unit_:"B"
|
||||||
sum ~name:"ocaml.gc.minor_collections"
|
[ float ~start_time_unix_nano (word_to_bytes_f gc.Gc.minor_words) ];
|
||||||
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
sum ~name:Process.Runtime.Ocaml.GC.minor_collections
|
||||||
~is_monotonic:true
|
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
||||||
[ int ~start_time_unix_nano gc.Gc.minor_collections ];
|
~is_monotonic:true
|
||||||
sum ~name:"ocaml.gc.major_collections"
|
[ int ~start_time_unix_nano gc.Gc.minor_collections ];
|
||||||
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
sum ~name:Process.Runtime.Ocaml.GC.major_collections
|
||||||
~is_monotonic:true
|
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
||||||
[ int ~start_time_unix_nano gc.Gc.major_collections ];
|
~is_monotonic:true
|
||||||
sum ~name:"ocaml.gc.compactions"
|
[ int ~start_time_unix_nano gc.Gc.major_collections ];
|
||||||
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
sum ~name:Process.Runtime.Ocaml.GC.compactions
|
||||||
~is_monotonic:true
|
~aggregation_temporality:Metrics.Aggregation_temporality_cumulative
|
||||||
[ int ~start_time_unix_nano gc.Gc.compactions ];
|
~is_monotonic:true
|
||||||
])
|
[ int ~start_time_unix_nano gc.Gc.compactions ];
|
||||||
|
]
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue