Liking cljdoc? Tell your friends :D

Taoensso open source
Documentation | Latest releases | Get support

Telemere

Structured telemetry library for Clojure/Script

This library is still under development!!

Telemere is an upcoming next-generation observability toolkit for capturing all kinds of un/structured information in your running Clojure and ClojureScript programs.

It offers a simple, clean, unified API that covers: logging, events, performance measurement, tracing, etc.

Taking full advantage of Clojure's unique macro and interop capabilities, Telemere represents the refinement and culmination of ideas brewing for 10+ years in Timbre, Tufte, Truss, etc.

Latest release/s

Main tests Graal tests

See here for earlier releases.

Why Telemere?

  • Simple, lightweight API that's easy to use, easy to configure, and deeply flexible.
  • An unmatched logging experience designed to scale comfortably from the smallest disposable code, to the most massive production applications.
  • Easy integration with the tooling of your choice, including first-class out-the-box interop with OpenTelemetry, SLF4J v2, clojure.tools.logging, and Tufte.
  • Hyper-optimized and blazing fast, see performance.
  • Expressive per-call and per-handler filtering at both runtime and compile-time.
  • Easily filter by namespace and id pattern, level, level by namespace pattern, etc.
  • Support for auto sampling, rate-limiting, and back-pressure monitoring.
  • Support for fully configurable a/sync dispatch (blocking, dropping, sliding, etc.).
  • Sensible defaults to make getting started fast and easy.
  • Extensive beginner-oriented documentation, docstrings, examples, etc.

Video demo

See for intro and usage: (TODO: coming later)

Telemere demo video

Quick example

;; TODO: coming later

Observability tips

See here for general advice re: building and maintaining highly observable Clojure/Script systems.

Performance

Telemere is highly optimized and offers terrific performance at any scale:

Compile-time filtering?Runtime filtering?Time?Trace?nsecs
✓ (elide)---0
---220
--300
-730

Measurements:

  • Are ~nanoseconds per signal call (= milliseconds per 1e6 calls)
  • Taken on a 2020 Macbook Pro M1, running OpenJDK 21
  • Exclude handler runtime (which depends on handler/s, is usually async)

Tip: Telemere offers extensive per-call and per-handler filtering, sampling, and rate-limiting. Use these to ensure that you're not capturing useless/low-value information in production. See here for more tips!

Documentation

  • Wiki (getting started, usage, etc.) (TODO: coming later)
  • API reference: Codox, clj-doc

Funding

You can help support continued work on this project, thank you!! 🙏

License

Copyright © 2023-2024 Peter Taoussanis.
Licensed under EPL 1.0 (same as Clojure).

Can you improve this documentation?Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close