Skip to main content
To send data from a Python app to Axiom, use the Axiom Python SDK.
The Axiom Python SDK is an open-source project and welcomes your contributions. For more information, see the GitHub repository.

Prerequisites

Install SDK

python3 -m pip install axiom-py
If you use the Axiom CLI, run eval $(axiom config export -f) to configure your environment variables. Otherwise, create an API token and export it as AXIOM_TOKEN. You can also configure the client using options passed to the client constructor:
import axiom_py

client = axiom_py.Client("API_TOKEN")

Use client

import axiom_py
import rfc3339
from datetime import datetime,timedelta

client = axiom_py.Client()

client.ingest_events(
    dataset="DATASET_NAME",
    events=[
        {"foo": "bar"},
        {"bar": "baz"},
    ])
client.query(r"['DATASET_NAME'] | where foo == 'bar' | limit 100")
For more examples, see the examples in GitHub.

Configure region

By default, the client sends data to api.axiom.co. To target a specific edge region, pass the edge argument with the edge domain that matches the region your dataset lives in:
import axiom_py

client = axiom_py.Client(
    token="xaat-your-api-token",
    edge="eu-central-1.aws.edge.axiom.co",
)
The following edge domains are available:
Edge deploymentBase domain for ingest and query
US East 1 (AWS)us-east-1.aws.edge.axiom.co
EU Central 1 (AWS)eu-central-1.aws.edge.axiom.co
For more information about edge deployments, see Edge deployments. To point at a custom edge endpoint such as a proxy or load balancer, use edge_url="https://your-edge-host" instead. edge_url takes precedence over edge if both are set.
Edge endpoints require an API token (xaat-), not a personal token (xapt-). Passing a personal token with edge configuration raises an error.
Edge configuration must be passed explicitly when you create the client. Unlike token and org_id, the edge and edge_url arguments are not read from environment variables.

Example with AxiomHandler

The example below uses AxiomHandler to send logs from the logging module to Axiom:
import axiom_py
from axiom_py.logging import AxiomHandler
import logging

def setup_logger():
    client = axiom_py.Client()
    handler = AxiomHandler(client, "DATASET_NAME")
    logging.getLogger().addHandler(handler)
For a full example, see GitHub.

Example with structlog

The example below uses structlog to send logs to Axiom:
from axiom_py import Client
from axiom_py.structlog import AxiomProcessor

def setup_logger():
    client = Client()

    structlog.configure(
        processors=[
            # ...
            structlog.processors.add_log_level,
            structlog.processors.TimeStamper(fmt="iso", key="_time"),
            AxiomProcessor(client, "DATASET_NAME"),
            # ...
        ]
    )
For a full example, see GitHub.