Skip to main content

client

HTTP client for the Datalayer OTEL query service.

Provides a high-level Python API for querying traces, metrics, logs, and running ad-hoc SQL against the datalayer-otel FastAPI service.

Usage::

from datalayer_core.otel import OtelClient

client = OtelClient(base_url="https://prod1.datalayer.run", token="my-jwt") traces = client.list_traces(service_name="my-service", limit=10) metrics = client.query_metrics(metric_name="http.requests") logs = client.query_logs(severity="ERROR", limit=50) rows = client.query_sql("SELECT * FROM spans LIMIT 5") stats = client.get_stats() services = client.list_services() client.flush()

class OtelClient(base_url: 'str | None' = None, token: 'str | None' = None, timeout: 'float' = 30.0) -> 'None'

Client for the Datalayer OTEL REST API.

Parameters

  • base_url : str, optional

    OTEL service base URL. Defaults to DATALAYER_OTEL_URL env var or DEFAULT_DATALAYER_OTEL_URL (https://prod1.datalayer.run).

  • token : str, optional

    JWT bearer token for authentication. Falls back to DATALAYER_API_KEY env var.

  • timeout : float

    HTTP request timeout in seconds.

ping() -> 'dict[str, Any]'

Health check (no auth required).

version() -> 'dict[str, Any]'

Get service version.

get_stats() -> 'dict[str, Any]'

Get storage statistics.

flush() -> 'dict[str, Any]'

Force-flush all buffered telemetry data to storage.

list_traces(service_name: 'str | None' = None, limit: 'int' = 20) -> 'dict[str, Any]'

List recent traces.

Parameters

  • service_name : str, optional

    Filter by service name.

  • limit : int

    Maximum number of traces.

get_trace(trace_id: 'str') -> 'dict[str, Any]'

Get spans for a specific trace.

Parameters

  • trace_id : str

    The trace ID.

list_services() -> 'list[str]'

List all observed service names.

list_metrics(metric_name: 'str | None' = None, service_name: 'str | None' = None, limit: 'int' = 20) -> 'dict[str, Any]'

List metric names / data points.

Parameters

  • metric_name : str, optional

    Filter by metric name.

  • service_name : str, optional

    Filter by service name.

  • limit : int

    Maximum number of rows.

query_metrics(name: 'str | None' = None, service_name: 'str | None' = None, limit: 'int' = 20) -> 'dict[str, Any]'

Query metric data points.

Parameters

  • name : str, optional

    Metric name.

  • service_name : str, optional

    Service name filter.

  • limit : int

    Maximum rows.

query_logs(service_name: 'str | None' = None, severity: 'str | None' = None, trace_id: 'str | None' = None, limit: 'int' = 50) -> 'dict[str, Any]'

Query log records.

Parameters

  • service_name : str, optional

    Filter by service name.

  • severity : str, optional

    Filter by severity (INFO, WARN, ERROR, etc.).

  • trace_id : str, optional

    Filter by trace ID.

  • limit : int

    Maximum rows.

query_sql(sql: 'str') -> 'dict[str, Any]'

Run an ad-hoc SQL query via SQL Engine.

Parameters

  • sql : str

    SQL query string.

admin_sql(sql: 'str') -> 'dict[str, Any]'

Run an arbitrary SQL query without user-scope filtering.

Requires platform_admin role. Sends the SQL directly to the admin endpoint so the result spans all accounts.

Parameters

  • sql : str

    SQL query string.