statsd-asgi

Export metrics about requests in your ASGI apps to statsd or Datadog


Keywords
asgi, statsd, datadog, starlette, fastapi
License
MIT
Install
pip install statsd-asgi==0.1.0b1

Documentation

statsd-asgi

An ASGI middleware to emit metrics to statsd for requests

Mostly designed to work with Datadog, but should work with any statsd metric

# Config

statsd_client: Pass along your own statsd client. Must implement increment and timing methods

statsd_options: Options to configure the datadog statsd client

service: Name of your service, prepended to all metrics. Defaults to asgi

logger: optional logger

# Metric naming pattern

{service_name}.path

i.e.

myservice.api.v1.foo

# TimingMiddleware

Emits timing metrics for each endpoint for requests. Will emit clock time and cpu time. ## Tags =======

type: wall or cpu, depending on time source

status_code: The status code of the http request

method: the http method (get, post, put, delete) # StatusCodeMetricsMiddleware =============================

Emits counter metrics for each endpoint ## Tags =======

status_code: The status code of the http request

method: the http method (get, post, put, delete)

Usage with FastAPI

This ASGI middleware should work with any Starlette app, but I work with FastAPI so that's the example I've got for you. PRs welcome for more examples

from fastapi import FastAPI

app = FastAPI()

from statsd_asgi import TimingMiddleware, StatusCodeMetricsMiddleware

from logging import getLogger

statsd*options = {'statsd*host': os.environ.get("STATSD_HOST"),

                                'statsd\_port': os.environ.get("STATSD\_PORT")

}

app.add*middleware(TimingMiddleware, service="testapi", statsd*options=statsd_options)

app.add*middleware(StatusCodeMetricsMiddleware, service="testapi", statsd*client=statsd_options)

@app.get("/api")

async def root():

        return {"message": "Hello World"}