> For the complete documentation index, see [llms.txt](https://docs.dbnl.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dbnl.com/configuration/data-connections/sdk-log-ingestion.md).

# SDK Log Ingestion

{% hint style="info" %}
**Distributional is now** [**Talaria Scientific**](https://talariasci.com)**.** The DBNL product described in these docs has been sunset; this documentation is preserved for reference. Read [the announcement](https://distributional.com/blog/distributional-is-now-talaria).
{% endhint %}

Push OTLP trace data manually or as part of a daily orchestration job using our [Python SDK](https://github.com/dbnlAI/docs/tree/main/reference/python-sdk.md). This ingestion method is ideal for backfilling historical trace data or integrating into batch pipelines where you already have collected OTLP traces.

{% hint style="info" %}
See the [Python SDK docs](https://github.com/dbnlAI/docs/tree/main/reference/python-sdk.md) for more detailed information about SDK installation and functions.
{% endhint %}

{% hint style="info" %}
For real-time trace ingestion directly from your application, see [OTEL Trace Ingestion](/configuration/data-connections/otel-trace-ingestion.md) instead.
{% endhint %}

## Overview

The [`dbnl.log()`](/reference/python-sdk/sdk-functions.md#log) function accepts a Pandas Series of OTLP [`TracesData`](https://github.com/open-telemetry/opentelemetry-proto/blob/e5a5dc1f2c7f9e0eefbe061f1d5c09c67722f4d6/opentelemetry/proto/trace/v1/trace.proto#L38-L45) (proto bytes or JSON) and uploads it to a project for a given date range. Each element in the Series should be a single `TracesData` message containing [`resourceSpans`](https://github.com/open-telemetry/opentelemetry-proto/blob/e5a5dc1f2c7f9e0eefbe061f1d5c09c67722f4d6/opentelemetry/proto/trace/v1/trace.proto#L48-L65), the same top-level structure produced by OpenTelemetry SDKs and the [OTLP exporter](https://opentelemetry.io/docs/specs/otlp/).

Traces must adhere to the [DBNL Semantic Convention](/configuration/dbnl-semantic-convention.md) for the richest analysis. If you are using [OpenInference](https://github.com/Arize-ai/openinference) instrumentation, the required fields (`input`, `output`, `timestamp`) are automatically mapped from span attributes.

## Example Code

Check out the [Quickstart](/get-started/quickstart.md) for an end-to-end example of using SDK Log Ingestion.

{% file src="/files/Kqs6FEy6wUzKVscFpcEb" %}
