mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-08 03:47:59 -04:00
- clock is needed because timestamps need to be provided now - explicit types are good anyway - have at least one helper to emit the signal with optional tracer/logger/metrics_emitter - easier logger with `log` and `logf`
107 lines
3.4 KiB
OCaml
107 lines
3.4 KiB
OCaml
module T = Opentelemetry_lwt
|
|
(*****************************************************************************)
|
|
(* Prelude *)
|
|
(*****************************************************************************)
|
|
|
|
let string_tag = Logs.Tag.def "string_attr" Format.pp_print_string
|
|
|
|
let int_tag = Logs.Tag.def "int_attr" Format.pp_print_int
|
|
|
|
let float_tag = Logs.Tag.def "float_attr" Format.pp_print_float
|
|
|
|
let bool_tag = Logs.Tag.def "bool_attr" Format.pp_print_bool
|
|
|
|
let string_list_tag =
|
|
Logs.Tag.def "string_list_attr" (Format.pp_print_list Format.pp_print_string)
|
|
|
|
let varied_tag_set =
|
|
Logs.Tag.(
|
|
empty
|
|
|> add string_tag "string_value"
|
|
|> add int_tag 42 |> add float_tag 3.14 |> add bool_tag true
|
|
|> add string_list_tag [ "foo"; "bar"; "baz" ])
|
|
|
|
let run () =
|
|
Opentelemetry.Globals.service_name := "emit_logs";
|
|
let otel_reporter =
|
|
Opentelemetry_logs.otel_reporter
|
|
~attributes:[ "my_reporter_attr", `String "foo" ]
|
|
()
|
|
in
|
|
Logs.set_reporter otel_reporter;
|
|
Logs.set_level (Some Logs.Debug);
|
|
Logs.debug (fun m -> m "emit_logs: starting");
|
|
Logs.info (fun m -> m "emit_logs: info log");
|
|
Logs.warn (fun m -> m "emit_logs: warn log");
|
|
Logs.err (fun m -> m "emit_logs: error log");
|
|
Logs.app (fun m -> m "emit_logs: app log");
|
|
let%lwt () =
|
|
let tracer = T.Tracer.get_main () in
|
|
T.Tracer.with_ ~tracer ~kind:T.Span.Span_kind_producer "my_scope"
|
|
(fun _scope ->
|
|
Logs.info (fun m ->
|
|
m ~tags:varied_tag_set
|
|
"emit_logs: this log is emitted with varied tags from a span");
|
|
Lwt.return_unit)
|
|
in
|
|
let no_emit_tag = Opentelemetry_logs.emit_telemetry false in
|
|
Logs.info (fun m ->
|
|
m ~tags:no_emit_tag "emit_logs: this log will not be emitted");
|
|
Logs.info (fun m ->
|
|
m ~tags:varied_tag_set
|
|
"emit_logs: this log will be emitted with varied tags");
|
|
|
|
let fmt_logger = Logs_fmt.reporter ~dst:Format.err_formatter () in
|
|
let combined_logger =
|
|
Opentelemetry_logs.attach_otel_reporter
|
|
(* FIXME ~service_name:"emit_logs_fmt" *)
|
|
~attributes:[ "my_fmt_attr", `String "bar" ]
|
|
fmt_logger
|
|
in
|
|
Logs.set_reporter combined_logger;
|
|
Logs.info (fun m ->
|
|
m "emit_logs: this log will be emitted from otel and fmt reporter");
|
|
Logs.set_level None;
|
|
(* disable logging *)
|
|
Logs.debug (fun m ->
|
|
m "emit_logs: this log will not be emitted, logging disabled");
|
|
Lwt.return_unit
|
|
|
|
let () =
|
|
Sys.catch_break true;
|
|
T.Globals.service_name := "t1";
|
|
T.Globals.service_namespace := Some "ocaml-otel.test";
|
|
|
|
let debug = ref false in
|
|
let batch_traces = ref 400 in
|
|
let batch_metrics = ref 3 in
|
|
let batch_logs = ref 400 in
|
|
let url = ref None in
|
|
let opts =
|
|
[
|
|
"--debug", Arg.Bool (( := ) debug), " enable debug output";
|
|
( "--url",
|
|
Arg.String (fun s -> url := Some s),
|
|
" set the url for the OTel collector" );
|
|
]
|
|
|> Arg.align
|
|
in
|
|
|
|
Arg.parse opts (fun _ -> ()) "emit1 [opt]*";
|
|
|
|
let some_if_nzero r =
|
|
if !r > 0 then
|
|
Some !r
|
|
else
|
|
None
|
|
in
|
|
let config =
|
|
Opentelemetry_client_cohttp_lwt.Config.make ~debug:!debug ?url:!url
|
|
~batch_traces:(some_if_nzero batch_traces)
|
|
~batch_metrics:(some_if_nzero batch_metrics)
|
|
~batch_logs:(some_if_nzero batch_logs) ()
|
|
in
|
|
Format.printf "@[@ config: %a@]@." Opentelemetry_client_cohttp_lwt.Config.pp
|
|
config;
|
|
|
|
Opentelemetry_client_cohttp_lwt.with_setup ~config () run |> Lwt_main.run
|