Skip to main content

Performance metrics for Pyramid using StatsD. The project aims at providing ways to instrument a Pyramid application in the least intrusive way.

Installation

Install using setuptools, e.g. (within a virtualenv):

$ pip install pyramid_metrics

Setup

Once pyramid_metrics is installed, you must use the config.include mechanism to include it into your Pyramid project’s configuration. In your Pyramid project’s __init__.py:

config = Configurator(.....)
config.include('pyramid_metrics')

Alternately you can use the pyramid.includes configuration value in your .ini file:

[app:myapp]
pyramid.includes = pyramid_metrics

Usage

Pyramid_metrics configuration (values are defaults):

[app:myapp]
metrics.host = localhost
metrics.port = 8125

metrics.prefix = application.stage

metrics.route_performance = true

Route performance

If enabled, the route performance feature will time the request processing. By using the StatsD Timer type metric, pre-aggregation will provide information on latency, rate and total number. The information is sent two times: per route and globally.

The key name is composed of the route name, the HTTP method and the outcome (as HTTP status code or ‘exc’ for exception).

  • Global key request.<HTTP_METHOD>.<STATUS_CODE_OR_EXC>

  • Per route key route.<ROUTE_NAME>.request.<HTTP_METHOD>.<STATUS_CODE_OR_EXC>

API

Counter

StatsD type: https://github.com/etsy/statsd/blob/master/docs/metric_types.md#counting

# Increment a counter named cache.hit by 1
request.metrics.incr('cache.hit')

# Increment by N
request.metrics.incr(('cache.hit.read.total', count=len(cacheresult)))

# Stat names can be composed from list or tuple
request.metrics.incr(('cache', cache_action))

Gauge

StatsD type: https://github.com/etsy/statsd/blob/master/docs/metric_types.md#gauges

# Set the number of SQL connections to 8
request.metrics.gauge('sql.connections', 8)

# Increase the value of the metrics by some amount
request.metrics.gauge('network.egress', 34118, delta=True)

Timer

StatsD type: https://github.com/etsy/statsd/blob/master/docs/metric_types.md#timing

# Simple timing
time_in_ms = requests.get('http://example.net').elapsed.microseconds/1000
request.metrics.timing('net.example.responsetime', time_in_ms)

# Using the time marker mechanism
request.metrics.marker_start('something_slow')
httpclient.get('http://example.net')
request.metrics.marker_stop('something_slow')

# Measure different outcome
request.metrics.marker_start('something_slow')
try:
    httpclient.get('http://example.net').raise_for_status()
except:
    # Send measure to key 'something_slow.error'
    request.metrics.marker_stop('something_slow', suffix='error')
else:
    # Send measure to key 'something_slow.ok'
    request.metrics.marker_stop('something_slow', suffix='ok')

# Using the context manager
with request.metrics.timer(['longprocess', processname]):
   run_longprocess(processname)
   # Send measure to 'longprocess.foobar' or 'longprocess.foobar.exc'

Currently implemented

  • Collection utility as a request method

  • Ability to send metrics per Pyramid route

  • Simple time marker mechanism

  • Simple counter

  • Context manager for Timing metric type

TODO

  • Full StatsD metric types

  • Extensions for automatic metrology (SQLAlchemy, MongoDB, Requests…)

  • Whitelist/blacklist of metrics

  • Time allocation per subsystem (using the time marker mechanism)

Considerations

  • The general error policy is: always failsafe. Pyramid_metrics should NEVER break your application.

  • The DNS resolution is done during configuration to avoid recurring latencies.

Development

Run tests

The tests are run by nose and all dependencies are in requirements-test.txt.

$ pip install -r requirements-test
...

$ nosetests
...

Run tests with tox

$ pip install tox
...

$ tox          # Run on python 2.7 and python 3.4
...

$ tox -e py34  # Run on python 3.4 only

Contributors

  • Pior Bastida (@pior)

  • Philippe Gauthier (@deuxpi)

  • Hadrien David (@hadrien)

  • Jay R. Wren (@jrwren)

Release files for pyramid_metrics 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyramid_metrics 0.3.1
File Size Uploaded
pyramid_metrics-0.3.1.tar.gz 10.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyramid_metrics 0.3.1
File Interpreter ABI Platform
pyramid_metrics-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 25.4 kB

Release files / pyramid_metrics-0.3.1.tar.gz

Download URL pyramid_metrics-0.3.1.tar.gz
Size 10.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2d6f89e49788c76ce351affd2974110ffe6138f78dc788c6755e2c27b9e7a6a5
BLAKE2b-256 checksum
How to use checksums
f7d4a81709341e8d9c36e40727f05d80b52dfc731430e132627d440d290989f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / pyramid_metrics-0.3.1-py3-none-any.whl

Download URL pyramid_metrics-0.3.1-py3-none-any.whl
Size 14.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
923426cfcd70eb3c4e7af690c5ac4d989fc33f2dd46b5ed2440924656e9814ec
BLAKE2b-256 checksum
How to use checksums
ade176492184d57c859b6ba18b334111ca55b48d36b60a8eae8f7afff928c29c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

1 release file

0.2.0

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page