Python Agent FAQ
Heroku
Scout runs on Heroku without any special configuration. When Scout detects that an app is being served via Heroku:
- Logging is set to
STDOUT
vs. logging to a file. Log messages are prefixed with[Scout]
for easy filtering. - The dyno name (ex:
web.1
) is reported vs. the dyno hostname. Dyno hostnames are dynamically generated and don’t have any meaningful information.
Configuration
Scout can be configured via environment variables. This means you can use heroku config:set
to configure the agent. For example, you can set the application name that appears in the Scout UI with:
heroku config:set SCOUT_NAME='My Heroku App'
See the configuration section for more information on the available config settings and environment variable functionality.
Using the Scout Heroku Add-on
Scout is also available as a Heroku Add-on. The add-on automates setting the proper Heroku config variables during the provisioning process.
Adding the Database Addon
To get more insights into how your database is performing, check out our Database Addon.
Docker
Scout runs within Docker containers without any special configuration.
However, it may be easier to dockerize the core-agent. We suggest using our Docker image for this.
Transactions
What is a transaction
A transaction is anytime that you application handles a request or runs a background job. To get a better understanding of your transaction volume, visit your usage page for more info
Ignoring Transactions
Note: When a transaction is ignored, we will not collect metric data or traces for the request. When ignoring transactions and using sampling, data may be skewed and important traces may be missed.
If you don’t want to track the current web request or background job, at any point you can call ignore_transaction()
to ignore it:
import scout_apm.api
if is_health_check():
scout_apm.api.ignore_transaction()
You can use this whether the transaction was started from a built-in integration or custom instrumentation.
You can also ignore a set of URL path prefixes by configuring the ignore
setting:
Config.set(
ignore=["/health-check/", "/admin/"],
)
When specifying this as an environment variable, it should be a comma-separated list:
export SCOUT_IGNORE='/health-check/,/admin/'
Sampling
Use probability sampling to limit the number of web requests or background jobs Scout analyzes:
import random
import scout_apm.api
# Sample rate should range from 0-1:
# * 0: captures no requests
# * 0.9: captures 90% of requests
# * 1: captures all requests
def callback(sender, environ, **kwargs):
if random.uniform(0, 1) > 0.9:
scout_apm.api.ignore_transaction()