opentelemetry-python-contrib/instrumentation/opentelemetry-instrumentati...
alrex 416f9a0f96
[pre-release] Update changelogs, version [0.16b1] (#221)
* updating changelogs and version to 0.16b1

* update core SHA
2020-11-26 15:31:23 -08:00
..
src/opentelemetry/instrumentation/celery [pre-release] Update changelogs, version [0.16b1] (#221) 2020-11-26 15:31:23 -08:00
tests Use is_recording flag in jinja, celery, esearch, falcon instrumentations (#1241) 2020-10-14 12:07:23 -07:00
CHANGELOG.md chore: bump dev version (#1235) 2020-10-13 11:38:09 -07:00
LICENSE Rename remaining framework packages from "ext" to "instrumentation" (#969) 2020-08-04 19:10:51 -07:00
MANIFEST.in Rename remaining framework packages from "ext" to "instrumentation" (#969) 2020-08-04 19:10:51 -07:00
README.rst Update package links to point to contrib repo 2020-11-18 13:09:44 -08:00
setup.cfg [pre-release] Update changelogs, version [0.16b1] (#221) 2020-11-26 15:31:23 -08:00
setup.py Rename remaining framework packages from "ext" to "instrumentation" (#969) 2020-08-04 19:10:51 -07:00

README.rst

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 BatchExportSpanProcessor
    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 = BatchExportSpanProcessor(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 BatchExportSpanProcessor. 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/>`_