Epsagon Instrumentation for Python
Project description
Epsagon Instrumentation for Python
This package provides an instrumentation to Python code running on functions for collection of distributed tracing and performance monitoring.
- Installation
- Usage
- Custom Data
- Frameworks Integration
- Copyright
Installation
From your project directory:
$ pip install epsagon
More details about lambda deployments are available in the AWS documentation.
Usage
AWS Lambda
Simply use our decorator to report metrics:
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False, # Optional, send more trace data
)
@epsagon.lambda_wrapper
def handler(event, context):
pass
Django Application
Add the following code to the settings.py file:
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False, # Optional, send more trace data
)
Add Epsagon middleware to the application's middleware list (located in settings.py)
MIDDLEWARE = [
'....',
'epsagon.wrappers.django.DjangoMiddleware',
]
Flask Application
Use the example snippet:
from flask import Flask
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False
)
app = Flask(__name__)
epsagon.flask_wrapper(app)
@app.route('/')
def hello():
return "Hello World!"
app.run()
Tornado Application
Use the example snippet:
import tornado.ioloop
import tornado.web
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False
)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('Hello, world')
def make_app():
return tornado.web.Application([
(r'/', MainHandler),
])
if __name__ == '__main__':
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
Generic Python
Use the example snippet:
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False
)
@epsagon.python_wrapper
def main():
return 'It worked!'
main()
Custom Data
Custom Labels
You can add custom labels to your traces. Filters can later be used for filtering traces that contains specific labels:
@epsagon.lambda_wrapper
def handler(event, context):
epsagon.label('label', 'something_to_filter_afterwards')
epsagon.label('number_of_records_parsed_successfully', 42)
pass
Custom Errors
Set a custom error, maybe without even failing the function:
@epsagon.lambda_wrapper
def handler(event, context):
if 'my_param' not in event:
epsagon.error(ValueError('event missing my_param'))
pass
Ignore keys
You can prevent data from being sent to epsagon by filtering specific keys in initialization.
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False,
keys_to_ignore=['Request Data', 'Status_Code']
)
Frameworks Integration
Serverless
Using Epsagon with Serverless is simple, by using the serverless-plugin-epsagon.
Chalice
Using Epsagon with Chalice is simple, follow this example:
from chalice import Chalice
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False
)
app = Chalice(app_name="hello-world")
@app.route("/")
def index():
return {"hello": "world"}
app = epsagon.chalice_wrapper(app)
or In S3 trigger example:
from chalice import Chalice
app = Chalice(app_name="helloworld")
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False
)
# Whenever an object is uploaded to 'mybucket'
# this lambda function will be invoked.
@epsagon.lambda_wrapper
@app.on_s3_event(bucket='mybucket')
def handler(event):
print("Object uploaded for bucket: %s, key: %s"
% (event.bucket, event.key))
Zappa
Using Epsagon with Zappa is simple, follow this example:
from flask import Flask
from zappa.handler import lambda_handler
import epsagon
epsagon.init(
token='my-secret-token',
app_name='my-app-name',
metadata_only=False
)
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
epsagon_handler = epsagon.lambda_wrapper(lambda_handler)
And in your zappa_settings.json file include the following:
{
"lambda_handler": "module.path_to.epsagon_handler"
}
Copyright
Provided under the MIT license. See LICENSE for details.
Copyright 2019, Epsagon.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file epsagon-1.14.6.tar.gz.
File metadata
- Download URL: epsagon-1.14.6.tar.gz
- Upload date:
- Size: 41.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c29dd1aaaf1d22a725c9c28ac2f6bdbc3d7403a5305c33083c2fbeffa91a685
|
|
| MD5 |
a60874dca4b597249c8f153ad93a561c
|
|
| BLAKE2b-256 |
e6b304be4f7eee93d28766ef552f3fb1133707b0a9d620f1878232564b405d45
|
File details
Details for the file epsagon-1.14.6-py3-none-any.whl.
File metadata
- Download URL: epsagon-1.14.6-py3-none-any.whl
- Upload date:
- Size: 64.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edcd8b5be84d1fc48d0172a57499e62b42c77f40a44ec19dbd11a2cd433a40ad
|
|
| MD5 |
967416adfdac09b5fb35895065b938e2
|
|
| BLAKE2b-256 |
91d315fcc53d567bbf29797f1edf5c4534b0e0bc017bff0d817608ad25dafe7c
|