Page
Library
Module
Module type
Parameter
Class
Class type
Source
This project provides an API for instrumenting server software using opentelemetry, as well as connectors to talk to opentelemetry software such as jaeger.
opentelemetry should be used to instrument your code and possibly libraries. It doesn't communicate with anything except an exporter (default: no-op);opentelemetry-client-ocurl is an exporter that communicates via http+protobuf with some collector (otelcol, datadog-agent, etc.) using cURL bindings;opentelemetry-client-cohttp-lwt is an exporter that communicates via http+protobuf with some collector using cohttp.MIT
lwtsync collector relying on ocurl
logs (carry context around)ambient-context, see opentelemetry.ambient-context)For now, instrument traces/spans, logs, and metrics manually:
module Otel = Opentelemetry
let (let@) = (@@)
let foo () =
let@ span = Otel.Tracer.with_ "foo"
~attrs:["hello", `String "world"] in
do_work ();
let now = Otel.Clock.now Otel.Meter.default.clock in
Otel.Meter.emit1 Otel.Meter.default
Otel.Metrics.(gauge ~name:"foo.x" [int ~now 42]);
Otel.Span.add_event span (Otel.Event.make "work done");
do_more_work ();
()If you're writing a top-level application, you need to perform some initial configuration.
service_name;with_setup function.)For example, if your application is using Lwt, and you're using ocurl as your collector, you might do something like this:
let main () =
Otel.Globals.service_name := "my_service";
Otel.Gc_metrics.setup ();
Opentelemetry_ambient_context.set_storage_provider (Opentelemetry_ambient_context_lwt.storage ());
Opentelemetry_client_ocurl.with_setup () @@ fun () ->
(* … *)
foo ();
(* … *)[ambient-context]: now vendored as opentelemetry.ambient-context, formerly https://v3.ocaml.org/p/ambient-context
see doc/migration_guide_v0.90.md
The library supports standard OpenTelemetry environment variables:
General:
OTEL_SDK_DISABLED - disable the SDK (default: false)OTEL_SERVICE_NAME - service nameOTEL_RESOURCE_ATTRIBUTES - comma-separated key=value resource attributesOTEL_OCAML_DEBUG=1 - print debug messages from the opentelemetry libraryExporter endpoints:
OTEL_EXPORTER_OTLP_ENDPOINT - base endpoint (default: http://localhost:4318)OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - traces endpointOTEL_EXPORTER_OTLP_METRICS_ENDPOINT - metrics endpointOTEL_EXPORTER_OTLP_LOGS_ENDPOINT - logs endpointExporter configuration:
OTEL_EXPORTER_OTLP_PROTOCOL - protocol: http/protobuf or http/json (default: http/protobuf)Headers:
OTEL_EXPORTER_OTLP_HEADERS - headers as comma-separated key=value pairsOTEL_EXPORTER_OTLP_TRACES_HEADERS - traces-specific headersOTEL_EXPORTER_OTLP_METRICS_HEADERS - metrics-specific headersOTEL_EXPORTER_OTLP_LOGS_HEADERS - logs-specific headersThis is a synchronous exporter that uses the http+protobuf format to send signals (metrics, traces, logs) to some collector (eg. otelcol or the datadog agent).
Do note that it uses a thread pool and is incompatible with uses of fork on some Unixy systems. See #68 for a possible workaround.
This is a Lwt-friendly exporter that uses cohttp to send signals to some collector (e.g. otelcol). It must be run inside a Lwt_main.run scope.
The optional library opentelemetry.trace, present if trace is installed, provides a collector for trace. This collector forwards and translates events from trace into opentelemetry. It's only useful if there also is also a OTEL collector.
MIT
Not supported yet.