Skip to content

Instantly share code, notes, and snippets.

@plexus
Created July 16, 2026 15:51
Show Gist options
  • Select an option

  • Save plexus/40cf7bacb98c0707e084ebd0ed979e79 to your computer and use it in GitHub Desktop.

Select an option

Save plexus/40cf7bacb98c0707e084ebd0ed979e79 to your computer and use it in GitHub Desktop.
# Kula Configuration
# https://github.com/c0m4r/kula
# Note: some settings can be overridden by environment variables
# - KULA_DIRECTORY overrides storage.directory
# - KULA_LOGLEVEL overrides logging.level
# - KULA_LISTEN overrides web.listen
# - KULA_PORT overrides web.port
# - KULA_UNIX_SOCKET overrides web.unix_socket
# - KULA_MOUNTS_DETECTION overrides collection.mounts_detection
# - KULA_BASE_PATH overrides web.base_path
# Global settings
global:
# Overwrite reports hostname (default: system hostname)
hostname: ""
# Toggle display of OS, Kernel, and Architecture (default: true)
show_system_info: true
# Toggle display of Kula version (default: true)
show_version: true
# Default theme for the web UI: light, dark, or auto (default: auto)
default_theme: auto
# Show the Space Invaders easter egg button in the web UI (default: true)
easter_egg: true
# Data collection settings
collection:
# Allowed values: 1s, 2s, 5s, 10s, 15s, 30s
interval: 1s
# Control how mount points are detected. (default: auto)
# - auto: merges host and container mounts (detects namespaces)
# - host: reads only /proc/1/mounts (host-level visibility)
# - self: reads only /proc/self/mounts (container-level visibility)
mounts_detection: auto
# You can override the auto-detected list of disks and network interfaces by uncommenting and populating these lists:
# devices: ["sda", "nvme0n1"]
# mountpoints: ["/", "/mnt/data"]
# interfaces: ["eth0", "wlan0"]
# Storage settings (tiered ring-buffer)
storage:
# Insufficient permissions fallbacks to ~/.kula
directory: /app/data
tiers:
# Tier 1 (raw): must match collection.interval
- resolution: 1s
max_size: 250MB
# Tier 2: 1-minute aggregation (must be > tier 1 && < tier3)
- resolution: 1m
max_size: 150MB
# Tier 3: 5-minute aggregation (must be > tier2)
- resolution: 5m
max_size: 50MB
# Note: Changing default resolutions may result in unexpected behavior
# Too high tier 2 and 3 resolutions could also cause high memory usage
# and data loss on shutdown due to samples buffering
# Backup settings (snapshots of the storage tier files)
# Backups are written under <storage.directory>/backup, one timestamped
# sub-directory per run (e.g. /var/lib/kula/backup/20060102-150405/).
backup:
# Master switch for scheduled backups (default: false)
enabled: false
# When to run, as a standard 5-field crontab expression
# (minute hour day-of-month month day-of-week). Default: midnight.
cron: "0 0 * * *"
# How many tiers to back up, counting from the raw tier (default: 3).
# 1 = tier_0.dat only, 2 = tier_0 + tier_1, 3 = all three.
maxtier: 3
# How long to keep backups before pruning. Supports s, m, h, d.
# Empty disables pruning. Default: 1d.
retention: 1d
# Gzip each backed-up tier file to tier_N.dat.gz (default: true).
compress: true
# Web UI settings
web:
# Master switch for the web server (default: true)
# When false, the network listener is not opened at all.
enabled: true
# Toggle the Web UI/dashboard and its API (default: true)
# When false, only Prometheus metrics and health endpoints remain active.
ui: true
listen: "" # use [] brackets for IPv6 addresses, e.g. "[::1]"
port: 27960
# Mount Kula under a URL sub-path. Empty (default) serves at the root,
# preserving existing behavior. When set (e.g. "/kula"), every HTTP
# route — UI, API, WebSocket, /metrics, /health — is served under that
# prefix. Use this when hosting Kula behind a reverse proxy that forwards
# requests with the prefix intact (does NOT strip it).
# Can also be set via the KULA_BASE_PATH env var.
base_path: "/__kula"
# Listen on a Unix domain socket instead of a TCP port. When set, the TCP
# listener is NOT opened — useful behind a local reverse proxy (nginx).
# Must be an absolute path.
# unix_socket: /run/kula/kula.sock
# unix_socket_mode: "0660" # octal permissions for the socket file (default: 0660)
# Compress HTTP responses and WebSockets (default: true)
enable_compression: true
# Resource limits for WebSocket connections
# max_websocket_conns: Global limit (default: 100)
# max_websocket_conns_per_ip: Per-IP limit (default: 5)
max_websocket_conns: 100
max_websocket_conns_per_ip: 5
# Trust X-Forwarded-Proto headers from reverse proxies for the Secure cookie flag
trust_proxy: false
# HTTP security features. Defaults preserve the original strict behavior.
# Relax these to embed Kula in an <iframe> or access it from another origin.
security:
# Emit security response headers (CSP, X-Content-Type-Options,
# Referrer-Policy, Permissions-Policy, Strict-Transport-Security).
headers: true
# Prevent rendering Kula inside an <iframe>. When true: sends
# X-Frame-Options: DENY and the CSP frame-ancestors 'none' directive.
# Set to false to allow iframe embedding.
frame_protection: true
# Reject state-changing HTTP requests and WebSocket upgrades whose
# Origin/Referer does not match the request Host. Listed origins in
# allowed_origins are also accepted. Disable only if you protect the
# API some other way (e.g. CSRF tokens + token-auth headers).
origin_validation: true
# Allow cross-origin browser access from these exact origins.
# When non-empty:
# - CORS response headers are sent for matching origins
# - listed origins also pass origin_validation
# - session cookies switch to SameSite=None;Secure (requires HTTPS
# or trust_proxy + X-Forwarded-Proto: https)
# allowed_origins:
# - https://app.example.com
# - https://dashboard.example.com
# Join data points across gaps in the graphs (default: false)
# When false, gaps between measurements are displayed as empty space
join_metrics: false
# Default aggregation for historical data: avg, min, or max (default: max)
default_aggregation: max
# Language settings for the web dashboard
lang:
# Default language ISO code (default: en)
# Available ISO codes: ar, de, en, es, fr, hi, ja, ko, pl, pt, zh
default: en
# Force the default language and hide the language selector (default: false)
force: false
# Optional bounds limits for dynamic charts. "max_mode" can be:
# "off": Unrestricted, Chart.js auto-scales Y-axis by stream data peaks.
# "on": Imposes a hard Y-axis maximum matching "max_value".
# "auto": Tries to securely detect hardware constraints (e.g CPU TjMax or Net link speed). If failed, falls back to "max_value".
graphs:
cpu_temp:
max_mode: "off"
max_value: 100 # Celsius
disk_temp:
max_mode: "off"
max_value: 100 # Celsius
network:
max_mode: "off"
max_value: 1000 # Mbps (1 Gb/s)
# Split graphs into individual charts per device/interface (default: false).
# Can also be toggled per-chart from the dashboard using the split button (⊟).
split:
network: false # one chart per network interface
disk_io: false # one chart per disk device
disk_space: false # one chart per mount point
disk_temp: false # one chart per disk device (thermals section)
gpu: false # one chart per GPU
# Access and Performance Logging
# Access lines are tagged [API] for JSON/WebSocket endpoints and [WEB]
# for served UI content (HTML, JS, CSS, fonts, icons).
logging:
enabled: true
# "access" (request details)
# "perf" (adds DB fetch metrics)
# "debug" (i.e. collector auto-discovery)
level: "perf"
# Prometheus metrics endpoint (optional)
prometheus_metrics:
enabled: false
# The endpoint is unauthorized by default.
# You can optionally set a bearer token to secure it.
# Scrapers must send: Authorization: Bearer <token>
token: ""
# Authentication (optional)
auth:
enabled: false
username: admin
# Generate hash and salt with: ./kula hash-password
# Copy the output into the fields below:
password_hash: ""
password_salt: ""
session_timeout: 24h
argon2:
time: 3
memory: 32768 # double the OWASP minimum
threads: 4
# Additional users (optional). Each user uses the same argon2 parameters above.
# users:
# - username: user1
# password_hash: ""
# password_salt: ""
# - username: user2
# password_hash: ""
# password_salt: ""
# Application monitoring
# These modules appear under the "Applications" section in the dashboard.
# Each module is independently enabled/disabled.
applications:
# Nginx monitoring via the stub_status module
# Requires: nginx compiled with --with-http_stub_status_module
# Add to your nginx config:
# location /status { stub_status; allow 127.0.0.1; deny all; }
nginx:
enabled: false
status_url: "http://localhost/status"
# Apache2 monitoring via the mod_status module
# Requires: a2enmod status + httpd.conf:
# <Location /server-status>
# SetHandler server-status
# Require local
# </Location>
# ExtendedStatus On is recommended for full scoreboard detail.
apache2:
enabled: false
status_url: "http://localhost/server-status?auto"
# Container monitoring (Docker / Podman)
# Discovery modes (logged at startup):
# - "socket": uses the container runtime API for discovery + cgroups v2 for metrics
# - "cgroups": fallback when no socket is available (no container name mapping)
# The socket_path is auto-detected by default; set it explicitly if using a
# non-standard location or rootless Podman.
containers:
enabled: true
# socket_path: "/var/run/docker.sock"
# Filter by container name or ID prefix. Empty = monitor all running containers.
# containers: ["my-app", "postgres-db"]
# Custom metrics via Unix socket
# Define chart groups with metric names, units, and Y-axis maxima.
# Kula creates a Unix socket at <storage_dir>/kula.sock to receive data.
#
# Send data from any script or program:
# echo '{"custom":{"cpu_fans":[{"fan1":4423},{"fan2":8512}]}}' | socat - UNIX-CONNECT:/var/lib/kula/kula.sock
#
# Each group becomes a chart card. Each metric in the group becomes a line.
# custom:
# cpu_fans:
# - name: fan1
# unit: RPM
# max: 5000
# - name: fan2
# unit: RPM
# max: 10000
# room_temp:
# - name: ambient
# unit: °C
# max: 50
#
# How long a group keeps reporting its last values after its producer stops
# pushing. Once exceeded the feed is dropped so the chart shows a gap instead
# of a frozen line. Omit (or 0) to derive from collection.interval.
# custom_stale_after: 10s
# PostgreSQL monitoring
# Connects via lib/pq. Supports TCP and Unix socket.
# For Unix socket: set host to socket directory, port to 0.
#
# Quick setup — create a read-only monitoring user:
# sudo -u postgres psql
# CREATE ROLE kula_monitor WITH LOGIN PASSWORD 'changeme';
# GRANT pg_monitor TO kula_monitor;
# -- pg_monitor grants read access to pg_stat_*, pg_database_size, etc.
# -- No table-level permissions needed.
#
# pg_hba.conf — add before any "reject" rules:
# host postgres kula_monitor 127.0.0.1/32 scram-sha-256
#
# Then reload: sudo systemctl reload postgresql
postgres:
enabled: false
host: "localhost"
port: 5432
user: "kula_monitor"
password: ""
dbname: "postgres"
sslmode: "disable"
# MySQL / MariaDB monitoring
# Connects via go-sql-driver/mysql. Supports TCP and Unix socket.
# For Unix socket: set host to the socket path (e.g. /var/run/mysqld/mysqld.sock), port to 0.
#
# Quick setup — create a read-only monitoring user:
# sudo mysql
# CREATE USER 'kula_monitor'@'127.0.0.1' IDENTIFIED BY 'changeme';
# GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'kula_monitor'@'127.0.0.1';
# FLUSH PRIVILEGES;
#
# For full replication monitoring on MariaDB MySQL the
# privileges above are not enough — grant in addition:
# GRANT SLAVE MONITOR, BINLOG MONITOR, REPLICATION MASTER ADMIN
# ON *.* TO 'kula_monitor'@'127.0.0.1';
# SLAVE MONITOR is required for SHOW REPLICA STATUS (kula picks up
# io/sql thread state, seconds-behind, last errno, IO state from this).
# REPLICATION MASTER ADMIN is required for SHOW SLAVE HOSTS / SHOW REPLICAS
# (used for the "replicas connected" gauge). Without these grants the
# replication metrics quietly degrade to zero / sentinel values rather
# than failing the rest of the collector.
#
# Caveat on Seconds_Behind_Source: this is the SQL thread's view of how far
# behind it is on what it currently sees, NOT the true lag from the primary.
mysql:
enabled: false
host: "127.0.0.1"
port: 3306
user: "kula_monitor"
password: ""
# Database to connect to. Leave empty — SHOW GLOBAL STATUS and
# @@max_connections are server-wide and don't require a database.
dbname: ""
# TUI settings
tui:
refresh_rate: 1s
# Ollama AI analysis (optional)
# Requires Ollama running locally
# The AI button (🤖) appears in the web UI header when enabled.
ollama:
enabled: false
url: "http://localhost:11434"
model: "gemma4:e4b"
# Maximum time to wait for the model to finish streaming (default: 300s)
timeout: "300s"
[Unit]
Description=Kula - Lightweight Linux Server Monitor (Quadlet)
Documentation=https://github.com/c0m4r/kula
After=network-online.target
[Container]
# Container image
Image=docker.io/c0m4r/kula:latest
User=0
Network=host
Volume=kula_data:/app/data
Volume=/etc/kula/config.yaml:/etc/kula/config.yaml:ro,Z
# Collection
Volume=/proc:/proc:ro
Volume=/run/podman/podman.sock:/run/docker.sock:ro,Z
# Auto‑update: check for new images and restart the container
AutoUpdate=registry
Pull=newer
# Prevent the container from gaining new privileges
NoNewPrivileges=true
# Make the root filesystem read‑only; only the /app/data volume is writable
ReadOnly=true
# Provide a writable /tmp (in memory) for any temporary files the app may need
Tmpfs=/tmp:rw,size=64m
PodmanArgs=--pid=host
Exec=--config /etc/kula/config.yaml serve
Environment=KULA_LOGLEVEL=debug
[Service]
# Restart policy
Restart=on-failure
RestartSec=5s
# ---- Host‑side hardening for the systemd service that runs Podman ----
PrivateTmp=true
ProtectSystem=strict
NoNewPrivileges=true
# Paths Podman needs to be able to write to (container storage, locks, etc.)
ReadWritePaths=/var/lib/containers /run/containers /run/libpod /run/lock /run/crun /run/netns
[Install]
WantedBy=default.target
2026-07-16 15:47:54.5792443 +0000 UTC m=+1.280601301 container create 93cc00186748c26809382b1789aedbcf79734645f3907553d077362e118b355e (image=docker.io/c0m4r/kula:latest, name=systemd-kula, io.containers.autoupdate=registry, PODMAN_SYSTEMD_UNIT=kula.service)
2026-07-16 15:47:54.497323556 +0000 UTC m=+1.198680647 image pull 61eaf96858ee6f96f5c4b1a947edb80f7391cacaf381e32607c179ef99b7487c docker.io/c0m4r/kula:latest
2026-07-16 15:47:54.693958823 +0000 UTC m=+1.395315844 container init 93cc00186748c26809382b1789aedbcf79734645f3907553d077362e118b355e (image=docker.io/c0m4r/kula:latest, name=systemd-kula, PODMAN_SYSTEMD_UNIT=kula.service, io.containers.autoupdate=registry)
2026-07-16 15:47:54.702757728 +0000 UTC m=+1.404114739 container start 93cc00186748c26809382b1789aedbcf79734645f3907553d077362e118b355e (image=docker.io/c0m4r/kula:latest, name=systemd-kula, PODMAN_SYSTEMD_UNIT=kula.service, io.containers.autoupdate=registry)
Started kula.service - Kula - Lightweight Linux Server Monitor (Quadlet).
93cc00186748c26809382b1789aedbcf79734645f3907553d077362e118b355e
2026/07/16 15:47:54 Kula v0.18.6 starting...
2026/07/16 15:47:55 Landlock sandbox enforced (ABI v8, paths: /proc[ro] /sys[ro] /etc/kula/config.yaml[ro] /app/data[rw], net: bind TCP/27960, apps: [containers:rw(/var/run/docker.sock)])
2026/07/16 15:47:55 Kula v0.18.6 started (collecting every 1s)
2026/07/16 15:47:55 OS: Alpine Linux v3.24, Kernel: 7.0.0-27-generic, Arch: amd64
2026/07/16 15:47:55 [containers] discovered runtime socket: /var/run/docker.sock
2026/07/16 15:47:55 [containers] monitoring enabled (mode: socket)
2026/07/16 15:47:55 Web UI and API enabled
2026/07/16 15:47:55 Web routes mounted under base path "/__kula"
2026/07/16 15:47:55 Web UI listening on http://0.0.0.0:27960/__kula
2026/07/16 15:47:55 Web UI listening on http://[::]:27960/__kula
2026/07/16 15:47:55 net: skipping "lo" — loopback
2026/07/16 15:47:55 net: monitoring interface "eno1"
2026/07/16 15:47:55 net: monitoring interface "eno2"
2026/07/16 15:47:55 net: monitoring interface "podman0"
2026/07/16 15:47:55 net: skipping "veth0" — veth (container virtual interface)
2026/07/16 15:47:55 net: skipping "docker0" — docker bridge
2026/07/16 15:47:55 net: monitoring 3 interface(s)
2026/07/16 15:47:55 disk: skipping "loop0" — virtual device (loop device)
2026/07/16 15:47:55 disk: skipping "loop1" — virtual device (loop device)
2026/07/16 15:47:55 disk: skipping "loop2" — virtual device (loop device)
2026/07/16 15:47:55 disk: skipping "loop3" — virtual device (loop device)
2026/07/16 15:47:55 disk: skipping "loop4" — virtual device (loop device)
2026/07/16 15:47:55 disk: skipping "loop5" — virtual device (loop device)
2026/07/16 15:47:55 disk: skipping "loop6" — virtual device (loop device)
2026/07/16 15:47:55 disk: skipping "loop7" — virtual device (loop device)
2026/07/16 15:47:55 disk: monitoring device "sda"
2026/07/16 15:47:55 disk: skipping "sda1" — partition (auto-discovery mode; add to 'devices' config to include)
2026/07/16 15:47:55 disk: skipping "sda2" — partition (auto-discovery mode; add to 'devices' config to include)
2026/07/16 15:47:55 disk: skipping "sda3" — partition (auto-discovery mode; add to 'devices' config to include)
2026/07/16 15:47:55 disk: skipping "sda4" — partition (auto-discovery mode; add to 'devices' config to include)
2026/07/16 15:47:55 disk: monitoring 1 device(s)
2026/07/16 15:47:55 fs: skipping "tmpfs" at "/run" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: monitoring "/dev/sda3" at "/" (type=ext4)
2026/07/16 15:47:55 fs: skipping "devtmpfs" at "/dev" — filesystem type "devtmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "tmpfs" at "/dev/shm" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "devpts" at "/dev/pts" — filesystem type "devpts" not monitored
2026/07/16 15:47:55 fs: skipping "sysfs" at "/sys" — filesystem type "sysfs" not monitored
2026/07/16 15:47:55 fs: skipping "securityfs" at "/sys/kernel/security" — filesystem type "securityfs" not monitored
2026/07/16 15:47:55 fs: skipping "cgroup2" at "/sys/fs/cgroup" — filesystem type "cgroup2" not monitored
2026/07/16 15:47:55 fs: skipping "none" at "/sys/fs/pstore" — filesystem type "pstore" not monitored
2026/07/16 15:47:55 fs: skipping "bpf" at "/sys/fs/bpf" — filesystem type "bpf" not monitored
2026/07/16 15:47:55 fs: skipping "configfs" at "/sys/kernel/config" — filesystem type "configfs" not monitored
2026/07/16 15:47:55 fs: skipping "proc" at "/proc" — filesystem type "proc" not monitored
2026/07/16 15:47:55 fs: skipping "systemd-1" at "/proc/sys/fs/binfmt_misc" — filesystem type "autofs" not monitored
2026/07/16 15:47:55 fs: skipping "mqueue" at "/dev/mqueue" — filesystem type "mqueue" not monitored
2026/07/16 15:47:55 fs: skipping "tracefs" at "/sys/kernel/tracing" — filesystem type "tracefs" not monitored
2026/07/16 15:47:55 fs: skipping "debugfs" at "/sys/kernel/debug" — filesystem type "debugfs" not monitored
2026/07/16 15:47:55 fs: skipping "hugetlbfs" at "/dev/hugepages" — filesystem type "hugetlbfs" not monitored
2026/07/16 15:47:55 fs: skipping "none" at "/run/credentials/systemd-journald.service" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "fusectl" at "/sys/fs/fuse/connections" — filesystem type "fusectl" not monitored
2026/07/16 15:47:55 fs: skipping "none" at "/run/credentials/systemd-resolved.service" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/loop0" at "/snap/core24/1643" — filesystem type "squashfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/loop1" at "/snap/snapd/26865" — filesystem type "squashfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/sda2" at "/boot" — statfs error: no such file or directory
2026/07/16 15:47:55 fs: skipping "tmpfs" at "/tmp" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "binfmt_misc" at "/proc/sys/fs/binfmt_misc" — filesystem type "binfmt_misc" not monitored
2026/07/16 15:47:55 fs: skipping "none" at "/run/credentials/systemd-networkd.service" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "tmpfs" at "/run/snapd/ns" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "none" at "/run/credentials/getty@tty1.service" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "tmpfs" at "/run/user/1000" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "tmpfs" at "/run/netns" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/loop3" at "/snap/snapd/27406" — filesystem type "squashfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/sda3" at "/var/lib/containers/storage/overlay" — statfs error: no such file or directory
2026/07/16 15:47:55 fs: skipping "tmpfs" at "/run/user/999" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "none" at "/run/credentials/postgresql.service" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/loop4" at "/snap/core26/409" — filesystem type "squashfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/loop5" at "/snap/traefik/317" — filesystem type "squashfs" not monitored
2026/07/16 15:47:55 fs: skipping "/dev/loop6" at "/snap/traefik/321" — filesystem type "squashfs" not monitored
2026/07/16 15:47:55 fs: skipping "nsfs" at "/run/snapd/ns/traefik.mnt" — filesystem type "nsfs" not monitored
2026/07/16 15:47:55 fs: skipping "nsfs" at "/run/docker/netns/default" — filesystem type "nsfs" not monitored
2026/07/16 15:47:55 fs: skipping "none" at "/run/credentials/clojurians-log.service" — filesystem type "tmpfs" not monitored
2026/07/16 15:47:55 fs: monitoring 1 filesystem(s)
2026/07/16 15:47:55 [containers] discovered 3 containers via socket
2026/07/16 15:47:55 [containers] id=e502f96a60475f999b3f7b1e2cc9d67a80b84a39fa8ce512ca2d4034299134b4 name=systemd-postgresql cgroupDir=""
2026/07/16 15:47:55 [containers] id=1662145aa024bd8daa987bd096edbf6efc08dc885c34978d70966a62cda80bbf name=systemd-traefik cgroupDir=""
2026/07/16 15:47:55 [containers] id=93cc00186748c26809382b1789aedbcf79734645f3907553d077362e118b355e name=systemd-kula cgroupDir=""
2026/07/16 15:47:55 gpu: nvidia-smi not found in PATH
2026/07/16 15:47:55 gpu: scanning /sys/class/drm for GPUs
2026/07/16 15:47:55 gpu: registered GPU 0: "AST GPU 0" (driver: ast, pci: 0000:03:00.0, logfile: false)
2026/07/16 15:47:55 gpu: failed to open nvidia.log: open /app/data/nvidia.log: no such file or directory
2026/07/16 15:47:55 gpu[0]: collecting stats via sysfs
2026/07/16 15:47:55 gpu[0]: no metrics available, skipping
2026/07/16 15:47:56 [API History] loaded 335 samples from tier 0 (resolution: 7s) for window 39m6s in 697.739355ms
2026/07/16 15:47:57 [API] 127.0.0.1 GET /api/history 200 971.002822ms
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment