Alethurgy — Homelab Observability Stack

alethurgy (ἀληθουργία; uh-LEE-thur-jee, /əˈliːθɚdʒi/): the procedures by which what is hidden is brought to light. Not Authelia.

A self-hosted monitoring, logging, alerting, and visualization stack, deployed onto Proxmox VMs by one guided script. Built from widely-adopted open-source projects, pinned to current stable releases.

Architecture

flowchart TB
  subgraph metrics["aleth-metrics VM"]
    caddy[Caddy<br/>Let's Encrypt via<br/>Cloudflare DNS-01] --> grafana[Grafana<br/>+ dashboard library<br/>+ llm-app]
    prom[Prometheus<br/>90d retention] --> grafana
    prom --> am[Alertmanager]
    loki[Loki] --> grafana
    alloy[Alloy] --> loki
    bb[Blackbox<br/>ICMP/HTTP/DNS/cert] --> prom
    snmpx[snmp_exporter] --> prom
    kuma[Uptime Kuma]
    lnms[LibreNMS<br/>SNMP discovery]
    ntop[ntopng + netflow2ng]
    nr[Node-RED<br/>webhook bus]
    netdata[Netdata<br/>edge ML + MCP]
    pvex[pve_exporter] --> prom
  end
  subgraph logs["aleth-logs VM"]
    graylog[Graylog 7.1] --> os[OpenSearch]
    graylog --> mongo[MongoDB 7]
  end
  subgraph siem["aleth-siem VM"]
    wazuh[Wazuh 4.14<br/>manager+indexer+dashboard]
  end
  am -->|webhook| nr
  kuma -->|webhook| nr
  wazuh -->|syslog bridge| graylog
  devices[Firewall / switches / routers] -->|syslog 514| graylog
  devices -->|NetFlow 2055| ntop
  devices -->|SNMP v3| lnms
  nodes[Linux / Windows / Docker nodes] -->|node_exporter, cAdvisor| prom
  nodes -->|Wazuh agents| wazuh

Deployment phases

The deploy script follows the build order below; each phase is health-checked before the next starts.

  1. Foundation — Docker, shared network, Caddy reverse proxy (wildcard Let’s Encrypt cert via Cloudflare DNS-01, or internal CA), secrets in .env
  2. Metrics core — Prometheus, Grafana (+ preloaded dashboards), Alertmanager, exporters, baseline alert rules
  3. Availability — Uptime Kuma
  4. Logs — Loki + Alloy (app logs) and Graylog + OpenSearch + MongoDB (network/security syslog)
  5. Network — LibreNMS (SNMP), ntopng + netflow2ng (flows), blackbox ICMP latency history
  6. Security — Wazuh single-node
  7. Automation — Node-RED webhook bus, dedup flow
  8. LLM/MCP — grafana-llm-app, Grafana MCP, Netdata MCP
  9. Hardening/retention — backups, alert-noise review

Key design decisions

Decision Choice Why
Log stack Loki and Graylog Loki is cheap and Grafana-native for app logs; Graylog handles syslog inputs, streams, and correlation for network/security events
Latency history blackbox_exporter ICMP only One ping load, unified alerting; SmokePing would duplicate it
Log shipper Grafana Alloy Promtail hit EOL 2026-03-02
Topology Split 3 VMs (fallback: single) OpenSearch + Wazuh indexer each want 8–16 GB
NetFlow netflow2ng → ntopng nProbe requires a paid license; netflow2ng is the established free path
VM CPU type host MongoDB ≥5 requires AVX; Proxmox’s default kvm64 doesn’t expose it
TLS Let’s Encrypt wildcard via Cloudflare DNS-01 Real certs with no inbound exposure and no per-client CA trust; TLS_MODE=internal (Caddy private CA) remains available

Continue with Prerequisites.


This site uses Just the Docs, a documentation theme for Jekyll.