Neste artigo, gostaria de apresentar o novo recurso do OpenTelemetry Operator que simplifica significativamente as cargas de trabalho de instrumentação implantadas no Kubernetes.
A instrumentação é o processo mais tedioso ao implantar uma solução de observabilidade. Existem várias abordagens de como instrumentar e aplicar:
A instrumentação automática esteve por muito tempo disponível apenas como uma tecnologia proprietária oferecida por vários fornecedores de APM/Observabilidade.
A OpenTelemetry mudou esse paradigma e disponibilizou essa tecnologia em código aberto. Os usuários obtêm instrumentação neutra de fornecedor para evitar o bloqueio do fornecedor para a parte mais crucial da integração de observabilidade.
No entanto, implantar auto instrumentação em escala ou validar prova de valor ainda pode ser um problema bem árduo.
Os aplicativos modernos são empacotados em imagens imutáveis, portanto, adicionar instrumentação a imagens já construídas requer a reconstrução do container.
Reconstruir um grande número de imagens de aplicativos requer um grande investimento. Vamos dar uma olhada em como esse problema pode ser resolvido no Kubernetes.
O OpenTelemetry Operator introduziu o recurso customizado de Instrumentação que define a configuração para OpenTelemetry SDK e instrumentação. A instrumentação é habilitada quando um CR de instrumentação está presente no cluster e um namespace ou o workload recebe uma annotation:
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: my-instrumentation
spec:
exporter:
endpoint: <http://otel-collector:4317>
propagators:
- tracecontext
- baggage
- b3
sampler:
type: parentbased_traceidratio
argument: "0.25"
java:
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest
nodejs:
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:latest
python:
image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:latest
EOF
No momento, a instrumentação é compatível com as linguagens Java, NodeJS e Python. A instrumentação é habilitada quando a seguinte annotation é aplicada a um workload ou uma namespace.
instrumentation.opentelemetry.io/inject-java**: "true"
— Javainstrumentation.opentelemetry.io/inject-nodejs**: "true"
— NodeJSinstrumentation.opentelemetry.io/inject-python**: "true"
— Python