Exemple d'auto-instrumentation des journaux
Cette page montre comment utiliser l’auto-instrumentation des journaux Python dans OpenTelemetry.
Contrairement aux traces et aux métriques, il n’y a pas d’API équivalente pour
les journaux. Il n’y a qu’un SDK. Pour Python, vous utiliserez la bibliothèque
logger
de Python, puis le SDK OTel qui attachera un gestionnaire OTLP au
logger racine, transformant le logger Python en logger OTLP. Une façon
d’accomplir cela est documentée dans l’exemple “logs” du dépôt OpenTelemetry
Python.
Une autre façon de le faire est via le support de Python pour l’auto-instrumentation des journaux. L’exemple ci-dessous est basé sur l’exemple “logs” du dépôt OpenTelemetry Python.
Il existe une API qui fait le pont pour les journaux ; cependant, elle est différente de l’API des traces et des métriques, car elle n’est pas utilisée par les développeurs d’applications pour créer des journaux. Au lieu de cela, ils peuvent utiliser cette API pour configurer des appenders de journaux dans les bibliothèques de journalisation standard spécifiques au langage. Pour plus d’informations, voir API des journaux.
Commencez par créer le répertoire des exemples et le fichier Python d’exemple :
mkdir python-logs-example
cd python-logs-example
touch example.py
Collez le contenu suivant dans example.py
:
import logging
from opentelemetry import trace
tracer = trace.get_tracer_provider().get_tracer(__name__)
# Corrélation du contexte de trace {#trace-context-correlation}
with tracer.start_as_current_span("foo"):
# Faire quelque chose
current_span = trace.get_current_span()
current_span.add_event("Ceci est un événement de span")
logging.getLogger().error("Ceci est un message de journal")
Ouvrez et copiez l’exemple
otel-collector-config.yaml
, et enregistrez-le dans python-logs-example/otel-collector-config.yaml
Préparation
Exécutez l’exemple suivant, nous vous recommandons d’utiliser un environnement virtuel pour le faire. Exécutez les commandes suivantes pour vous préparer à l’auto-instrumentation des journaux :
mkdir python_logs_example
virtualenv python_logs_example
source python_logs_example/bin/activate
Installation
Les commandes suivantes installent les paquets appropriés. Le paquet
opentelemetry-distro
dépend de quelques autres, comme opentelemetry-sdk
pour
l’instrumentation personnalisée de votre propre code et
opentelemetry-instrumentation
qui fournit plusieurs commandes qui aident à
instrumenter automatiquement un programme.
pip install opentelemetry-distro
pip install opentelemetry-exporter-otlp
Les exemples qui suivent envoient les résultats de l’instrumentation à la console. Apprenez-en plus sur l’installation et la configuration de la Distribution OpenTelemetry pour envoyer la télémétrie à d’autres destinations, comme un Collecteur OpenTelemetry.
Note: Pour utiliser l’instrumentation automatique via
opentelemetry-instrument
, vous devez la configurer via des variables d’environnement ou la ligne de commande. L’agent crée un pipeline de télémétrie qui ne peut être modifié que par ces moyens. Si vous avez besoin de plus de personnalisation pour vos pipelines de télémétrie, alors vous devez renoncer à l’agent et importer le SDK OpenTelemetry et les bibliothèques d’instrumentation dans votre code et les configurer dans votre code. Vous pouvez également étendre l’instrumentation automatique en important l’API OpenTelemetry. Pour plus de détails, voir la référence de l’API.
Exécution
Cette section vous guide à travers le processus d’exécution d’une journalisation instrumentée automatiquement.
Ouvrez une nouvelle fenêtre de terminal et démarrez le Collecteur OTel :
docker run -it --rm -p 4317:4317 -p 4318:4318 \
-v $(pwd)/otel-collector-config.yml:/etc/otelcol-config.yml \
--name otelcol \
otel/opentelemetry-collector-contrib:0.76.1 \
"--config=/etc/otelcol-config.yml"
Ouvrez un autre terminal et exécutez le programme Python :
source python_logs_example/bin/activate
export OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true
opentelemetry-instrument \
--traces_exporter console,otlp \
--metrics_exporter console,otlp \
--logs_exporter console,otlp \
--service_name python-logs-example \
python $(pwd)/example.py
Exemple de sortie :
...
ScopeSpans #0
ScopeSpans SchemaURL:
InstrumentationScope __main__
Span #0
Trace ID : 389d4ac130a390d3d99036f9cd1db75e
Parent ID :
ID : f318281c4654edc5
Name : foo
Kind : Internal
Start time : 2023-08-18 17:04:05.982564 +0000 UTC
End time : 2023-08-18 17:04:05.982667 +0000 UTC
Status code : Unset
Status message :
Events:
SpanEvent #0
-> Name: This is a span event
-> Timestamp: 2023-08-18 17:04:05.982586 +0000 UTC
...
ScopeLogs #0
ScopeLogs SchemaURL:
InstrumentationScope opentelemetry.sdk._logs._internal
LogRecord #0
ObservedTimestamp: 1970-01-01 00:00:00 +0000 UTC
Timestamp: 2023-08-18 17:04:05.982605056 +0000 UTC
SeverityText: ERROR
SeverityNumber: Error(17)
Body: Str(This is a log message)
Attributes:
-> otelSpanID: Str(f318281c4654edc5)
-> otelTraceID: Str(389d4ac130a390d3d99036f9cd1db75e)
-> otelTraceSampled: Bool(true)
-> otelServiceName: Str(python-logs-example)
Trace ID: 389d4ac130a390d3d99036f9cd1db75e
Span ID: f318281c4654edc5
...
Notez que l’événement de Span et le journal ont tous deux le même SpanID
(f318281c4654edc5
). Le SDK de journalisation ajoute le SpanID du Span actuel à
tous les événements journalisés pour améliorer la capacité à corréler la
télémétrie.
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!