# Enable Prometheus metrics in Caddy The [Caddy webserver](https://caddyserver.com/) is a modern webserver written in Go. I like it because I can easily extend it by writing some middleware (in Go). One of the things missing is [metrics](https://github.com/mholt/caddy/issues/577), which prompted me to implement [enough metrics](https://github.com/miekg/caddy-prometheus/) to make me happy. Using this is relatively straight forward, but you'll need to compile Caddy yourself and add this middleware. ## Setup (Assuming you have Go installed), first get the goodies: Caddy: : `go get github.com/mholt/caddy` Caddyext: : This is needed to compile in the new middleware, `go get github.com/caddyserver/caddyext` Caddy-prometheus: : `go get github.com/miekg/caddy-prometheus` Then, with `caddyext` register the new middleware: ~~~ caddyext install prometheus:github.com/miekg/caddy-prometheus ~~~ Optionally you can check your middleware stack with `caddyext stack`, but be sure to move prometheus early in the stack: ~~~ caddyext move prometheus 0 ~~~ Now compile your new Caddy: ~~~ caddyext build ~~~ This should create a `customCaddy` binary which you can run. To enable metrics you'll need to add the directive `prometheus` to each host section that you'll want metrics for. The default address and path for the metrics's is `http://localhost:9180/metrics` Curling this should result in something like this: ~~~ text caddy_http_request_count_total{host="archive.miek.nl"} 1416 caddy_http_request_duration_seconds_bucket{host="archive.miek.nl",le="0.005"} 1338 caddy_http_request_duration_seconds_bucket{host="archive.miek.nl",le="0.01"} 1370 caddy_http_request_duration_seconds_bucket{host="archive.miek.nl",le="0.025"} 1396 caddy_http_request_duration_seconds_bucket{host="archive.miek.nl",le="0.05"} 1396 caddy_http_request_duration_seconds_bucket{host="archive.miek.nl",le="0.1"} 1396 ... ~~~ ## Grafana and Metrics Then if you are running [prometheus and grafana](https://miek.nl/2016/february/24/monitoring-with-ssh-and-prometheus/) you can the query and plot neat graphs. For instance plotting number of qps for `miek.nl`, can be done with `sum(rate(caddy_http_request_count_total{host=~"miek.nl"}[5m])) by (instance)`, which results on my (highly popular web site): {{
}} Some day I hope to hit 1 qps.