Instrumentation for https://opentelemetry.io
Find a file
Simon Cruanes bd8b483e81
feat: use AList for tick callbacks; emit GC events on tick
it's cleaner to emit GC events on ticks rather than on GC,
because it avoids both spamming if the GC is very active, and
emitting nothing when there are few allocations.
2023-12-20 15:46:39 -05:00
.github CI: only on push to main 2023-12-14 20:49:12 -05:00
src feat: use AList for tick callbacks; emit GC events on tick 2023-12-20 15:46:39 -05:00
tests bench: add counter 2023-12-14 20:49:11 -05:00
vendor chore: migrate to OTEL proto files 1.0 2023-09-06 23:27:31 -04:00
.gitignore doc, etc. 2022-03-18 14:17:56 -04:00
.gitmodules detail 2023-03-09 10:47:15 -05:00
.ocamlformat ocamlformat 2023-06-15 22:18:24 -04:00
.ocamlformat-ignore ocamlformat-ignore 2022-08-15 12:30:16 -04:00
CHANGES.md chore: Prepare for v0.6 2023-09-25 16:23:58 +00:00
dune dune fmt 2023-09-20 15:15:58 +00:00
dune-project migrate to ocaml-protoc 3.0 2023-12-14 20:49:11 -05:00
emit1.sh feat: parse W3C traceparent header 2022-03-24 17:22:45 +00:00
Makefile chore: makefile 2023-09-13 14:19:09 -04:00
opentelemetry-client-cohttp-lwt.opam migrate to ocaml-protoc 3.0 2023-12-14 20:49:11 -05:00
opentelemetry-client-ocurl.opam migrate to ocaml-protoc 3.0 2023-12-14 20:49:11 -05:00
opentelemetry-cohttp-lwt.opam migrate to ocaml-protoc 3.0 2023-12-14 20:49:11 -05:00
opentelemetry-lwt.opam migrate to ocaml-protoc 3.0 2023-12-14 20:49:11 -05:00
opentelemetry.opam migrate to ocaml-protoc 3.0 2023-12-14 20:49:11 -05:00
README.md trace-collector: Documentation 2023-08-30 01:50:04 +00:00

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.

  • 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)
  • implicit scope (via ambient-context)

Use

For now, instrument traces/spans, logs, and metrics 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();
  ()

Setup

If you're writing a top-level application, you need to perform some initial configuration.

  1. Set the service_name;
  2. configure our ambient-context dependency with the appropriate storage for your environment — TLS, Lwt, Eio ... (see their docs for more details);
  3. and install a Collector (usually by calling your collector's 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.basic_setup();

  Ambient_context.with_storage_provider (Ambient_context_lwt.storage ()) @@ fun () ->
  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, logs) to some other collector (eg. otelcol or the datadog agent).

Collector opentelemetry-client-cohttp-lwt

This is a Lwt-friendly collector that uses cohttp to send signals to some other collector (e.g. otelcol). It must be run inside a Lwt_main.run scope.

Opentelemetry-trace

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.

License

MIT

Semantic Conventions

Not supported yet.