Exposes applipy metrics in prometheus format
Project description
Applipy Prometheus Metrics
pip install applipy_prometheus
Exposes applipy metrics in prometheus format as an HTTP endpoint with path /metrics.
Usage
Add the applipy_prometheus.PrometheusModule to your application. Optionally,
define through which http server to expose the /metrics endpoint, if no name
is given it defaults to the anonymous server:
# dev.yaml
app:
name: demo
modules:
- applipy_prometheus.PrometheusModule
http.servers:
- name: internal
host: 0.0.0.0
port: 8080
prometheus.server_name: internal
To run this test just install applipy_prometheus and pyyaml and run the applipy application:
pip install applipy_prometheus pyyaml
python -m applipy
You can now query http://0.0.0.0:8080/metrics and you should see some metrics for that endpoint (you'll have to query it twice to see metrics).
This module uses
applipy_metrics's registry to
load the metrics and generate the Prometheus document.
Metrics Endpoint Wrapper
This library also comes with MetricsWrapper. It is an
applipy_http.EndpointWrapper
that can be bound to your APIs and will automatically measure the request time
and store it as a summary with name applipy_web_request_duration_seconds.
By default, the library will add the MetricsWrapper to the API that registers
the endpoint /metrics, named prometheus, and the anonymous API, the one
that is bound without named parameters. This functionalities can be disabled by
setting the configuration values prometheus.observe_prometheus_api and
prometheus.observe_anonymous_api to false.
A named API is one that is registered with named parameters like so:
bind(with_names(Api, 'api_name')).
The anonymous API has no named parameters and is usually registered like so:bind(Api).
You can also tell the module to add the MetricsWrapper to you named APIs by
setting the configuration value prometheus.api_names to a list containing the
names of you named APIs.
In the case your API is registered with multiple parameter names, the one that applies for the wrapper is the name for the
wrappersparameter.
The wrapper has
priority
100.
The metrics are tagged by default with:
method: HTTP request method (i.e.GET,POST, etc.)path: path of the endpoint handling the requestserver: name of the server handling the request (anonymous server is empty string)status: status code of the response
On top of that, a dictionary is added to the Context with the key
metrics.tags where you can add custom tags to the metric.
Example
Full prometheus module config
All keys and their default values:
prometheus:
server_name: null
observe_prometheus_api: true
observe_anonymous_api: true
api_names: []
Endpoint with custom metric tag
# myendpoint.py
from aiohttp import web
from applipy_http import Endpoint
class MyEndpoint(Endpoint):
async def get(self, req, ctx):
ctx['metrics.tags']['custom_tag'] = 'value'
return web.Response(body='Ok')
def path(self):
return '/'
Usage with anonymous API
# mymodule.py
from applipy import Module
from applipy_http import Api, HttpModule, Endpoint, PathFormatter
from applipy_inject import with_names
from applipy_prometheus import MetricsWrapper
from myendpoint import MyEndpoint
class MyModule(Module):
def configure(self, bind, register):
bind(Endpoint, MyEndpoint)
bind(PathFormatter)
bind(Api)
@classmethod
def depends_on(cls):
return HttpModule,
# dev.yaml
app:
name: test
modules: [mymodule.MyModule]
http.servers:
- host: 0.0.0.0
port: 8080
Usage with named API
# mymodule.py
from applipy import Module
from applipy_http import Api, HttpModule, Endpoint, PathFormatter
from applipy_inject import with_names
from applipy_prometheus import MetricsWrapper
from myendpoint import MyEndpoint
class MyModule(Module):
def configure(self, bind, register):
bind(Endpoint, MyEndpoint, name='myApi')
bind(PathFormatter, name='myApi')
bind(with_names(Api, 'myApi'))
@classmethod
def depends_on(cls):
return HttpModule,
# dev.yaml
app:
name: test
modules: [mymodule.MyModule]
http.servers:
- host: 0.0.0.0
port: 8080
prometheus:
api_names: [myApi]
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 applipy_prometheus-1.1.3.tar.gz.
File metadata
- Download URL: applipy_prometheus-1.1.3.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dcb515da361f595f7f38bb7e789e8813d79b23d4f18c9dfe97f6a9e06708030e
|
|
| MD5 |
621b5b3697e8860473b0d596051cfdef
|
|
| BLAKE2b-256 |
6e0b399cda2a25a61e94f8fa94e54814f7c33b6c10c302eec84685a0d28dfbb1
|
File details
Details for the file applipy_prometheus-1.1.3-py3-none-any.whl.
File metadata
- Download URL: applipy_prometheus-1.1.3-py3-none-any.whl
- Upload date:
- Size: 6.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f013d80a1bb1142e7b1a79d880c6107763990b5f64db3da63364a073d0eb3a8
|
|
| MD5 |
7b18a6a0ac46bd49c84ccb319d31a9b6
|
|
| BLAKE2b-256 |
ee362833deb04025079f920866eb89a48485297c0fb68526e5ff2bc1b7e5ebd9
|