# OpentelemetryFinch
OpentelemetryFinch uses [telemetry](https://hexdocs.pm/telemetry/) handlers to
create `OpenTelemetry` spans from Finch events.
## Installation
The package can be installed by adding `opentelemetry_finch` to your list of
dependencies in `mix.exs`:
```elixir
def deps do
[
{:opentelemetry_finch, "~> 0.1"}
]
end
```
In your application start:
```elixir
def start(_type, _args) do
OpentelemetryFinch.setup()
# ...
end
```
*Since this instrumentation is based on telemetry, it is not possible to automatically propagate the context in the http headers. If you need to perform context propagation, you should opt for manual instrumentation. Something like this:*
```elixir
require OpenTelemetry.Tracer, as: Tracer
Tracer.with_span "HTTP #{url}" do
headers = :otel_propagator_text_map.inject([])
with request <- Finch.build(:get, url, headers),
{:ok, response} <- Finch.request(request, HttpFinch) do
Tracer.set_attributes([
{"http.url", url},
{"http.method", request.method},
{"http.status_code", response.status}])
{:ok, response}
else
{:error, %{__exception__: true} = error} ->
Tracer.set_status(:error, Exception.message(error))
{:error, error}
end
end
```
## Compatibility Matrix
| OpentelemetryFinch Version | Otel Version | Notes |
| :------------------------- | :----------- | :---- |
| | | |
| v0.1.0 | v1.0.0 | |
Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/opentelemetry_finch](https://hexdocs.pm/opentelemetry_finch).