Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Opentelemetry
This project provides an API for instrumenting server software using opentelemetry, as well as connectors to talk to opentelemetry software such as jaeger.
library opentelemetry should be used to instrument your code and possibly libraries. It doesn't communicate with anything except a backend (default: dummy backend)
library opentelemetry-client-ocurl is a backend that communicates via http+protobuf with some collector (otelcol, datadog-agent, etc.)
License
MIT
Features
basic traces
basic metrics
basic logs
nice API
interface with lwt
sync collector relying on ocurl
batching, perf, etc.
async collector relying on ocurl-multi
interface with logs (carry context around)
Use
For now, instrument manually:
module Otel = Opentelemetry
let (let@) f x = f x
let foo () =
let@ scope = Otel.Trace.with_ "foo"
~attrs:["hello", `String "world"] in
do_work();
Otel.Metrics.(
emit [
gauge ~name:"foo.x" [int 42];
]);
do_more_work();
()
let main () =
Otel.Globals.service_name := "my_service";
Otel.GC_metrics.basic_setup();
Opentelemetry_client_ocurl.with_setup () @@ fun () ->
(* … *)
foo ();
(* … *)
Configuration
The library is configurable via Opentelemetry.Config, via the standard opentelemetry env variables, or with some custom environment variables.
OTEL_EXPORTER_OTLP_ENDPOINT sets the http endpoint to send signals to
OTEL_OCAML_DEBUG=1 to print some debug messages from the opentelemetry library ide
OTEL_RESOURCE_ATTRIBUTES sets a comma separated list of custom resource attributes
Collector opentelemetry-client-ocurl
This is a synchronous collector that uses the http+protobuf format to send signals (metrics, traces) to some other collector (eg. otelcol or the datadog agent).