Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Python com OpenTelemetry

Instrumentalização Automática

.venv/bin/pip install opentelemetry-distro opentelemetry-exporter-otlp
.venv/bin/opentelemetry-bootstrap -a requirements > requirements.txt
.venv/bin/opentelemetry-bootstrap -a install

export OTEL_SERVICE_NAME="nome-aplicacao"
export OTEL_RESOURCE_ATTRIBUTES="env=local,attr=value"
export OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED="true"  # Necessário em versões anteriores a 1.40.0
.venv/bin/opentelemetry-instrument <comando-da-aplicacao>

Warning

Opções de recarregamento automático, como --reload, podem quebrar a observabilidade do OpenTelemetry.

Instrumentalização Manual

Dependência:

[project]
dependencies = ["opentelemetry-api >=1.40,<2"]

Exemplo de código:

from logging import INFO, basicConfig, getLogger
from random import randint

from opentelemetry import metrics
from opentelemetry import trace

basicConfig(level=INFO)  # Opcional

log = getLogger(__name__)
tracer = trace.get_tracer(__name__)
meter = metrics.get_meter('app')

event_counter = meter.create_counter(
    'event_counter',
    description='Número de eventos',
)

def get_random_value(options: metrics.CallbackOptions) -> Generator[metrics.Observation]:
    yield metrics.Observation(randint(0, 10), {'key': '1'})
    yield metrics.Observation(randint(0, 10), {'key': '2'})

random_value_metric = meter.create_observable_gauge(
    'random.value',
    description='Valor aleatório',
    callbacks=[get_random_value],
)

@tracer.start_as_current_span('minha_funcao')
def minha_funcao(param1: str, param2: str):
    trace_span = trace.get_current_span()
    trace_span.set_attributes({'param1': param1, 'param2', param2})
    log.info('Minha mensagem de log')
    result = 10
    trace_span.set_attribute('result', result)
    trace_span.set_status(trace.StatusCode.OK)
    event_counter.add(1, {'param1': param1, 'param2': param2, 'result': result})
    return result