FAQ
I’m using Nginx Proxy Manager (or another proxy-manager container). What
log path do I use?
Point ACCESS_LOG_DIR at the host directory where the proxy container
writes its access logs (for Nginx Proxy Manager this is usually its
data/logs volume), and set LOGPARSER_LOG_PATHS to the specific
access-log file(s) inside it, using the container path
(/var/log/access/...), not the host path. GeoMetrikks doesn’t tail NPM’s
own per-host logs. Set up the extra JSON log described under
Nginx Proxy Manager and point at that. import-logs
can backfill the old per-host logs.
Can I read logs from Loki instead of mounting files?
Yes, if Loki holds the raw access-log lines. Set LOKI_URL and
LOKI_QUERIES and remove LOGPARSER_LOG_PATHS from .env. See
Loki setup.
Permission denied reading my log files?
The app container runs as PUID:PGID (default 1000:1000), and log mounts
are read-only. Make the log files (and their parent directory) readable by
that uid/gid on the host with chmod, chown or an ACL entry. Read-only
mounts are intentional: GeoMetrikks never writes to your access logs.
Does this run on arm64?
Yes. The GHCR image is a multi-arch manifest for linux/amd64 and
linux/arm64.
The map is empty.
Check four things in order: (1) the geo-degraded banner; if it shows,
MaxMind credentials or the GeoLite2 database are missing; (2) that
a source is receiving traffic in a supported format (the nginx JSON
log_format above, the legacy nginx format, Traefik JSON, or Caddy JSON),
whether it is a file in LOGPARSER_LOG_PATHS or a selector in
LOKI_QUERIES (Nginx Proxy Manager’s own per-host logs are import-only
and never tailed); (3) that some time has passed since you last
restarted. The map only shows events ingested after startup unless you
have run a batch import. (4) that your proxy logs the visitor’s address,
not an upstream proxy or tunnel; Settings > Status shows an advisory when
it does not. See docs/proxy-setup.md.
The map says my browser could not start WebGL2. The map draws with WebGL2. The message adds the browser’s own reason when it gives one. The usual cause is graphics acceleration being off or blocked: turn hardware acceleration back on in the browser settings, or try another browser or device. The rest of the app works without it.
What does the “geo-degraded” banner mean?
The app started without a usable GeoLite2 database: either
MAXMINDDB_USER_ID/MAXMINDDB_LICENSE_KEY are not set, or the download
has not completed yet. The API and UI stay up, but log ingestion does not
start until a database is available. Add credentials and restart the app
container to clear it. The sidebar’s connection indicator also shows
“Degraded” while ingestion is stopped.