title | weight | description | default_lang_commit | cSpell:ignore |
---|---|---|---|---|
Exporters |
50 |
Processar e exportar seus dados de telemetria |
546f3e88ca3673de8aad69358d416256d1fe6411 |
LOWMEMORY |
{{% docs/languages/exporters/intro python %}}
Se você deseja enviar dados de telemetria para um endpoint OTLP (como o OpenTelemetry Collector, Jaeger ou Prometheus), você pode escolher entre dois protocolos diferentes para transportar seus dados:
Comece instalando os pacotes do exporter necessários como dependências do seu projeto antes de prosseguir.
{{< tabpane text=true >}} {{% tab "HTTP/Proto" %}}
pip install opentelemetry-exporter-otlp-proto-http
{{% /tab %}} {{% tab gRPC %}}
pip install opentelemetry-exporter-otlp-proto-grpc
{{% /tab %}} {{< /tabpane >}}
Em seguida, configure o exporter para apontar para um endpoint OTLP no seu código.
{{< tabpane text=true >}} {{% tab "HTTP/Proto" %}}
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry import metrics
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
# Nome do serviço é necessário para a maioria dos backends
resource = Resource(attributes={
SERVICE_NAME: "nome-do-seu-serviço"
})
tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="<traces-endpoint>/v1/traces"))
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)
reader = PeriodicExportingMetricReader(
OTLPMetricExporter(endpoint="<traces-endpoint>/v1/metrics")
)
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)
{{% /tab %}} {{% tab gRPC %}}
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry import metrics
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
# Nome do serviço é necessário para a maioria dos backends
resource = Resource(attributes={
SERVICE_NAME: "nome-do-seu-serviço"
})
tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="seu-endpoint-aqui"))
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)
reader = PeriodicExportingMetricReader(
OTLPMetricExporter(endpoint="localhost:5555")
)
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)
{{% /tab %}} {{< /tabpane >}}
Para depurar sua instrumentação ou ver os valores localmente em desenvolvimento, você pode usar exporters que escrevem dados de telemetria no console (stdout).
O ConsoleSpanExporter
e o ConsoleMetricExporter
estão inclusos no pacote
opentelemetry-sdk
.
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from opentelemetry import metrics
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader, ConsoleMetricExporter
# Nome do serviço é necessário para a maioria dos backends,
# e embora não seja necessário para exportação no console,
# é bom definir o nome do serviço de qualquer maneira.
resource = Resource(attributes={
SERVICE_NAME: "nome-do-seu-serviço"
})
tracerProvider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(ConsoleSpanExporter())
tracerProvider.add_span_processor(processor)
trace.set_tracer_provider(tracerProvider)
reader = PeriodicExportingMetricReader(ConsoleMetricExporter())
meterProvider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(meterProvider)
{{% alert title="Nota" color="info" %}}
Existem predefinições de temporalidade para cada tipo de instrumentação. Essas
predefinições podem ser definidas com a variável de ambiente
OTEL_EXPORTER_METRICS_TEMPORALITY_PREFERENCE
, por exemplo:
export OTEL_EXPORTER_METRICS_TEMPORALITY_PREFERENCE="DELTA"
O valor padrão para OTEL_EXPORTER_METRICS_TEMPORALITY_PREFERENCE
é
"CUMULATIVE"
.
Os valores disponíveis e suas configurações correspondentes para esta variável de ambiente são:
-
CUMULATIVE
Counter
:CUMULATIVE
UpDownCounter
:CUMULATIVE
Histogram
:CUMULATIVE
ObservableCounter
:CUMULATIVE
ObservableUpDownCounter
:CUMULATIVE
ObservableGauge
:CUMULATIVE
-
DELTA
Counter
:DELTA
UpDownCounter
:CUMULATIVE
Histogram
:DELTA
ObservableCounter
:DELTA
ObservableUpDownCounter
:CUMULATIVE
ObservableGauge
:CUMULATIVE
-
LOWMEMORY
Counter
:DELTA
UpDownCounter
:CUMULATIVE
Histogram
:DELTA
ObservableCounter
:CUMULATIVE
ObservableUpDownCounter
:CUMULATIVE
ObservableGauge
:CUMULATIVE
Definir OTEL_EXPORTER_METRICS_TEMPORALITY_PREFERENCE
para qualquer valor
diferente de CUMULATIVE
, DELTA
ou LOWMEMORY
registrará um aviso e definirá
esta variável de ambiente como CUMULATIVE
.
{{% /alert %}}
{{% include "exporters/jaeger.md" %}}
{{% include "exporters/prometheus-setup.md" %}}
Instale o pacote de exporter como uma dependência para sua aplicação:
pip install opentelemetry-exporter-prometheus
Atualize sua configuração do OpenTelemetry para usar o exporter e enviar dados para seu backend Prometheus:
from prometheus_client import start_http_server
from opentelemetry import metrics
from opentelemetry.exporter.prometheus import PrometheusMetricReader
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
# Nome do serviço é necessário para a maioria dos backends
resource = Resource(attributes={
SERVICE_NAME: "nome-do-seu-serviço"
})
# Iniciar cliente Prometheus
start_http_server(port=9464, addr="localhost")
# Inicializar PrometheusMetricReader que puxa métricas do SDK
# sob demanda para responder a solicitações de extração
reader = PrometheusMetricReader()
provider = MeterProvider(resource=resource, metric_readers=[reader])
metrics.set_meter_provider(provider)
Com o código acima, você pode acessar suas métricas em http://localhost:9464/metrics. O Prometheus ou um OpenTelemetry Collector com o receptor Prometheus pode extrair as métricas deste endpoint.
{{% include "exporters/zipkin-setup.md" %}}
Para enviar seus dados de rastro para o Zipkin, você pode escolher entre dois protocolos diferentes para transportar seus dados:
Instale o pacote de exporter como uma dependência para sua aplicação:
{{< tabpane text=true >}} {{% tab "HTTP/Proto" %}}
pip install opentelemetry-exporter-zipkin-proto-http
{{% /tab %}} {{% tab Thrift %}}
pip install opentelemetry-exporter-zipkin-json
{{% /tab %}} {{< /tabpane >}}
Atualize sua configuração do OpenTelemetry para usar o exporter e enviar dados para seu backend Zipkin:
{{< tabpane text=true >}} {{% tab "HTTP/Proto" %}}
from opentelemetry import trace
from opentelemetry.exporter.zipkin.proto.http import ZipkinExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
resource = Resource(attributes={
SERVICE_NAME: "nome-do-seu-serviço"
})
zipkin_exporter = ZipkinExporter(endpoint="http://localhost:9411/api/v2/spans")
provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(zipkin_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
{{% /tab %}} {{% tab Thrift %}}
from opentelemetry import trace
from opentelemetry.exporter.zipkin.json import ZipkinExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
resource = Resource(attributes={
SERVICE_NAME: "nome-do-seu-serviço"
})
zipkin_exporter = ZipkinExporter(endpoint="http://localhost:9411/api/v2/spans")
provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(zipkin_exporter)
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
{{% /tab %}} {{< /tabpane >}}
{{% include "exporters/outro.md" https://opentelemetry-python.readthedocs.io/en/latest/sdk/trace.export.html#opentelemetry.sdk.trace.export.SpanExporter
%}}
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
processor = SimpleSpanProcessor(OTLPSpanExporter(endpoint="seu-endpoint-aqui"))