mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-07 18:37:56 -05:00
add config parameter for self_metrics
This commit is contained in:
parent
00d41b5354
commit
d57c182daa
8 changed files with 50 additions and 10 deletions
|
|
@ -186,7 +186,8 @@ let setup_ ~sw ~config env : unit =
|
||||||
|
|
||||||
Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () ->
|
Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () ->
|
||||||
"opentelemetry: cohttp-eio exporter installed");
|
"opentelemetry: cohttp-eio exporter installed");
|
||||||
Opentelemetry_client.Self_trace.set_enabled config.self_trace
|
Opentelemetry_client.Self_trace.set_enabled config.self_trace;
|
||||||
|
if config.self_metrics then Opentelemetry.Sdk.setup_self_metrics ()
|
||||||
|
|
||||||
let setup ?(config = Config.make ()) ?(enable = true) ~sw env =
|
let setup ?(config = Config.make ()) ?(enable = true) ~sw env =
|
||||||
if enable && not config.sdk_disabled then setup_ ~sw ~config env
|
if enable && not config.sdk_disabled then setup_ ~sw ~config env
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,7 @@ let setup_ ~config () : unit =
|
||||||
Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () ->
|
Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () ->
|
||||||
"opentelemetry: cohttp-lwt exporter installed");
|
"opentelemetry: cohttp-lwt exporter installed");
|
||||||
Opentelemetry_client.Self_trace.set_enabled config.self_trace;
|
Opentelemetry_client.Self_trace.set_enabled config.self_trace;
|
||||||
|
if config.self_metrics then Opentelemetry.Sdk.setup_self_metrics ();
|
||||||
()
|
()
|
||||||
|
|
||||||
let setup ?(config = Config.make ()) ?(enable = true) () =
|
let setup ?(config = Config.make ()) ?(enable = true) () =
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ let setup_ ~config () : Exporter.t =
|
||||||
Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () ->
|
Opentelemetry.Self_debug.log Opentelemetry.Self_debug.Info (fun () ->
|
||||||
"opentelemetry: ocurl-lwt exporter installed");
|
"opentelemetry: ocurl-lwt exporter installed");
|
||||||
Opentelemetry_client.Self_trace.set_enabled config.self_trace;
|
Opentelemetry_client.Self_trace.set_enabled config.self_trace;
|
||||||
|
if config.self_metrics then Opentelemetry.Sdk.setup_self_metrics ();
|
||||||
|
|
||||||
exp
|
exp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ let setup_ ~config () : OTEL.Exporter.t =
|
||||||
"opentelemetry: ocurl exporter installed");
|
"opentelemetry: ocurl exporter installed");
|
||||||
|
|
||||||
OTELC.Self_trace.set_enabled config.common.self_trace;
|
OTELC.Self_trace.set_enabled config.common.self_trace;
|
||||||
|
if config.common.self_metrics then Opentelemetry.Sdk.setup_self_metrics ();
|
||||||
exporter
|
exporter
|
||||||
|
|
||||||
let remove_exporter () : unit =
|
let remove_exporter () : unit =
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ type t = {
|
||||||
metrics: Opentelemetry.Provider_config.t;
|
metrics: Opentelemetry.Provider_config.t;
|
||||||
logs: Opentelemetry.Provider_config.t;
|
logs: Opentelemetry.Provider_config.t;
|
||||||
self_trace: bool;
|
self_trace: bool;
|
||||||
|
self_metrics: bool;
|
||||||
http_concurrency_level: int option;
|
http_concurrency_level: int option;
|
||||||
retry_max_attempts: int;
|
retry_max_attempts: int;
|
||||||
retry_initial_delay_ms: float;
|
retry_initial_delay_ms: float;
|
||||||
|
|
@ -65,6 +66,7 @@ let pp out (self : t) : unit =
|
||||||
log_level;
|
log_level;
|
||||||
sdk_disabled;
|
sdk_disabled;
|
||||||
self_trace;
|
self_trace;
|
||||||
|
self_metrics;
|
||||||
url_traces;
|
url_traces;
|
||||||
url_metrics;
|
url_metrics;
|
||||||
url_logs;
|
url_logs;
|
||||||
|
|
@ -91,7 +93,8 @@ let pp out (self : t) : unit =
|
||||||
in
|
in
|
||||||
Format.fprintf out
|
Format.fprintf out
|
||||||
"{@[ debug=%B;@ log_level=%a;@ sdk_disabled=%B;@ self_trace=%B;@ \
|
"{@[ debug=%B;@ log_level=%a;@ sdk_disabled=%B;@ self_trace=%B;@ \
|
||||||
url_traces=%S;@ url_metrics=%S;@ url_logs=%S;@ @[<2>headers=@,\
|
self_metrics=%B;@ url_traces=%S;@ url_metrics=%S;@ url_logs=%S;@ \
|
||||||
|
@[<2>headers=@,\
|
||||||
%a@];@ @[<2>headers_traces=@,\
|
%a@];@ @[<2>headers_traces=@,\
|
||||||
%a@];@ @[<2>headers_metrics=@,\
|
%a@];@ @[<2>headers_metrics=@,\
|
||||||
%a@];@ @[<2>headers_logs=@,\
|
%a@];@ @[<2>headers_logs=@,\
|
||||||
|
|
@ -100,8 +103,8 @@ let pp out (self : t) : unit =
|
||||||
logs=%a;@ http_concurrency_level=%a;@ retry_max_attempts=%d;@ \
|
logs=%a;@ http_concurrency_level=%a;@ retry_max_attempts=%d;@ \
|
||||||
retry_initial_delay_ms=%.0f;@ retry_max_delay_ms=%.0f;@ \
|
retry_initial_delay_ms=%.0f;@ retry_max_delay_ms=%.0f;@ \
|
||||||
retry_backoff_multiplier=%.1f @]}"
|
retry_backoff_multiplier=%.1f @]}"
|
||||||
debug pp_log_level log_level sdk_disabled self_trace url_traces url_metrics
|
debug pp_log_level log_level sdk_disabled self_trace self_metrics url_traces
|
||||||
url_logs ppheaders headers ppheaders headers_traces ppheaders
|
url_metrics url_logs ppheaders headers ppheaders headers_traces ppheaders
|
||||||
headers_metrics ppheaders headers_logs pp_protocol protocol timeout_ms
|
headers_metrics ppheaders headers_logs pp_protocol protocol timeout_ms
|
||||||
timeout_traces_ms timeout_metrics_ms timeout_logs_ms pp_provider_config
|
timeout_traces_ms timeout_metrics_ms timeout_logs_ms pp_provider_config
|
||||||
traces pp_provider_config metrics pp_provider_config logs ppiopt
|
traces pp_provider_config metrics pp_provider_config logs ppiopt
|
||||||
|
|
@ -135,6 +138,7 @@ type 'k make =
|
||||||
?timeout_metrics_ms:int ->
|
?timeout_metrics_ms:int ->
|
||||||
?timeout_logs_ms:int ->
|
?timeout_logs_ms:int ->
|
||||||
?self_trace:bool ->
|
?self_trace:bool ->
|
||||||
|
?self_metrics:bool ->
|
||||||
?http_concurrency_level:int ->
|
?http_concurrency_level:int ->
|
||||||
?retry_max_attempts:int ->
|
?retry_max_attempts:int ->
|
||||||
?retry_initial_delay_ms:float ->
|
?retry_initial_delay_ms:float ->
|
||||||
|
|
@ -245,9 +249,9 @@ module Env () : ENV = struct
|
||||||
?(protocol = get_protocol_from_env "OTEL_EXPORTER_OTLP_PROTOCOL")
|
?(protocol = get_protocol_from_env "OTEL_EXPORTER_OTLP_PROTOCOL")
|
||||||
?(timeout_ms = get_timeout_from_env "OTEL_EXPORTER_OTLP_TIMEOUT" 10_000)
|
?(timeout_ms = get_timeout_from_env "OTEL_EXPORTER_OTLP_TIMEOUT" 10_000)
|
||||||
?timeout_traces_ms ?timeout_metrics_ms ?timeout_logs_ms
|
?timeout_traces_ms ?timeout_metrics_ms ?timeout_logs_ms
|
||||||
?(self_trace = false) ?http_concurrency_level ?(retry_max_attempts = 3)
|
?(self_trace = false) ?(self_metrics = false) ?http_concurrency_level
|
||||||
?(retry_initial_delay_ms = 100.) ?(retry_max_delay_ms = 5000.)
|
?(retry_max_attempts = 3) ?(retry_initial_delay_ms = 100.)
|
||||||
?(retry_backoff_multiplier = 2.0) =
|
?(retry_max_delay_ms = 5000.) ?(retry_backoff_multiplier = 2.0) =
|
||||||
let batch_timeout_ = Mtime.Span.(batch_timeout_ms * ms) in
|
let batch_timeout_ = Mtime.Span.(batch_timeout_ms * ms) in
|
||||||
let traces =
|
let traces =
|
||||||
match traces with
|
match traces with
|
||||||
|
|
@ -375,6 +379,7 @@ module Env () : ENV = struct
|
||||||
metrics;
|
metrics;
|
||||||
logs;
|
logs;
|
||||||
self_trace;
|
self_trace;
|
||||||
|
self_metrics;
|
||||||
http_concurrency_level;
|
http_concurrency_level;
|
||||||
retry_max_attempts;
|
retry_max_attempts;
|
||||||
retry_initial_delay_ms;
|
retry_initial_delay_ms;
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,10 @@ type t = {
|
||||||
(** If true, the OTEL library will perform some self-instrumentation.
|
(** If true, the OTEL library will perform some self-instrumentation.
|
||||||
Default [false].
|
Default [false].
|
||||||
@since 0.7 *)
|
@since 0.7 *)
|
||||||
|
self_metrics: bool;
|
||||||
|
(** If true, the OTEL library will regularly emit metrics about itself.
|
||||||
|
Default [false].
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
http_concurrency_level: int option;
|
http_concurrency_level: int option;
|
||||||
(** How many HTTP requests can be done simultaneously (at most)? This can
|
(** How many HTTP requests can be done simultaneously (at most)? This can
|
||||||
be used to represent the size of a pool of workers where each worker
|
be used to represent the size of a pool of workers where each worker
|
||||||
|
|
@ -123,6 +127,7 @@ type 'k make =
|
||||||
?timeout_metrics_ms:int ->
|
?timeout_metrics_ms:int ->
|
||||||
?timeout_logs_ms:int ->
|
?timeout_logs_ms:int ->
|
||||||
?self_trace:bool ->
|
?self_trace:bool ->
|
||||||
|
?self_metrics:bool ->
|
||||||
?http_concurrency_level:int ->
|
?http_concurrency_level:int ->
|
||||||
?retry_max_attempts:int ->
|
?retry_max_attempts:int ->
|
||||||
?retry_initial_delay_ms:float ->
|
?retry_initial_delay_ms:float ->
|
||||||
|
|
|
||||||
|
|
@ -90,9 +90,35 @@ let set ?(traces = Provider_config.default) ?(metrics = Provider_config.default)
|
||||||
Log_provider.set logger
|
Log_provider.set logger
|
||||||
|
|
||||||
let self_metrics () : Metrics.t list =
|
let self_metrics () : Metrics.t list =
|
||||||
|
let now = Clock.now_main () in
|
||||||
|
let emitter_metrics =
|
||||||
|
Emitter.self_metrics (Trace_provider.get ()).emit ~now
|
||||||
|
@ Emitter.self_metrics (Meter_provider.get ()).emit ~now
|
||||||
|
@ Emitter.self_metrics (Log_provider.get ()).emit ~now
|
||||||
|
in
|
||||||
match get () with
|
match get () with
|
||||||
| None -> []
|
| None -> emitter_metrics
|
||||||
| Some exp -> exp.Exporter.self_metrics ()
|
| Some exp -> exp.Exporter.self_metrics () @ emitter_metrics
|
||||||
|
|
||||||
|
open struct
|
||||||
|
let self_metrics_enabled = Atomic.make false
|
||||||
|
end
|
||||||
|
|
||||||
|
(** Regularly emit metrics about the OTEL SDK. Idempotent. *)
|
||||||
|
let setup_self_metrics () =
|
||||||
|
if not (Atomic.exchange self_metrics_enabled true) then (
|
||||||
|
Self_debug.log Info (fun () -> "enabling self metrics");
|
||||||
|
let interval_limiter =
|
||||||
|
Interval_limiter.create ~min_interval:Mtime.Span.(10 * s) ()
|
||||||
|
in
|
||||||
|
let on_tick () =
|
||||||
|
if Interval_limiter.make_attempt interval_limiter then (
|
||||||
|
let ms = self_metrics () in
|
||||||
|
Meter_provider.emit_l ms
|
||||||
|
)
|
||||||
|
in
|
||||||
|
Globals.add_on_tick_callback on_tick
|
||||||
|
)
|
||||||
|
|
||||||
(* Permanent tick callback to drive batch timeouts on provider emitters *)
|
(* Permanent tick callback to drive batch timeouts on provider emitters *)
|
||||||
let () =
|
let () =
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ let test_config_printing () =
|
||||||
in
|
in
|
||||||
let expected =
|
let expected =
|
||||||
"{ debug=false; log_level=info; sdk_disabled=false; self_trace=false;\n\
|
"{ debug=false; log_level=info; sdk_disabled=false; self_trace=false;\n\
|
||||||
\ url_traces=\"http://localhost:4318/v1/traces\";\n\
|
\ self_metrics=false; url_traces=\"http://localhost:4318/v1/traces\";\n\
|
||||||
\ url_metrics=\"http://localhost:4318/v1/metrics\";\n\
|
\ url_metrics=\"http://localhost:4318/v1/metrics\";\n\
|
||||||
\ url_logs=\"http://localhost:4318/v1/logs\"; headers=[]; headers_traces=[];\n\
|
\ url_logs=\"http://localhost:4318/v1/logs\"; headers=[]; headers_traces=[];\n\
|
||||||
\ headers_metrics=[]; headers_logs=[]; protocol=http/protobuf;\n\
|
\ headers_metrics=[]; headers_logs=[]; protocol=http/protobuf;\n\
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue