mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-02 19:47:17 +08:00
70 lines
2.0 KiB
ReStructuredText
70 lines
2.0 KiB
ReStructuredText
OpenTelemetry Celery Instrumentation
|
|
====================================
|
|
|
|
|pypi|
|
|
|
|
.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-celery.svg
|
|
:target: https://pypi.org/project/opentelemetry-instrumentation-celery/
|
|
|
|
Instrumentation for Celery.
|
|
|
|
|
|
Installation
|
|
------------
|
|
|
|
::
|
|
|
|
pip install opentelemetry-instrumentation-celery
|
|
|
|
Usage
|
|
-----
|
|
|
|
* Start broker backend
|
|
|
|
::
|
|
docker run -p 5672:5672 rabbitmq
|
|
|
|
|
|
* Run instrumented task
|
|
|
|
.. code-block:: python
|
|
|
|
from opentelemetry import trace
|
|
from opentelemetry.sdk.trace import TracerProvider
|
|
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
from opentelemetry.instrumentation.celery import CeleryInstrumentor
|
|
|
|
from celery import Celery
|
|
from celery.signals import worker_process_init
|
|
|
|
@worker_process_init.connect(weak=False)
|
|
def init_celery_tracing(*args, **kwargs):
|
|
trace.set_tracer_provider(TracerProvider())
|
|
span_processor = BatchSpanProcessor(ConsoleSpanExporter())
|
|
trace.get_tracer_provider().add_span_processor(span_processor)
|
|
CeleryInstrumentor().instrument()
|
|
|
|
app = Celery("tasks", broker="amqp://localhost")
|
|
|
|
@app.task
|
|
def add(x, y):
|
|
return x + y
|
|
|
|
add.delay(42, 50)
|
|
|
|
|
|
Setting up tracing
|
|
--------------------
|
|
|
|
When tracing a celery worker process, tracing and instrumention both must be initialized after the celery worker
|
|
process is initialized. This is required for any tracing components that might use threading to work correctly
|
|
such as the BatchSpanProcessor. Celery provides a signal called ``worker_process_init`` that can be used to
|
|
accomplish this as shown in the example above.
|
|
|
|
References
|
|
----------
|
|
* `OpenTelemetry Celery Instrumentation <https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/celery/celery.html>`_
|
|
* `OpenTelemetry Project <https://opentelemetry.io/>`_
|
|
* `OpenTelemetry Python Examples <https://github.com/open-telemetry/opentelemetry-python/tree/main/docs/examples>`_
|
|
|