monitoring.enabled the helmfile installs kube-prometheus-stack (Prometheus, Alertmanager, Grafana,
node-exporter, kube-state-metrics) and, with monitoring.logs, Loki and Alloy. Grafana is at
https://<domains.grafana>; the admin password is in monitoring/grafana-admin.
What is scraped
Who can reach it
NetworkPolicies inmonitoring (chart charts/network-policies) admit only Grafana, Prometheus,
Alertmanager and Alloy to the monitoring pods, the ingress controller to Grafana, and atoll-server to
Prometheus (billing). Loki runs without multi-tenancy (auth_enabled: false), which is fine only because
nothing outside the monitoring components can reach it; app and build pods are also stopped by their own
egress policies. Grafana is the one entry point, behind its admin login.
Billing data
Billing counts the CPU and memory running app pods request (their size, see Scaling) and reads bandwidth from Prometheus atATOLL_BILLING_PROMETHEUS_URL. Apps that
scale to zero are served through their w--<app> Service, which billing maps to the same project. Traefik labels its
metrics with the Kubernetes service of each app Ingress, for example:
service looks like atoll-apps-<project>--<module>-80@kubernetes. Web apps are served by atoll-server, which
reports their bytes itself.
App metrics
The panel’s Metrics tab (GET /api/projects/<project>/metrics?module=&preview=&range=1h|24h|7d|30d, members)
reads Prometheus at ATOLL_METRICS_PROMETHEUS_URL (unset: ATOLL_BILLING_PROMETHEUS_URL; neither: the tab says
metrics are unavailable). For module shop--api in atoll-apps, with a window W of the range’s step but at least 2m:
S matches the module’s Service, its wake Service (w--shop--api, while it scales to zero) and the custom-domain
Services leading to it, e.g. atoll-apps-(w--)?shop--api-[a-z0-9]+@kubernetes|atoll-domains-shop--domain-….
Traefik’s latency buckets are set finer than its defaults in values/traefik.yaml.gotmpl for useful percentiles.
Answers are cached on the server (15 seconds for the last hour, longer for longer ranges).
Logs
Alloy tails every pod through the Kubernetes API and ships to Loki with labelsnamespace, pod,
container and atoll_project (from the atoll.app/project label of app and build pods). In Grafana → Explore
→ Loki:
Alerts worth adding
kube-prometheus-stack ships general Kubernetes alerts. Add PrometheusRules for the platform:
Route Alertmanager to email or chat through
kube-prometheus-stack values (alertmanager.config) in your site
file’s release overrides.
Without the stack
Turningmonitoring.enabled off skips Prometheus, Grafana and Loki. metrics-server stays (HPAs need it), but
billing has no bandwidth source then.