Injection d'auto-instrumentation
The content of this page may be outdated and some links may be invalid.
A newer version of this page exists in
English. To see the changes to the English page since this page was last updated: visit
GitHub compare 1253527a..f625496b
and search for More information ...
content/en/docs/platforms/kubernetes/operator/automatic.md.
L’opérateur OpenTelemetry prend en charge l’injection et la configuration d’auto-instrumentation pour les services .NET, Java, Node.js, Python et Go.
Installation
Tout d’abord, installez l’opérateur OpenTelemetry dans votre cluster.
Vous pouvez le faire avec une des versions de l’opérateur, le chart Helm de l’opérateur, ou avec Operator Hub.
Dans la plupart des cas, vous devrez installer cert-manager. Si vous utilisez le chart Helm, il y a une option pour générer un certificat auto-signé à la place.
Si vous souhaitez utiliser l’auto-instrumentation Go, vous devez expressément activer la fonctionnalité. Voir Contrôle des capacités d’instrumentation pour plus de détails.
Créer un collecteur OpenTelemetry (Optionnel)
Il est recommandé d’envoyer la télémétrie des conteneurs vers un collecteur OpenTelemetry au lieu de l’envoyer directement vers un backend. Le collecteur aide à simplifier la gestion des secrets, découple les problèmes d’export de données (tels que la nécessité de réessayer l’envoi de données) de vos applications, et vous permet d’ajouter des données supplémentaires à votre télémétrie, par exemple avec le composant k8sattributesprocessor. Si vous choisissez de ne pas utiliser de collecteur, vous pouvez passer à la section suivante.
L’opérateur fournit une définition de ressource personnalisée (CRD) pour le collecteur OpenTelemetry qui est utilisée pour créer une instance du collecteur que l’opérateur gère. L’exemple suivant déploie le collecteur en tant que déploiement (par défaut), mais il y a d’autres modes de déploiement qui peuvent être utilisés.
Lorsque vous utilisez le mode Deployment, l’opérateur créera également un
service qui peut être utilisé pour interagir avec le collecteur. Le nom du
service est le nom de la ressource OpenTelemetryCollector préfixé par
-collector. Pour notre exemple, ce sera demo-collector.
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: demo
spec:
config:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
memory_limiter:
check_interval: 1s
limit_percentage: 75
spike_limit_percentage: 15
batch:
send_batch_size: 10000
timeout: 10s
exporters:
debug:
verbosity: basic
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [debug]
metrics:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [debug]
logs:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [debug]
EOF
La commande ci-dessus entraîne le déploiement du collecteur que vous pouvez utiliser comme point de terminaison pour l’auto-instrumentation dans vos pods.
Configurer l’auto-instrumentation automatique
Pour pouvoir gérer l’auto-instrumentation, l’opérateur doit être configuré pour savoir quels pods instrumenter et quelle auto-instrumentation utiliser pour ces pods. Cela se fait via la CRD Instrumentation.
Créer correctement la ressource Instrumentation est primordial pour que
l’auto-instrumentation fonctionne. S’assurer que tous les points de terminaison
et les variables d’environnement sont corrects est requis pour que
l’auto-instrumentation fonctionne correctement.
.NET
La commande suivante créera une ressource Instrumentation de base qui est
configurée spécifiquement pour instrumenter les services .NET.
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"
EOF
Par défaut, la ressource Instrumentation qui auto-instrumente les services
.NET utilise otlp avec le protocole http/protobuf. Cela signifie que le
point de terminaison configuré doit être capable de recevoir OTLP sur
http/protobuf. Par conséquent, l’exemple utilise http://demo-collector:4318,
qui se connectera au port http du otlpreceiver du collecteur créé à l’étape
précédente.
Exclure l’auto-instrumentation
Par défaut, l’auto-instrumentation .NET est livrée avec
beaucoup de bibliothèques d’instrumentation.
Cela rend l’instrumentation facile, mais pourrait créer trop de données ou des
données indésirables. S’il y a des bibliothèques que vous ne voulez pas
utiliser, vous pouvez définir
OTEL_DOTNET_AUTO_[SIGNAL]_[NAME]_INSTRUMENTATION_ENABLED=false où [SIGNAL]
est le type du signal et [NAME] est le nom sensible à la casse de la
bibliothèque.
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: '1'
dotnet:
env:
- name: OTEL_DOTNET_AUTO_TRACES_GRPCNETCLIENT_INSTRUMENTATION_ENABLED
value: false
- name: OTEL_DOTNET_AUTO_METRICS_PROCESS_INSTRUMENTATION_ENABLED
value: false
En savoir plus
Pour plus de détails, voir la documentation Instrumentation Zero-code .NET.
Deno
La commande suivante crée une ressource Instrumentation de base qui est
configurée pour instrumenter les services Deno.
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
env:
- name: OTEL_DENO
value: 'true'
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: '1'
EOF
Les processus Deno exportent automatiquement les données de télémétrie vers le
point de terminaison configuré lorsqu’ils sont démarrés avec la variable
d’environnement OTEL_DENO=true. Par conséquent, l’exemple spécifie cette
variable d’environnement dans le champ env de la ressource Instrumentation,
afin qu’elle soit définie pour tous les services qui ont des variables
d’environnement injectées avec cette ressource Instrumentation.
Par défaut, la ressource Instrumentation qui auto-instrumente les services
Deno utilise otlp avec le protocole http/protobuf. Cela signifie que le
point de terminaison configuré doit être capable de recevoir OTLP sur
http/protobuf. Par conséquent, l’exemple utilise http://demo-collector:4318,
qui se connecte au port http/protobuf du otlpreceiver du collecteur créé à
l’étape précédente.
L’intégration OpenTelemetry de Deno n’est pas encore stable. En
conséquence, toutes les charges de travail qui veulent être instrumentées avec
Deno doivent avoir le drapeau --unstable-otel défini lors du démarrage du
processus Deno.
Options de configuration
Par défaut, l’intégration OpenTelemetry de Deno exporte la sortie
console.log() en tant que logs, tout en
imprimant encore les logs vers stdout / stderr. Vous pouvez configurer ces
comportements alternatifs :
OTEL_DENO_CONSOLE=replace: exporter uniquement la sortieconsole.log()en tant que logs ; ne pas imprimer vers stdout / stderr.OTEL_DENO_CONSOLE=ignore: ne pas exporter la sortieconsole.log()en tant que logs ; imprimer vers stdout / stderr.
En savoir plus
Pour plus de détails, voir la documentation d’intégration OpenTelemetry de Deno.
Go
La commande suivante crée une ressource Instrumentation de base qui est
configurée spécifiquement pour instrumenter les services Go.
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"
EOF
Par défaut, la ressource Instrumentation qui auto-instrumente les services Go
utilise otlp avec le protocole http/protobuf. Cela signifie que le point de
terminaison configuré doit être capable de recevoir OTLP sur http/protobuf.
Par conséquent, l’exemple utilise http://demo-collector:4318, qui se connecte
au port http/protobuf du otlpreceiver du collecteur créé à l’étape
précédente.
L’auto-instrumentation Go ne prend pas en charge la désactivation d’une instrumentation. Voir le dépôt Go Auto-Instrumentation pour plus de détails.
Java
La commande suivante crée une ressource Instrumentation de base qui est
configurée pour instrumenter les services Java.
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"
EOF
Par défaut, la ressource Instrumentation qui auto-instrumente les services
Java utilise otlp avec le protocole http/protobuf. Cela signifie que le
point de terminaison configuré doit être capable de recevoir OTLP sur http via
des payloads protobuf. Par conséquent, l’exemple utilise
http://demo-collector:4318, qui se connecte au port http de l’otlpreceiver
du collecteur créé à l’étape précédente.
Exclure l’auto-instrumentation
Par défaut, l’auto-instrumentation Java est livrée avec
beaucoup de bibliothèques d’instrumentation.
Cela rend l’instrumentation facile, mais pourrait créer trop de données ou des
données indésirables. Si il y a des bibliothèques que vous ne voulez pas
utiliser, vous pouvez définir OTEL_INSTRUMENTATION_[NAME]_ENABLED=false où
[NAME] est le nom de la bibliothèque. Si vous savez exactement quelles
bibliothèques vous voulez utiliser, vous pouvez désactiver les bibliothèques par
défaut en définissant OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=false puis
utiliser OTEL_INSTRUMENTATION_[NAME]_ENABLED=true où [NAME] est le nom de la
bibliothèque. Pour plus de détails, voir
Suppression d’instrumentation spécifique.
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: '1'
java:
env:
- name: OTEL_INSTRUMENTATION_KAFKA_ENABLED
value: false
- name: OTEL_INSTRUMENTATION_REDISCALA_ENABLED
value: false
En savoir plus
Pour plus de détails, voir Configuration de l’agent Java.
Node.js
La commande suivante crée une ressource Instrumentation de base qui est
configurée pour instrumenter les services Node.js.
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4317
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"
EOF
Par défaut, la ressource Instrumentation qui auto-instrumente les services
Node.js utilise otlp avec le protocole grpc. Cela signifie que le point de
terminaison configuré doit être capable de recevoir OTLP sur grpc. Par
conséquent, l’exemple utilise http://demo-collector:4317, qui se connecte au
port grpc du otlpreceiver du collecteur créé à l’étape précédente.
Exclure les bibliothèques d’instrumentation
Par défaut, l’instrumentation zero-code Node.js a toutes les bibliothèques d’instrumentation activées.
Pour activer uniquement des bibliothèques d’instrumentation spécifiques, vous
pouvez utiliser la variable d’environnement OTEL_NODE_ENABLED_INSTRUMENTATIONS
comme documenté dans la
documentation Instrumentation Zero-code JavaScript.
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
# ... autres champs omis de cet exemple
spec:
# ... autres champs omis de cet exemple
nodejs:
env:
- name: OTEL_NODE_ENABLED_INSTRUMENTATIONS
value: http,nestjs-core # liste séparée par des virgules des noms de paquets d'instrumentation sans le préfixe `@opentelemetry/instrumentation-`.
Pour garder toutes les bibliothèques par défaut et désactiver uniquement des
bibliothèques d’instrumentation spécifiques, vous pouvez utiliser la variable
d’environnement OTEL_NODE_DISABLED_INSTRUMENTATIONS. Pour plus de détails,
voir
Exclure les bibliothèques d’instrumentation.
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
# ... autres champs omis de cet exemple
spec:
# ... autres champs omis de cet exemple
nodejs:
env:
- name: OTEL_NODE_DISABLED_INSTRUMENTATIONS
value: fs,grpc # liste séparée par des virgules des noms de paquets d'instrumentation sans le préfixe `@opentelemetry/instrumentation-`.
Si les deux variables d’environnement sont définies,
OTEL_NODE_ENABLED_INSTRUMENTATIONS est appliqué en premier, puis
OTEL_NODE_DISABLED_INSTRUMENTATIONS est appliqué à cette liste. Par
conséquent, si la même instrumentation est incluse dans les deux listes, cette
instrumentation sera désactivée.
En savoir plus
Pour plus de détails, voir la documentation sur les librairies d’instrumentation JavaScript.
Python
La commande suivante créera une ressource Instrumentation de base qui est
configurée spécifiquement pour instrumenter les services Python.
kubectl apply -f - <<EOF
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: "1"
EOF
Par défaut, la ressource Instrumentation qui auto-instrumente les services
Python utilise otlp avec le protocole http/protobuf (gRPC n’est pas pris en
charge pour le moment). Cela signifie que le point de terminaison configuré doit
être capable de recevoir OTLP sur http/protobuf. Par conséquent, l’exemple
utilise http://demo-collector:4318, qui se connectera au port http du
otlpreceiver du collecteur créé à l’étape précédente.
Depuis la version v0.108.0 de l’opérateur, la ressource
Instrumentationdéfinit automatiquementOTEL_EXPORTER_OTLP_PROTOCOLàhttp/protobufpour les services Python. Si vous utilisez une version plus ancienne de l’opérateur, vous DEVEZ définir cette variable d’environnement àhttp/protobuf, sinon l’auto-instrumentation Python ne fonctionnera pas.
Auto-instrumenter les logs Python
Par défaut, l’auto-instrumentation des logs Python est désactivée. Si vous
souhaitez activer cette fonctionnalité, vous devez définir la variable
d’environnement OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED comme suit :
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: python-instrumentation
namespace: application
spec:
exporter:
endpoint: http://demo-collector:4318
env:
propagators:
- tracecontext
- baggage
python:
env:
- name: OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED
value: 'true'
Depuis la version v0.111.0 de l’opérateur, définir
OTEL_LOGS_EXPORTERàotlpn’est plus requis.
Exclure l’auto-instrumentation
Par défaut, l’auto-instrumentation Python est livrée avec
beaucoup de bibliothèques d’instrumentation.
Cela rend l’instrumentation facile, mais peut créer trop de données ou des
données indésirables. Si il y a des paquets que vous ne voulez pas instrumenter,
vous pouvez définir la variable d’environnement
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS.
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: demo-instrumentation
spec:
exporter:
endpoint: http://demo-collector:4318
propagators:
- tracecontext
- baggage
sampler:
type: parentbased_traceidratio
argument: '1'
python:
env:
- name: OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
value:
<liste séparée par des virgules des noms de paquets à exclure de
l'instrumentation>
Voir les docs de configuration de l’agent Python pour plus de détails.
En savoir plus
Pour les particularités spécifiques à Python, voir la documentation de l’opérateur OpenTelemetry Python et la documentation de configuration de l’agent Python.
Maintenant que votre objet Instrumentation est créé, votre cluster a la
capacité d’auto-instrumenter les services et d’envoyer des données vers un point
de terminaison. Cependant, l’auto-instrumentation avec l’opérateur OpenTelemetry
suit un modèle d’option d’adhésion. Pour activer l’instrumentation automatique,
vous devrez ajouter une annotation à votre déploiement.
Ajouter des annotations aux déploiements existants
La dernière étape est d’activer l’instrumentation automatique pour vos services.
Cela se fait en mettant à jour les spec.template.metadata.annotations de votre
service pour inclure une annotation spécifique au langage :
- .NET :
instrumentation.opentelemetry.io/inject-dotnet: "true" - Deno :
instrumentation.opentelemetry.io/inject-sdk: "true" - Go :
instrumentation.opentelemetry.io/inject-go: "true" - Java :
instrumentation.opentelemetry.io/inject-java: "true" - Node.js :
instrumentation.opentelemetry.io/inject-nodejs: "true" - Python :
instrumentation.opentelemetry.io/inject-python: "true"
Les valeurs possibles pour l’annotation peuvent être
"true"- pour injecter la ressourceInstrumentationavec le nom par défaut du namespace actuel."my-instrumentation"- pour injecter l’instance d’Instrumentationavec le nom"my-instrumentation"dans le namespace actuel."my-other-namespace/my-instrumentation"- pour injecter l’instance CRInstrumentationavec le nom"my-instrumentation"d’un autre namespace"my-other-namespace"."false"- ne pas injecter
Alternativement, l’annotation peut être ajoutée à un namespace, ce qui entraînera tous les services de ce namespace à opter pour l’instrumentation automatique. Voir la documentation d’auto-instrumentation avec l’opérateur pour plus de détails.
Opter pour un service Go
Contrairement à l’auto-instrumentation d’autres langages, Go fonctionne via un
agent eBPF s’exécutant via un sidecar. Lorsqu’il est opté, l’opérateur injectera
ce sidecar dans votre pod. En plus de l’annotation
instrumentation.opentelemetry.io/inject-go mentionnée ci-dessus, vous devez
également fournir une valeur pour la
variables d’environnement OTEL_GO_AUTO_TARGET_EXE.
Vous pouvez définir cette variable d’environnement via l’annotation
instrumentation.opentelemetry.io/otel-go-auto-target-exe.
instrumentation.opentelemetry.io/inject-go: 'true'
instrumentation.opentelemetry.io/otel-go-auto-target-exe: '/path/to/container/executable'
Cette variable d’environnement peut également être définie via la ressource
Instrumentation, avec l’annotation prenant la priorité. Puisque
l’auto-instrumentation Go nécessite OTEL_GO_AUTO_TARGET_EXE pour être défini,
vous devez fournir un chemin d’exécutable valide via l’annotation ou la
ressource Instrumentation. Ne pas définir cette valeur entraîne l’arrêt de
l’injection d’instrumentation, laissant le pod original inchangé.
Puisque l’auto-instrumentation Go utilise eBPF, elle nécessite également des permissions élevées. Lorsque vous l’activez, le sidecar que l’opérateur injecte nécessitera les permissions suivantes :
securityContext:
privileged: true
runAsUser: 0
Auto-instrumenter un conteneur Python basé sur musl
Depuis la version v0.113.0 de l’opérateur, l’auto-instrumentation Python respecte également une annotation qui lui permettra de s’exécuter sur des images avec une bibliothèque C différente de glibc.
# pour les images Linux basées sur glibc, c'est la valeur par défaut et peut être omise
instrumentation.opentelemetry.io/otel-python-platform: "glibc"
# pour les images Linux basées sur musl
instrumentation.opentelemetry.io/otel-python-platform: "musl"
Dépannage
Si vous rencontrez des problèmes en essayant d’auto-instrumenter votre code, voici des actions que vous pouvez essayer.
La ressource Instrumentation s’est-elle installée ?
Après avoir installé la ressource Instrumentation, vérifiez qu’elle s’est
installée correctement en exécutant cette commande, où <namespace> est le
namespace dans lequel la ressource Instrumentation est déployée :
kubectl describe otelinst -n <namespace>
Exemple de sortie :
Name: python-instrumentation
Namespace: application
Labels: app.kubernetes.io/managed-by=opentelemetry-operator
Annotations: instrumentation.opentelemetry.io/default-auto-instrumentation-apache-httpd-image:
ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-apache-httpd:1.0.3
instrumentation.opentelemetry.io/default-auto-instrumentation-dotnet-image:
ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-dotnet:0.7.0
instrumentation.opentelemetry.io/default-auto-instrumentation-go-image:
ghcr.io/open-telemetry/opentelemetry-go-instrumentation/autoinstrumentation-go:v0.2.1-alpha
instrumentation.opentelemetry.io/default-auto-instrumentation-java-image:
ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:1.26.0
instrumentation.opentelemetry.io/default-auto-instrumentation-nodejs-image:
ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-nodejs:0.40.0
instrumentation.opentelemetry.io/default-auto-instrumentation-python-image:
ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.39b0
API Version: opentelemetry.io/v1alpha1
Kind: Instrumentation
Metadata:
Creation Timestamp: 2023-07-28T03:42:12Z
Generation: 1
Resource Version: 3385
UID: 646661d5-a8fc-4b64-80b7-8587c9865f53
Spec:
...
Exporter:
Endpoint: http://demo-collector.opentelemetry.svc.cluster.local:4318
...
Propagators:
tracecontext
baggage
Python:
Image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-python:0.39b0
Resource Requirements:
Limits:
Cpu: 500m
Memory: 32Mi
Requests:
Cpu: 50m
Memory: 32Mi
Resource:
Sampler:
Events: <none>
Les logs de l’opérateur OTel montrent-ils des erreurs d’auto-instrumentation ?
Vérifiez les logs de l’opérateur OTel pour toute erreur relative à l’auto-instrumentation en exécutant cette commande :
kubectl logs -l app.kubernetes.io/name=opentelemetry-operator --container manager -n opentelemetry-operator-system --follow
Les ressources ont-elles été déployées dans le bon ordre ?
L’ordre compte ! La ressource Instrumentation doit être déployée avant de
déployer l’application, sinon l’auto-instrumentation ne fonctionnera pas.
Rappelez-vous l’annotation d’auto-instrumentation :
annotations:
instrumentation.opentelemetry.io/inject-python: 'true'
L’annotation ci-dessus dit à l’opérateur OTel de chercher un objet
Instrumentation dans le namespace du pod. Elle dit également à l’opérateur
d’injecter l’auto-instrumentation Python dans le pod.
Lorsque le pod démarre, l’annotation dit à l’opérateur de chercher un objet
Instrumentation dans le namespace du pod, et d’injecter l’auto-instrumentation
dans le pod. Il ajoute un
init-container
au pod de l’application, appelé opentelemetry-auto-instrumentation, qui est
ensuite utilisé pour injecter l’auto-instrumentation dans le conteneur de l’app.
Si la ressource Instrumentation n’est pas présente au moment du déploiement de
l’application, l’init-container ne peut pas être créé. Par conséquent, si
l’application est déployée avant de déployer la ressource Instrumentation,
l’ auto-instrumentation échouera.
Pour s’assurer que l’init-container opentelemetry-auto-instrumentation a
démarré correctement (ou a même démarré du tout), exécutez la commande suivante
:
kubectl get events -n <your_app_namespace>
Qui devrait retourner quelque chose comme ceci :
53s Normal Created pod/py-otel-server-7f54bf4cbc-p8wmj Created container opentelemetry-auto-instrumentation
53s Normal Started pod/py-otel-server-7f54bf4cbc-p8wmj Started container opentelemetry-auto-instrumentation
Si la sortie manque les entrées Created et/ou Started pour
opentelemetry-auto-instrumentation, alors cela signifie qu’il y a un problème
avec votre auto-instrumentation. Cela peut être le résultat de l’un des éléments
suivants :
- La ressource
Instrumentationn’a pas été installée (ou n’a pas été installée correctement). - La ressource
Instrumentationa été installée après le déploiement de l’application. - Il y a une erreur dans l’annotation d’auto-instrumentation, ou l’annotation est au mauvais endroit — voir #4 ci-dessous.
Assurez-vous de vérifier la sortie de kubectl get events pour toute erreur,
car ces pourraient aider à pointer vers le problème.
L’annotation d’auto-instrumentation est-elle correcte ?
Parfois, l’auto-instrumentation peut échouer en raison d’erreurs dans l' annotation d’auto-instrumentation.
Voici quelques choses à vérifier :
- L’auto-instrumentation est-elle pour le bon langage ?
- Par exemple, lors de l’instrumentation d’une application Python,
assurez-vous que l’ annotation ne dit pas incorrectement
instrumentation.opentelemetry.io/inject-java: "true"à la place. - Pour Deno, assurez-vous d’utiliser l’annotation
instrumentation.opentelemetry.io/inject-sdk: "true", plutôt qu’une annotation contenant la chaînedeno.
- Par exemple, lors de l’instrumentation d’une application Python,
assurez-vous que l’ annotation ne dit pas incorrectement
- L’annotation d’auto-instrumentation est-elle au bon endroit ? Lors de la
définition d’un
Deployment, les annotations peuvent être ajoutées dans l’un des deux endroits :spec.metadata.annotations, etspec.template.metadata.annotations. L’ annotation d’auto-instrumentation doit être ajoutée àspec.template.metadata.annotations, sinon elle ne fonctionnera pas.
Le point de terminaison d’auto-instrumentation a-t-il été configuré correctement ?
L’attribut spec.exporter.endpoint de la ressource Instrumentation définit où
envoyer les données. Cela peut être un collecteur OTel, ou
tout point de terminaison OTLP. Si cet attribut n’est pas présent, il sera par
défaut à http://localhost:4317, ce qui, très probablement, enverra les données
de télémétrie nulle part.
Lors de l’envoi de télémétrie vers un collecteur OTel situé dans le même cluster
Kubernetes, spec.exporter.endpoint devrait référencer le nom du service OTel
Collector
Service.
Par exemple :
spec:
exporter:
endpoint: http://demo-collector.opentelemetry.svc.cluster.local:4317
Ici, le point de terminaison du collecteur est défini à
http://demo-collector.opentelemetry.svc.cluster.local:4317, où
demo-collector est le nom du service Kubernetes Service du collecteur OTel.
Dans l’exemple ci-dessus, le collecteur fonctionne dans un namespace différent
de l’application, ce qui signifie que opentelemetry.svc.cluster.local doit
être ajouté au nom du service du collecteur, où opentelemetry est le namespace
dans lequel le collecteur réside.
Feedback
Cette page est-elle utile?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!