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_URLenv var orDEFAULT_DATALAYER_OTEL_URL(https://prod1.datalayer.run). -
token : str, optional
JWT bearer token for authentication. Falls back to
DATALAYER_API_KEYenv 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.