Expert guidance for configuring and deploying the OpenTelemetry Collector. Use when setting up a Collector pipeline, configuring receivers, exporters, or processors, deploying a Collector to Kubernetes or Docker, or forwarding telemetry to Dash0. Triggers on requests involving collector, pipeline, OTLP receiver, exporter, or Dash0 collector setup.
95
92%
Does it follow best practices?
Impact
96%
1.39xAverage score across 12 eval scenarios
Low
Low-risk findings worth noting
Never write an instrumentation package name or version from memory. Knowledge of package ecosystems goes stale in both directions: versions get invented that were never published, and packages that once existed get retired with no further releases. A retired package still installs from the registry at its last release, so a successful install alone does not prove the instrumentation is current.
Before adding any instrumentation dependency to a manifest, verify all four against the package registry:
npm install <pkg>, go get <module>@latest, pip install <pkg>, bundle add <gem>, composer require <pkg>, dotnet add package <id>).
It resolves the latest published version from the registry and fails loudly when the package does not exist.go directive in go.mod, engines in package.json) and its build and runtime environments (base images in Dockerfiles, CI toolchains).
When the newest release requires a newer toolchain than the project has, pin the newest release that satisfies the project's toolchain instead — or upgrade the toolchain deliberately, as its own visible change (manifest directive, base images, CI), never as a side effect of a dependency bump.npm error notarget, go: no matching versions, go: module ... requires go >= ...), or worse, resolves to an incompatible release.{
"dependencies": {
"@opentelemetry/instrumentation-undici": "^0.57.0"
}
}The version above was written from memory; no 0.57.x release of that package was ever published, and npm install fails with npm error code ETARGET.
A dependency manifest and its lockfile move together: go.mod with go.sum, package.json with package-lock.json, Gemfile with Gemfile.lock, and composer.json with composer.lock.
The lockfile records resolver output and content hashes that only the package manager can compute, so a lockfile entry cannot be hand-written.
Editing the manifest without regenerating the lockfile breaks the next build: strict installs refuse the mismatch by design (npm ci, frozen Bundler installs, Composer installing from a lockfile that no longer satisfies composer.json), and Go refuses to compile (missing go.sum entry for module providing package ...).
Regenerate the lockfile with the ecosystem's lock-refreshing command (go mod tidy, npm install, bundle lock, composer update <pkg>) in the same change as every manifest edit, and ship both files together.
When the edit happens somewhere the toolchain cannot run — the change is applied through a web interface or a review suggestion, made by a CI bot or dependency tooling, or the project only builds inside a container — regenerate the lockfile where the toolchain does run.
For container builds, that place is the builder stage itself: make it self-sufficient by regenerating the lockfile before the build or install step, using the command from the language's "Verifying dependencies" section (indexed below).
Removing an instrumentation dependency makes the telemetry it produced disappear, and dashboards and alerts may be built on that telemetry. When an existing instrumentation dependency cannot survive a change — it is retired and blocks an upgrade, or its pins conflict with the rest of the dependency set — do not drop it silently.
Ask the user for confirmation before removing it, naming:
When you have no way to ask — running non-interactively or in a pipeline — proceed only if the task cannot complete otherwise, and report the removal and its telemetry impact prominently in your summary.
Each SDK rule carries a "Verifying dependencies" section with the concrete lookup commands for its ecosystem:
opentelemetry-bootstrapbrowser does not have dedicated guidance, as all the instrumentation is integrated in the Dash0 Web SDK.