ocaml-opentelemetry/README.md
2022-04-19 13:28:56 -04:00

2.1 KiB

Opentelemetry build

This project provides an API for instrumenting server software using opentelemetry, as well as connectors to talk to opentelemetry software such as jaeger.

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 T = Opentelemetry
let (let@) f x = f x

let foo x =
  let@ (tr,sp) = T.Trace.with_ 
      ~service_name:"myservice" "foo" ~attrs:["hello", `String "world"] in
  (* … *)

  let gc = Gc.stat() in
  T.Metrics.(
    emit [
      gauge ~name:"foo.gc.major_heap_words" [int gc.Gc.heap_words];
      sum ~name:"foo.gc.minor_allocated" [float gc.Gc.minor_words];
    ]);

  (* … *)

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).

License

MIT

Semantic Conventions

Not supported yet.