Python
Traces | Metrics | App Logs | Custom Logs | Profiling |
---|---|---|---|---|
✅ | ✅ | ✅ | ✅ | ✅ |
Prerequisites
1 Infra Agent
Infrastructure Agent (Infra Agent). To install the Infra Agent, see our Installation Guide.
2 Python Version
Python 3 version 3.8
or above. Check your Python version with the following command:
python3 --version
3 Pip Version
pip version 23.1.2
or above. Check your pip version with the following command:
pip --version
Install
Step 1: Install Python
APM Package
Run the following command in your terminal:
pip install middleware-apm
Check if the middleware-apm
has been installed with the following command:
pip list
Step 2: Import Middleware Tracker
Add the following lines to the beginning of your application:
import logging from middleware import MwTracker tracker=MwTracker()
Step 3: Container Variables [Optional]
Docker
Applications running in a container require an additional environment variable. If your application is not running in a container, move to Step 4.
Add the following environment variable to your application:
MW_AGENT_SERVICE=<DOCKER_BRIDGE_GATEWAY_ADDRESS>
The DOCKER_BRIDGE_GATEWAY_ADDRESS
is the IP address of the gateway between the Docker host and bridge network. This is 172.17.0.1
by default. Learn more about Docker bridge networking here
Add the following command to your Dockerfile
after the pip install
command:
RUN middleware-bootstrap -a install
Kubernetes
Identify the namespace where the Infra Agent is running:
kubectl get service --all-namespaces | grep mw-service
Then add the following environment variable to your application deployment YAML file:
MW_AGENT_SERVICE=mw-service.mw-agent-ns.svc.cluster.local
Step 4: Capture Application Data
Step 4a: Setup middleware.ini
File
Create a middleware.ini
file based on the features you want to observe and place it at the root of your app directory. Specify the location of the middleware.ini
file with the MIDDLEWARE_CONFIG_FILE
environment variable.
service_name
and access_token
are required for the tracker to send data to Middleware.
[middleware.common] # The name of your application as service-name, as it will appear in the UI to filter out your data. service_name = {APM-SERVICE-NAME} # This Token binds the Python Agent's data and profiling data to your account. access_token = "<MW_API_KEY>" # The service name, where Infra Agent is running, in case of K8s. mw_agent_service = mw-service.mw-agent-ns.svc.cluster.local
Step 4b: Enable Custom Logs
To ingest custom logs, utilize the following functions based on desired log severity levels:
logging.info("info sample") logging.warning("Sample Warning Log") logging.error("Sample Error Log.", extra={'tester': 'Alex'})
Step 4c: Stack Errors
Use tracker.record_error()
method to record a stack trace when an error occurs:
try: not_possible = 12/0 except ZeroDivisionError as e: tracker.record_error(e)
Step 5: Deploy Your Django App [Optional]
If you are not using the Django framework in your Python application, proceed to Step 6.
Step 5a: Instrument Your App
Add the following to your main()
function in manage.py
:
tracker.django_instrument()
Step 5b: Start Your Django Project
Initialize your Django project with the following command:
DJANGO_SETTINGS_MODULE='mysite.settings' middleware-apm run python manage.py runserver
Step 5c: Start Your Django Project
After initializing your application, run the following command to start your project:
If the middleware.ini
file is not in your root directory, add MIDDLEWARE_CONFIG_FILE=./path/to/middleware.ini
to the below command
middleware-apm run python app.py
Step 6: Start Your Project
After deploying your application, run the following command to start your project:
middleware-apm run python app.py
Continuous Profiling
Continuous profiling captures real-time performance insights from your application to enable rapid identification of resource allocation, bottlenecks, and more. Navigate to the Continuous Profiling section to learn more about using Continuous Profiling with the Python APM.
Need assistance or want to learn more about Middleware? Contact our support team in Slack.