Observability Applications

This document covers the applications running in the observability namespace: metrics, logging, uptime monitoring, alert routing, and resource right-sizing.

Metrics are collected by Prometheus and surfaced in Grafana; container logs are shipped to VictoriaLogs; uptime is tracked by Gatus. Alerts fan out to the self-hosted ntfy server, with critical alerts additionally paged to Pushover.

Observability Flow

graph TD
    subgraph Metrics
        PROM[Prometheus]
        AM[Alertmanager]
        EXP[Exporters / blackbox]
    end
    subgraph Logs
        FB[fluent-bit]
        VL[VictoriaLogs]
    end
    subgraph Uptime
        GAT[Gatus]
    end
    subgraph Visualize
        GRAF[Grafana]
    end
    subgraph Notify
        NTFY[ntfy]
        PO[Pushover]
    end

    EXP --> PROM
    PROM --> AM
    PROM --> GRAF
    AM -->|all alerts| NTFY
    AM -->|severity=critical| PO
    FB --> VL --> GRAF
    GAT --> NTFY

Metrics and Visualization

kube-prometheus-stack

Namespace: observability Type: Helm Release Purpose: Core metrics platform — Prometheus, Alertmanager, node-exporter, kube-state-metrics

Configuration: kubernetes/apps/observability/kube-prometheus-stack/

The bundle deploys Prometheus (scraping and recording/alerting rules), Alertmanager (alert routing), node-exporter (per-node host metrics), and kube-state-metrics (Kubernetes object state). Additional scrape targets and Alertmanager routing live alongside the HelmRelease in scrapeconfig.yaml and alertmanagerconfig.yaml.

Alertmanager routing: the default receiver is ntfy; severity=critical alerts route to Pushover (a loud phone push) and continue through to ntfy as well, so criticals are still delivered if Pushover is rate-limited.

kubectl -n observability get prometheus,alertmanager
kubectl -n observability get pods -l app.kubernetes.io/name=prometheus

Grafana

Namespace: observability Type: Helm Release Purpose: Visualization layer for metrics and logs

Configuration: kubernetes/apps/observability/grafana/

Grafana is the dashboard front-end. Its provisioned datasources are Prometheus (prometheus-operated), VictoriaLogs (victoria-logs-server), and Alertmanager. Dashboards are provisioned declaratively, including via ConfigMaps discovered by the Grafana sidecar.

kubectl -n observability get pods -l app.kubernetes.io/name=grafana

Logging

VictoriaLogs

Namespace: observability Type: Helm Release Purpose: Log storage and query backend

Configuration: kubernetes/apps/observability/victoria-logs/

VictoriaLogs is the cluster's log store, exposed at victoria-logs-server.observability.svc.cluster.local:9428 and queried from Grafana via the VictoriaLogs datasource.

fluent-bit

Namespace: observability Type: Helm Release (DaemonSet) Purpose: Ships container logs into VictoriaLogs

Configuration: kubernetes/apps/observability/fluent-bit/

fluent-bit runs on every node, tails container logs, enriches them with Kubernetes metadata, and forwards them over HTTP to the VictoriaLogs server.

kubectl -n observability get pods -l app.kubernetes.io/name=fluent-bit

Uptime and Probing

Gatus

Namespace: observability Type: Helm Release (gatus-sidecar) Purpose: Uptime / status page

Configuration: kubernetes/apps/observability/gatus/

Gatus uses the gatus-sidecar model: endpoints are discovered automatically from HTTPRoute resources, with base probe configuration inherited from annotations on the parent Gateway (internal routes become DNS-only "guarded" checks; external/media routes become real HTTP 200 probes resolved via public DNS). Gatus alerts are delivered to ntfy. See the gatus-monitoring concept for how to add or tune a check.

kubectl -n observability get pods -l app.kubernetes.io/name=gatus

blackbox-exporter

Namespace: observability Type: Helm Release Purpose: Black-box probing of endpoints

Configuration: kubernetes/apps/observability/blackbox-exporter/

blackbox-exporter performs synthetic probes (HTTP, TCP, ICMP) against targets defined in probes.yaml, exposing the results to Prometheus.

Exporters

Namespace: observability Type: Helm Releases / DaemonSets Purpose: Assorted Prometheus exporters

Configuration: kubernetes/apps/observability/exporters/

Additional exporters feeding Prometheus:

  • dcgm-exporter — NVIDIA GPU metrics.
  • nut-exporter — UPS metrics from NUT.
  • snmp-exporter — SNMP metrics from network devices.

Alerting

alertmanager-ntfy

Namespace: observability Type: Helm Release Purpose: Bridges Alertmanager notifications to the self-hosted ntfy server

Configuration: kubernetes/apps/observability/alertmanager-ntfy/

alertmanager-ntfy receives Alertmanager webhook notifications and republishes them as ntfy messages, so Prometheus alerts land on the self-hosted ntfy server alongside Gatus uptime notifications.

silence-operator

Namespace: observability Type: Helm Release + Silence CRs Purpose: Declarative, GitOps-managed Alertmanager silences

Configuration: kubernetes/apps/observability/silence-operator/

The silence-operator reconciles Silence custom resources (silences/silences.yaml) into Alertmanager, so silences are version-controlled in Git rather than clicked into the UI.

Resource Right-Sizing

VPA and Goldilocks

Namespace: observability Type: Helm Releases Purpose: Vertical Pod Autoscaler with the Goldilocks recommendation dashboard

Configuration: kubernetes/apps/observability/vpa/, kubernetes/apps/observability/goldilocks/

The Vertical Pod Autoscaler computes recommended CPU/memory requests for workloads; Goldilocks presents those recommendations in a dashboard to guide right-sizing of resource requests.

kubectl -n observability get vpa -A

Status Reporting

kromgo

Namespace: observability Type: Helm Release Purpose: Exposes selected cluster metrics as safe public endpoints

Configuration: kubernetes/apps/observability/kromgo/

kromgo serves a curated allow-list of Prometheus queries as public, shareable endpoints — used to power the status badges in the repository README without exposing Prometheus itself.

peanut

Namespace: observability Type: Helm Release Purpose: NUT (UPS) monitoring dashboard

Configuration: kubernetes/apps/observability/peanut/

peanut provides a web dashboard for the UPS hardware monitored via NUT (battery charge, load, runtime), complementing the Prometheus nut-exporter metrics.

References

  • kube-prometheus-stack: kubernetes/apps/observability/kube-prometheus-stack/
  • Grafana: kubernetes/apps/observability/grafana/
  • VictoriaLogs / fluent-bit: kubernetes/apps/observability/victoria-logs/, kubernetes/apps/observability/fluent-bit/
  • Gatus: kubernetes/apps/observability/gatus/
  • ntfy (notification sink): kubernetes/apps/network/ntfy/