This program shims the Nix logger with a Nix plugin to extract precise timing for builds from Nix. It has only been tested against Honeycomb with OTLP/gRPC.
To install nix-otel, it needs to be passed to Nix in the option plugin-files
.
Currently nix-otel can only run on
the Nix client, so my recommendation is to just use the flake from this
repository and --option plugin-files
, for now. In the future, it will be able
to run on the daemon so it will be easier to install system wide.
You need to ensure that the version of Nix that nix-otel
is loaded in is
exactly the same as the one it's built against. We found a strange macOS-only
bug where nix-otel
built against a
different copy of Nix 2.11.0 than it was run against would not get any data.
In practice, this means running with the nix
binary provided by the nix develop
shell from this project rather than the system Nix.
Set env vars like so in .envrc.local
:
export OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io
export OTEL_EXPORTER_OTLP_HEADERS=x-honeycomb-team=YOUR_APIKEY
Then set the Nix configuration option plugin-files
to include the plugin .so
or .dylib file.
No idea. Sorry. They probably work but might need some minor patches since rust-opentelemetry-otlp doesn't support all environment variables yet.
I use nix-direnv and direnv to make this project work across C++ and Rust.
To make rust-analyzer work for you and pick up the right compiler and so on,
you will need to create a wrapper script direnv-ra
somewhere in your $PATH,
like so:
#!/bin/sh
direnv exec . rust-analyzer "$@"
then set the "rust-analyzer.server.path" variable in your editor settings to point to it.
This is unnecessarily silly because C++ is bad. Anyway, you can get clangd working on this project by doing the following:
[nix-shell]$ cargo clean -p nix-otel-plugin
[nix-shell]$ bear -- cargo build
which will create a compile_commands.json
with the appropriate contents.
Run in development like so:
nix-otel/plugin » cargo b && nix --option plugin-files ../target/debug/libnix_otel_plugin.so build ..#
Everyone is expected to follow the code of conduct while participating in this project.