PyMetrics is versatile metrics collection library for Python that encapsulates the collection of counters, gauges, histograms, and timers into a generic interface with pluggable publishers so that you can helpfully instrument your applications without suffering vendor lock.
Publishing metrics is a straightforward process involving two steps. First, configure your metrics and publisher(s):
METRICS_CONFIG = {
'version': 2,
'error_logger_name': 'pymetrics',
'publishers': [
{
'path': 'pymetrics.publishers.datadog.DogStatsdPublisher',
'kwargs': {
'host': 'localhost',
'port': 8135,
},
},
],
}
Then, use a pymetrics.recorders.base.MetricsRecorder
in your application to collect and publish:
from pymetrics.recorders.default import DefaultMetricsRecorder
metrics = DefaultMetricsRecorder(config=settings.METRICS_CONFIG)
metrics.counter('counter.name').increment()
metrics.gauge('gauge.name', tag_name1='tag_value1', tag_name2='tag_value2').set(12)
metrics.histogram('histogram.name').set(1730)
with metrics.timer('timer.name'):
do_something()
cumulative_timer = metrics.timer('cumulative_timer.name')
for item in items:
do_something_without_timing()
with cumulative_timer:
do_something_with_timing()
metrics.publish_all()
Provided publisher plugins include Statsd, Datadog, Python Logging, SQLite, and a null publisher. Writing your own is simple and we encourage you to share your work with the community by submitting a pull request.
PyMetrics is licensed under the Apache License, version 2.0.
PyMetrics is available in PyPi and can be installing directly via Pip or listed in setup.py
, requirements.txt
,
or Pipfile
:
pip install 'pymetrics~=1.0'
install_requires=[
...
'pymetrics~=1.0',
...
]
pymetrics~=1.0
pymetrics = {version="~=1.0"}
The complete PyMetrics documentation is available on Read the Docs!