# `Otel.Metrics.InstrumentsStorage`
[🔗](https://github.com/yangbancode/otel/blob/main/lib/otel/metrics/instruments_storage.ex#L1)

ETS owner for the named ETS table — one row per
registered Instrument keyed by `downcased_name` (spec
`metrics/api.md` §Instrument identity L190-L191).
`InstrumentationScope` is hardcoded SDK-wide (project
memory `project_minikube_hardcode_decisions` § Follow-on
#457), so it is omitted from the key.

A GenServer that owns the table so its lifetime matches the
SDK supervisor and dies with it. The table is `public` with
`read_concurrency` / `write_concurrency` so any process
reads/writes without going through this server — the GenServer
is not on the hot path. Same pattern as `Otel.Trace.SpanStorage`.

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `start_link`

```elixir
@spec start_link(opts :: keyword()) :: GenServer.on_start()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
