Instrument your Python application for Splunk Observability Cloud
The Splunk OpenTelemetry Python agent can automatically instrument your Python application or service. Follow these steps to get started.
The Python agent from the Splunk Distribution of OpenTelemetry Python can automatically instrument your Python application by dynamically patching supported libraries.
To get started, use the guided setup or follow the instructions manually.
Generate customized instructions using the guided setup
To generate all the basic installation commands for your environment and application, use the Python guided setup. To access the Python guided setup, follow these steps:
Log in to Splunk Observability Cloud.
Open the Python guided setup . Optionally, you can navigate to the guided setup on your own:
In the navigation menu, select Data Management.
Go to the Available integrations tab, or select Add Integration in the Deployed integrations tab.
In the integration filter menu, select By Product.
Select the APM product.
Select the Python tile to open the Python guided setup.
Install the Splunk Distribution of OpenTelemetry Python manually
If you don’t use the guided setup, follow these instructions to manually install the Splunk Distribution of OpenTelemetry Python:
Install and activate the Python agent
Follow these steps to automatically instrument your application using the Python agent:
Check that you meet the requirements. See Python agent compatibility and requirements.
Install the
splunk-opentelemetry
package:pip install splunk-opentelemetry
If you’re using a requirements.txt or pyproject.toml file, add
splunk-opentelemetry to it.
Run the bootstrap script to install instrumentation for every supported package in your environment:
opentelemetry-bootstrap
To print the instrumentation packages to the console instead of installing them, run
opentelemetry-bootstrap --action=requirements
. You can then add the output to your requirements or Pipfile.Set the
OTEL_SERVICE_NAME
environment variable:- Linux
export OTEL_SERVICE_NAME=<yourServiceName>
- Windows PowerShell
$env:OTEL_SERVICE_NAME=<yourServiceName>
(Optional) Set the endpoint URL if the Splunk Distribution of OpenTelemetry Collector is running on a different host:
- Linux
export OTEL_EXPORTER_OTLP_ENDPOINT=<yourCollectorEndpoint>:<yourCollectorPort>
- Windows PowerShell
$env:OTEL_EXPORTER_OTLP_ENDPOINT=<yourCollectorEndpoint>:<yourCollectorPort>
(Optional) Set the deployment environment and service version:
- Linux
export OTEL_RESOURCE_ATTRIBUTES='deployment.environment=<envtype>,service.version=<version>'
- Windows PowerShell
$env:OTEL_RESOURCE_ATTRIBUTES='deployment.environment=<envtype>,service.version=<version>'
Activate the Splunk OTel Python agent by editing your Python service command.
For example, open your Python application as follows:
python3 main.py --port=8000
Then prefix the command with
opentelemetry-instrument
:opentelemetry-instrumen python3 main.py --port=8000
Note: To instrument uWSGI applications, see Manually instrument Python applications for Splunk Observability Cloud.(Optional) Perform additional steps if you’re using the Django framework. See Instrument your Django application.
Application metrics are collected by default. See Metrics and attributes collected by the Splunk Distribution of OpenTelemetry Python for more information.
If no data appears in APM, see Troubleshoot Python instrumentation for Splunk Observability Cloud.
Activate AlwaysOn Profiling
To activate AlwaysOn Profiling, set the SPLUNK_PROFILER_ENABLED
environment variable to true
or call the start_profiling
function in your application code.
The following example shows how to activate the profiler from your application code:
from splunk_otel.profiling import start_profiling
# Activates CPU profiling
start_profiling()
See Get data into Splunk APM AlwaysOn Profiling for more information. For additional settings, see Python settings for AlwaysOn Profiling.
Configure the Python agent
In most cases, the only configuration setting you need to enter is the service name. You can also define other basic settings, like the deployment environment, the service version, and the endpoint, among others.
For advanced configuration of the Python agent, like changing trace propagation formats, correlating traces and logs, or configuring server trace data, see Configure the Python agent for Splunk Observability Cloud.
Deploy the Python agent in Kubernetes
To deploy the Python agent in Kubernetes, configure the Kubernetes Downward API to expose environment variables to Kubernetes resources.
The following example shows how to update a deployment to expose environment variables by adding the agent configuration under the .spec.template.spec.containers.env
section:
apiVersion: apps/v1
kind: Deployment
spec:
selector:
matchLabels:
app: your-application
template:
spec:
containers:
- name: myapp
env:
- name: SPLUNK_OTEL_AGENT
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(SPLUNK_OTEL_AGENT):4317"
- name: OTEL_SERVICE_NAME
value: "<serviceName>"
- name: OTEL_RESOURCE_ATTRIBUTES
value: "deployment.environment=<environmentName>"
Send data directly to Splunk Observability Cloud
By default, the agent sends all telemetry to the local instance of the Splunk Distribution of OpenTelemetry Collector.
To send data directly to Splunk Observability Cloud, set the following environment variables:
- Linux
export SPLUNK_ACCESS_TOKEN=<access_token> export SPLUNK_REALM=<realm>
- Windows PowerShell
$env:SPLUNK_ACCESS_TOKEN=<access_token> $env:SPLUNK_REALM=<realm>
To obtain an access token, see Retrieve and manage user API access tokens using Splunk Observability Cloud.
To find your Splunk realm, see the not about realms in Configure SSO integrations for Splunk Observability Cloud.
Specify the source host
To override the host used by the agent, use the environment variable OTEL_RESOURCE_ATTRIBUTES
to set your host’s name to the desired source:
- Windows PowerShell
-
$env:OTEL_RESOURCE_ATTRIBUTES=host.name=<host_name>
- Linux
-
export OTEL_RESOURCE_ATTRIBUTES=host.name=<host_name>
Instrument Lambda functions
You can instrument AWS Lambda functions using the Splunk OpenTelemetry Lambda Layer. See Instrument your AWS Lambda function for Splunk Observability Cloud for more information.