Monitors
Web servers and reverse proxies
Traefik, Caddy, Nginx, Apache and Nginx Proxy Manager: backends, certificates and error rates.
Monitor descriptions and alert rule texts are in English, as in the product. The page labels follow your language.
The reverse proxy: routers disabled by a configuration error, backend servers failing their health check, certificates that never arrive or are not renewed, and the share of 5xx answers.
Examples
- Traefik in Docker
- Traefik on Kubernetes
- Traefik in front of self-hosted apps
What you need
- basicAuth userThe user of the basicAuth middleware in front of the API and the metrics.
No account needed.
Default port: 8080
Built-in alert rules 7
- AdvisoryTraefik router disabledA router is disabled by a configuration error (missing service or middleware, invalid rule): its sites are not served.
- AdvisoryTraefik backend server downA server of a load-balanced service fails its health check.
- WarningTraefik service without a serverNo server of a service answers its health check: its sites get 503.
- AdvisoryTraefik certificate not obtainedRouters ask a certificate resolver for a certificate that no certificate held by Traefik covers yet: Traefik serves its default self-signed certificate.
- AdvisoryProxy certificate not renewedA certificate Traefik holds or a Nginx Proxy Manager host presents expires in less than 14 days: automatic renewal starts at 30, so it is failing.
- AdvisoryReverse proxy answering 5xxMore than 5 % of the answers over ten minutes were 5xx, with at least fifty requests. Needs the proxy's metrics.
Show 1 more
- WarningMonitor unreachableNo measurement received for more than three minutes. bottomk by (target) (1, time() - tlast_over_time(dumbmonit_up[7d]))
Setup steps: Let DumbMonit read Traefik's API
Add these arguments to Traefik's command (or the same keys to its static configuration), then restart it.
--api.insecure=true
--metrics.prometheus=true
Open http://traefik.lan:8080/api/overview from the DumbMonit host: it must answer with JSON.
Optional: protect /api and /metrics with a basicAuth middleware on an entry point of your own, and create the user with htpasswd.
htpasswd -nbB dumbmonit 'a-long-password'
In DumbMonit, enter the Traefik host, for example traefik.lan, with the port of that entry point if it is not 8080.
Heads-up. Port 8080 answers without a password: filter it so that only the DumbMonit host reaches it.
Documentation
The web server and reverse proxy: upstreams failing their health checks, a configuration reload that failed, handler errors and the share of 5xx answers.
Examples
- Caddy in Docker
- Caddy as a reverse proxy
- Caddy on a Linux host
What you need
- Read-only viewThe user of the basic_auth block of the read-only view (recommended).
No account needed.
Default port: 2019
Built-in alert rules 4
- AdvisoryCaddy upstream unhealthyA backend fails Caddy's active or passive health check.
- AdvisoryCaddy configuration reload failedCaddy refused its last configuration reload and still runs the previous one.
- AdvisoryReverse proxy answering 5xxMore than 5 % of the answers over ten minutes were 5xx, with at least fifty requests. Needs the proxy's metrics.
- WarningMonitor unreachableNo measurement received for more than three minutes. bottomk by (target) (1, time() - tlast_over_time(dumbmonit_up[7d]))
Setup steps: Publish a read-only view of Caddy's admin API
Hash a password for the user dumbmonit.
caddy hash-password --plaintext 'a-long-password'
Add this site to the Caddyfile, put the hash in place of HASH, then reload Caddy.
:2020 {
basic_auth {
dumbmonit HASH
}
@readonly {
method GET
path /config/apps/http/servers /reverse_proxy/upstreams /metrics
}
handle @readonly {
reverse_proxy localhost:2019 {
header_up Host localhost:2019
}
}
respond 403
}
Optional: add metrics to the global options block at the top of the Caddyfile to count requests and errors.
metrics
Filter port 2020 so that only the DumbMonit host reaches it.
In DumbMonit, enter the Caddy host with that port, for example caddy.lan:2020, and the user dumbmonit with its password.
Heads-up. Never expose the admin API itself: whoever reaches port 2019 can replace the configuration or stop Caddy.
Documentation
The web server and reverse proxy: active and waiting connections, the accept/handled/request rates, and upstream health when the commercial NGINX Plus API is available.
Examples
- Nginx in Docker
- Nginx as a reverse proxy
- Nginx on a Linux host
What you need
- Basic authIf the status page sits behind a basic auth block or directive.
No account needed.
Default port: 80
Built-in alert rules 1
- WarningMonitor unreachableNo measurement received for more than three minutes. bottomk by (target) (1, time() - tlast_over_time(dumbmonit_up[7d]))
Setup steps: Enable Nginx's stub_status module
Add this location to the server block Nginx already serves, restricted to the DumbMonit host (adjust the address).
location /basic_status {
stub_status;
allow 10.0.0.5;
deny all;
}
Reload Nginx.
nginx -s reload
Open http://nginx.lan/basic_status from the DumbMonit host: it must show Active connections.
In DumbMonit, enter the Nginx host, for example nginx.lan, and the path if it is not /basic_status.
If NGINX Plus is installed, tick Read the NGINX Plus API to add upstream health and per-zone counters.
Heads-up. stub_status only counts connections and requests: a configuration error in a server block or an unreachable backend does not show there.
Documentation
The web server: busy and idle workers, the worker scoreboard by state, and request/byte rates when ExtendedStatus is on.
Examples
- Apache in Docker
- Apache on a Linux host
- A LAMP stack
What you need
- Basic authIf the status page sits behind a basic auth block or directive.
No account needed.
Default port: 80
Built-in alert rules 1
- WarningMonitor unreachableNo measurement received for more than three minutes. bottomk by (target) (1, time() - tlast_over_time(dumbmonit_up[7d]))
Setup steps: Enable Apache's mod_status
Enable mod_status (it ships with Apache and is usually on already).
a2enmod status
Add this location to the Apache configuration, restricted to the DumbMonit host (adjust the address).
<Location "/server-status">
SetHandler server-status
Require ip 10.0.0.5
</Location>
Optional: turn on the request and byte counters.
ExtendedStatus On
Reload Apache, then open http://apache.lan/server-status?auto from the DumbMonit host.
apachectl graceful
In DumbMonit, enter the Apache host, for example apache.lan, and the path if it is not /server-status.
Heads-up. Without ExtendedStatus, requests and bytes are not reported at all: the chart stays empty rather than flat.
Documentation
The proxy manager: hosts nginx refused to load, disabled hosts, and the certificates the hosts present, before Let's Encrypt renewal failures turn into expired sites.
Examples
- Nginx Proxy Manager in Docker
- NPM in front of self-hosted apps
What you need
- User email and passwordA user of its own, allowed to view the hosts and nothing else.
Default port: 81
Built-in alert rules 3
- AdvisoryNginx Proxy Manager host offlinenginx refused an enabled host's configuration: the host is not served.
- AdvisoryProxy certificate not renewedA certificate Traefik holds or a Nginx Proxy Manager host presents expires in less than 14 days: automatic renewal starts at 30, so it is failing.
- WarningMonitor unreachableNo measurement received for more than three minutes. bottomk by (target) (1, time() - tlast_over_time(dumbmonit_up[7d]))
Setup steps: Create a view-only Nginx Proxy Manager user
In Nginx Proxy Manager, open Users → Add User, give it an email of its own such as dumbmonit@example.com, and leave every role unticked.
From that user's menu, open Permissions and set the levels listed below.
From the same menu, choose Change Password and set a password.
In DumbMonit, enter the Nginx Proxy Manager host with its web port, for example npm.lan:81, and that email and password.
Heads-up. Leave SSL Certificates on Hidden: Nginx Proxy Manager hands private keys to any user allowed to view them.
Documentation