Construye un Collector personalizado con el OpenTelemetry Collector Builder
Describe los componentes que necesitas en un manifiesto, construye un binario o imagen pequeños y sabe cuándo vale la pena.
Las imágenes prediseñadas del Collector son prácticas pero amplias. La distribución contrib contiene cientos de componentes, la mayoría de los cuales nunca usarás, y la distribución core tiene muy pocos. Si quieres un binario más pequeño, una superficie de ataque reducida o un componente privado propio, puedes construir exactamente el Collector que necesitas con el OpenTelemetry Collector Builder (ocb). La entrada es un único manifiesto YAML, así que todo el proceso sigue siendo dirigido por configuración.
Cuándo construir el tuyo
- Quieres solo los componentes que usas, para una imagen más pequeña y menos dependencias que parchear.
- La política de seguridad te exige construir desde el código fuente y controlar la cadena de suministro.
- Necesitas un componente que no está en ninguna distribución oficial, como uno escrito internamente.
Si ninguno de estos casos aplica, usa las distribuciones oficiales. Construir el tuyo significa que asumes la tarea de reconstruir cuando los componentes reciben correcciones de seguridad.
Instala el builder
ocb es un programa de Go que se publica con cada versión del Collector. Descarga el binario para tu plataforma desde la página de releases de GitHub del Collector, o instálalo con Go:
go install go.opentelemetry.io/collector/cmd/builder@v0.163.0
Usa la misma versión para el builder y para los componentes. (La versión mostrada es un ejemplo; usa una release actual.) La toolchain de Go debe estar instalada para ejecutar una build. Consulta la guía de instalación en la documentación de OpenTelemetry para el nombre exacto del binario y los enlaces de descarga, porque difieren según la release.
Escribe el manifiesto
# builder-config.yaml
dist:
name: otelcol-custom
description: Custom OpenTelemetry Collector
output_path: ./otelcol-custom
# Opcional: la versión del Collector core contra la que construir
# otelcol_version: 0.163.0
receivers:
- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.163.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.163.0
processors:
- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.163.0
- gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.163.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.163.0
exporters:
- gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.163.0
- gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.163.0
- gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.163.0
extensions:
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.163.0
providers:
- gomod: go.opentelemetry.io/collector/confmap/provider/envprovider v1.0.0
- gomod: go.opentelemetry.io/collector/confmap/provider/fileprovider v1.0.0
Puntos clave:
- Cada entrada nombra un módulo de Go y una versión (
gomod). Los componentes contrib viven bajogithub.com/open-telemetry/opentelemetry-collector-contrib/..., y los core bajogo.opentelemetry.io/collector/.... - Las versiones de los componentes deben ser compatibles. Los componentes core, los componentes contrib y el builder se publican juntos; mantén todos en la misma release. Mezclar versiones causa errores de compilación.
- Los providers deciden qué fuentes de configuración están disponibles. Si quieres que funcionen
${env:VAR}y${file:/path}, incluyeenvprovideryfileprovider. Un binario sin ellos no puede resolver esas referencias. Los módulos de providers usan sus propios números de versión (a menudov1.x), así que búscalos para la release contra la que construyas. - Las rutas y nombres de los módulos de los componentes pueden cambiar, así que cópialos del README de cada componente o del manifiesto de la propia distribución contrib en lugar de hacerlo de memoria.
Puedes usar replaces: para sustituir un módulo por un fork local, y las entradas gomod pueden apuntar a tus repositorios privados.
Construye
ocb --config builder-config.yaml
# o, si se instaló con go install:
builder --config builder-config.yaml
El directorio de salida contiene el código fuente de Go generado y un binario compilado, ./otelcol-custom/otelcol-custom. Ejecútalo con un archivo de configuración normal y comprueba qué está incluido:
./otelcol-custom/otelcol-custom components # lista lo que se compiló
./otelcol-custom/otelcol-custom validate --config=config.yaml
./otelcol-custom/otelcol-custom --config=config.yaml
Si tu configuración referencia un componente que no se incluyó en la build, el Collector falla al arrancar y lo nombra. Añádelo al manifiesto y reconstruye.
Empaquétalo como imagen de contenedor
Un Dockerfile multietapa construye en una imagen de Go y copia el resultado en una base mínima:
FROM golang:1.24 AS build
WORKDIR /src
RUN go install go.opentelemetry.io/collector/cmd/builder@v0.163.0
COPY builder-config.yaml .
RUN CGO_ENABLED=0 builder --config builder-config.yaml
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /src/otelcol-custom/otelcol-custom /otelcol-custom
USER nonroot
ENTRYPOINT ["/otelcol-custom"]
CMD ["--config=/etc/otelcol/config.yaml"]
Usa una versión de Go que coincida con el requisito de la release del Collector (consulta las notas de la versión), y considera fijar las imágenes por digest. Construye y publica la imagen en CI, y despliégala igual que cualquier imagen oficial: mediante el chart de Helm (image.repository e image.tag) o el Operator (spec.image).
Ten en cuenta que los presets del chart de Helm asumen que ciertos componentes existen. Con una imagen personalizada, configura tú mismo los receivers y processors o confirma que se incluyó cada uno que necesita el preset.
Mantenlo mantenible
- Mantén
builder-config.yamlen Git y construye en CI, no en portátiles. - Reconstruye cuando llegue una nueva release del Collector o un aviso de seguridad afecte a un componente que uses. Renovate o Dependabot pueden vigilar las cadenas de versión.
- Ejecuta
componentsy una prueba de humo con una configuración representativa en CI, para que un componente ausente se detecte antes del despliegue. - Parte del manifiesto contrib y elimina lo que no uses, en lugar de construir desde cero.
Guías populares
-
OpenTelemetry explicado: SDK, OTLP y el Collector Entiende las piezas móviles y los tres lugares donde vive la configuración antes de escribir nada de YAML. -
El modelo de configuración del Collector: componentes, pipelines y providers Aprende las reglas del YAML del Collector: nombres, pipelines, connectors, fusión de archivos y variables de entorno. -
Configura los SDK con variables de entorno OTEL_* Define el nombre del servicio, los exporters, el muestreo y los límites para cualquier lenguaje usando variables estándar. -
Instrumenta aplicaciones sin cambios de código: Java, Python y Node.js Adjunta agentes de OpenTelemetry solo con variables de entorno y flags de línea de comandos. -
Prepara el Collector para producción: límites de memoria, batching y reintentos Configura processors, colas y almacenamiento persistente para que la telemetría sobreviva a sobrecargas e interrupciones. -
Despliega el Collector en Kubernetes con Helm Instala el chart oficial, usa presets para logs y métricas y sobrescribe la configuración mediante archivos de valores. -
Soluciona problemas del Collector y los SDK Una lista de comprobación sistemática para cuando la telemetría no llega: exporter debug, health checks, métricas internas y errores comunes.