EVE Runtime Configuration Properties

The single source of truth for these runtime configuration properties is NewConfigItemSpecMap() in pkg/pillar/types/global.go. This document mirrors the key names, types, defaults, and ranges defined there.

Name Type Default Min Value Max Value Description
app.allow.vnc boolean false - - allow access to EVE's VNC ports from external IPs
app.boot.order string "" - - Set device-wide default boot order for VMs. Supported values: "" (default UEFI behavior), "usb" (prioritize USB devices), "nousb" (remove USB devices from boot order). Can be overridden per-VM via Controller API (VmConfig.boot_order) or LPS (/api/v1/appbootinfo). See VM-BOOT-ORDER.md for details.
app.fml.resolution string "" - - Set system-wide value of forced resolution for applications running in FML mode, it can be one of predefined FmlResolution* values.
timer.config.interval integer in seconds 60 (1 minute) 5 86400 (1 day) how frequently device gets config (needs a reboot to take effect)
timer.cert.interval integer in seconds 86400 (1 day) 60 (1 minute) 4294967295 (max uint32) how frequently device checks for new controller certificates
timer.metric.interval integer in seconds 60 (1 minute) 5 3600 (1 hour) how frequently device reports metrics
timer.hardwarehealth.interval integer in seconds 43200 (12 hours) 21600 (6 hours) 4294967295 (max uint32) how frequently device reports hardware health information (ECC, SMART) to controller
timer.deviceinfo.interval integer in seconds 600 (10 minutes) 30 4294967295 (max uint32) how frequently device is forced to report device info to controller even though nothing changed (needs a reboot to take effect)
timer.metric.diskscan.interval integer in seconds 300 (5 minutes) 5 3600 (1 hour) how frequently device should scan the disk for metrics
timer.location.cloud.interval integer in seconds 3600 (1 hour) 300 (5 minutes) 4294967295 (max uint32) how frequently device reports geographic location information to controller
timer.location.app.interval integer in seconds 20 5 3600 (1 hour) how frequently device reports geographic location information to applications (to local profile server and to other apps via metadata server)
timer.ntpsources.interval integer in seconds 600 (10 minutes) 60 (1 minute) 4294967295 (max uint32) how frequently device forcibly reports information about NTP sources to which EVE has established a connection for the NTP synchronization. Requests are also sent to the controller if the list of NTP peers or NTP peer fields, such as mode, state, have changed. (doesn't need a reboot to take effect)
timer.send.timeout timer in seconds 120 (2 minutes) 0 3600 (1 hour) time for each http/send
timer.dial.timeout timer in seconds 10 0 3600 (1 hour) maximum time allowed to establish connection
timer.reboot.no.network integer in seconds 604800 (7 days) 120 (2 minutes) 4294967295 (max uint32) reboot after no cloud connectivity
timer.update.fallback.no.network integer in seconds 300 (5 minutes) 60 (1 minute) 4294967295 (max uint32) fallback after no cloud connectivity
timer.test.baseimage.update integer in seconds 600 (10 minutes) 30 3600 (1 hour) commit to update
timer.gc.vdisk integer in seconds 3600 (1 hour) 60 (1 minute) 4294967295 (max uint32) garbage collect unused instance virtual disk
timer.defer.content.delete integer in seconds 0 0 86400 (1 day) if set, keep content trees around for reuse after they have been deleted
timer.download.retry integer in seconds 600 (10 minutes) 60 (1 minute) 4294967295 (max uint32) retry a failed download
timer.download.stalled integer in seconds 600 (10 minutes) 20 4294967295 (max uint32) cancel a stalled download
timer.boot.retry integer in seconds 600 (10 minutes) 10 4294967295 (max uint32) retry a failed domain boot
timer.port.georedo integer in seconds 3600 (1 hour) 60 (1 minute) 4294967295 (max uint32) redo IP geolocation
timer.port.georetry integer in seconds 600 (10 minutes) 5 4294967295 (max uint32) retry geolocation after failure
timer.port.testduration integer in seconds 30 10 3600 (1 hour) wait for DHCP to give address
timer.port.testinterval timer in seconds 300 (5 minutes) 300 (5 minutes) 3600 (1 hour) retest the current port config
timer.port.timeout timer in seconds 15 0 3600 (1 hour) time for each http/send
timer.port.testbetterinterval timer in seconds 600 (10 minutes) 0 4294967295 retry the highest-priority port configuration when the current port configuration is a lower-priority fallback
network.fallback.any.eth "enabled" or "disabled" disabled - - if no connectivity try any Ethernet, WiFi, or LTE with DHCP client (enabled forcefully during onboarding if no network config)
network.download.max.cost 0-255 0 0 255 max port cost for download to avoid e.g., LTE ports
blob.download.max.retries 1-10 5 1 10 max download retries when image verification fails.
debug.disable.dhcp.all-ones.netmask boolean false - - deprecated; retained only to avoid reporting errors for older deployments where this option is still configured
debug.enable.usb boolean true - - allow USB e.g. keyboards on device (controller by default overrides to false)
debug.enable.vga boolean true - - allow VGA console on device (controller by default overrides to false)
debug.enable.ssh authorized ssh key "" - - allow ssh to EVE; empty string disables SSH
debug.enable.console boolean true - - allow console access to EVE, reboot required to disable (controller by default overrides to false)
debug.enable.vnc.shim.vm boolean false - - allow VNC access to the container application shim VM (reboot required to disable)
datastore.http.security.allowinsecureauth boolean false - - allow sending authorization header over unencrypted http connection
storage.dom0.disk.minusage.percent integer percent 20 20 80 min. percent of persist partition reserved for dom0
storage.dom0.disk.maxusagebytes integer bytes 2147483648 104857600 4294967295 (max uint32) max bytes of persist partition that can be used by dom0
storage.zfs.reserved.percent integer percent 20 1 99 min. percent of persist partition reserved for zfs performance
storage.longhorn.disk.reserved.gigabytes integer GB 2 0 1048576 per-disk storage reserved by Longhorn on the local node; overrides Longhorn's default 25% reservation. 0 sets storageReserved to 0 bytes (no reservation). 1048576 disables EVE's override, leaving Longhorn's current value in place
storage.longhorn.snapshot.cron cron string 0 0 * * * - - cron schedule for Longhorn recurring snapshots; empty string disables. Snapshots bound delta rebuilds after node power loss to writes since the last snapshot. Default daily at midnight UTC. Standard 5-field cron syntax. EVE-k only.
storage.apps.ignore.disk.check boolean false - - Ignore disk usage check for Apps. Allows apps to create images bigger than available disk
timer.appcontainer.stats.interval integer in seconds 300 (5 minutes) 1 4294967295 (max uint32) collect application container stats
timer.vault.ready.cutoff integer in seconds 300 (5 minutes) 60 (1 minute) 4294967295 (max uint32) reboot after inaccessible vault
maintenance.mode "enabled" or "disabled" none - - don't run applications etc
airgap.mode "enabled" or "disabled" none - - Enable when the device is expected to operate without connectivity to the main controller and is instead managed locally via the LOC (Local Operator Console)
force.fallback.counter integer 0 0 4294967295 (max uint32) forces fallback to other image if counter is changed
newlog.allow.fastupload boolean false - - allow faster upload gzip logfiles to controller
memory.apps.ignore.check boolean false - - Ignore memory usage check for Apps
memory.eve.limit.bytes integer bytes base.ClampToUint32(eveMemoryLimitInBytes) base.ClampToUint32(eveMemoryLimitInBytes) 4294967295 (max uint32) deprecated; use memory.eve.limit.MiB instead. This legacy value is limited to 4GB and still has higher priority for backward compatibility
memory.eve.limit.MiB integer MiB eveMemoryLimitInMiB eveMemoryLimitInMiB 4294967295 (max uint32) memory limit reserved for EVE in MiB, rounded up from the detected byte limit
memory.vmm.limit.MiB integer 0 0 1073741824 (1 PiB) Manually override how much overhead is allocated for each running VMM
gogc.memory.limit.bytes integer 0 0 4294967295 (max uint32) Golang runtime soft memory limit, see details in API doc ["https://pkg.go.dev/runtime/debug#SetMemoryLimit"]
gogc.percent integer 100 0 500 Golang runtime garbage collector target percentage, see details in API doc ["https://pkg.go.dev/runtime/debug#SetGCPercent"]
gogc.forced.interval.seconds integer in seconds 10 0 1000 minimum interval of forced execution of the GC. Forced GC is disabled when interval is set to 0
gogc.forced.growth.memory.MiB integer in Mbytes 50 10 1024 minimum allocated memory in MiB required for the next GC execution
gogc.forced.growth.memory.percent integer 20 5 300 minimum allocated memory percentage from last reclaim required for the next GC execution
newlog.gzipfiles.ondisk.maxmegabytes integer in Mbytes 2048 10 4294967295 (max uint32) the quota for keepig newlog gzip files on device
process.cloud-init.multipart boolean false - - help VMs which do not handle mime multi-part themselves
netdump.enable boolean true - - enable publishing of network diagnostics (as tgz archives to /persist/netdump)
netdump.topic.preonboard.interval integer in seconds 3600 (1 hour) 60 (1 minute) 4294967295 (max uint32) how frequently (in seconds) can be netdumps of the same topic published while device is not yet onboarded
netdump.topic.postonboard.interval integer in seconds 86400 (1 day) 60 (1 minute) 4294967295 (max uint32) how frequently (in seconds) can be netdumps of the same topic published after device has been onboarded
netdump.topic.maxcount integer 10 1 4294967295 (max uint32) maximum number of netdumps that can be published for each topic. The oldest netdump is unpublished should a new netdump exceed the limit.
netdump.downloader.with.pcap boolean false - - include packet captures inside netdumps for download requests. However, even if enabled, TCP segments carrying non-empty payload (i.e. content which is being downloaded) are excluded and the overall PCAP size is limited to 64MB.
netdump.downloader.http.with.fieldvalue boolean false - - include HTTP header field values in captured network traces for download requests (beware: may contain secrets, such as datastore credentials).
network.switch.enable.arpsnoop boolean true - - enable ARP Snooping on switch Network Instances
wwan.query.visible.providers bool false - - enable to periodically (once per hour) query the set of visible cellular service providers and publish them under WirelessStatus (for every modem)
network.local.legacy.mac.address bool false - - enables legacy MAC address generation for local network instances for those EVE nodes where changing MAC addresses in applications will lead to incorrect network configuration
goroutine.leak.detection.threshold integer 5000 1 4294967295 (max uint32) Amount of goroutines, reaching which will trigger leak detection regardless of growth rate.
goroutine.leak.detection.check.interval.minutes integer (minutes) 1 1 4294967295 (max uint32) Interval in minutes between the measurements of the goroutine count.
goroutine.leak.detection.check.window.minutes integer (minutes) 10 10 4294967295 (max uint32) Interval in minutes for which the leak analysis is performed. It should contain at least 10 measurements, so no less than 10 × goroutine.leak.detection.check.interval.minutes.
goroutine.leak.detection.keep.stats.hours integer (hours) 24 1 4294967295 (max uint32) Amount of hours to keep the stats for leak detection. We keep more stats than the check window to be able to react to settings with a bigger check window via configuration.
goroutine.leak.detection.cooldown.minutes integer (minutes) 5 1 4294967295 (max uint32) Cooldown period in minutes after the leak detection is triggered. During this period, no stack traces are collected; only warning messages are logged.
kubernetes.drain.timeout integer 24 1 4294967295 (max uint32) hours to allow kubernetes to drain a node
drain.skip.k8sapinotreachable.timeout integer in seconds 300 (5 minutes) 1 4294967295 (max uint32) how long the drain request handler retries the Kubernetes API before declaring the node unavailable and continuing device operations
kubernetes.drain.allnodes.config.multiple integer 2 1 1000 multiplier applied to timer.config.interval to derive the cluster-wide simultaneous-drain detection window; increase if nodes fetch config at widely staggered intervals
k3s.config.override string "" - - Base64-encoded K3s config override. Config merge behavior follows K3s config file rules.
k3s.version string "" - - User override for K3s version; takes priority over the EVE-OS baseos-defined K3s version.
kubernetes.vmi.deschedule.events string "" - - Comma-separated list of events that trigger VMI descheduling. Currently only boot is supported. When empty (default), no event-driven descheduling is performed.
memory-monitor.enabled boolean false - - Enable external memory monitoring and memory pressure events handling
internal-memory-monitor.store.enabled boolean true - - Enable Internal Memory Monitor (IMM) data collection and CSV storage. When enabled, the watcher service collects memory metrics (Go heap and RSS) at regular intervals and stores them in /persist/memory-monitor/output/memory_usage.csv for analysis and debugging of potential memory leaks
internal-memory-monitor.analyze.enabled boolean true - - Enable Internal Memory Monitor (IMM) leak detection analysis. When enabled, IMM analyzes collected memory metrics using statistical methods (Theil-Sen slope, Pearson/Spearman correlation) to detect memory growth patterns and compute leak scores. Requires internal-memory-monitor.store.enabled to be true
log.dedup.window.size integer 0 0 4294967295 (max uint32) The size of the log deduplicator's sliding window (in number of messages). See logging docs for details. If the window size is set to 0 (default), no deduplication is performed.
log.count.filenames string "" - - Comma-separated list of log's filenames to be counted and logged once instead of logging them every time. Example /my-pkg/main.go:123,/other-pkg/code.go:42. Empty string "" doesn't filter anything out, however a single comma "," will filter out all entries that don't have a filename field set (e.g. logs not coming from components written in Golang). See logging docs for details.
log.filter.filenames string "" - - Comma-separated list of log's filenames to be filtered out. Example /my-pkg/main.go:123,/other-pkg/code.go:42. Empty string "" doesn't filter anything out, however a single comma "," will filter out all entries that don't have a filename field set (e.g. logs not coming from components written in Golang). See logging docs for details.
vector.enabled boolean true - - Enable Vector service for advanced log filtering and transformations.
vector.config string "" - - Full base64-encoded configuration file for Vector in YAML format. See the default config for examples. Please only change the transforms and don't touch the sources and sinks.
msrv.prometheus.metrics.rps integer 1 1 4294967295 (max uint32) The maximum number of requests per second (RPS) for the Prometheus metrics endpoint.
msrv.prometheus.metrics.burst integer 10 1 4294967295 (max uint32) The maximum burst size for the Prometheus metrics endpoint.
msrv.prometheus.metrics.idletimeout.seconds integer 240 (4 minutes) 1 4294967295 (max uint32) The idle timeout in seconds for the Prometheus metrics endpoint. If the connection is idle for this duration, the limit is reset.
edgeview.authen.publickey string "" - - Specifies SSH public keys for Edgeview client command authentication. The user must provide the path to the SSH private key in the client script, and the device verifies the command using one of the configured public keys. Separate multiple public keys with newline characters.
wwan.modem.recovery.watchdog boolean false - - Enable watchdog for cellular modems. If a modem firmware crashes and fails to recover, the device will automatically reboot.
wwan.modem.recovery.reload.drivers boolean false - - If a modem firmware crashes and fails to recover, EVE will attempt to reload the MBIM/QMI/MHI drivers as a recovery step. This occurs before the watchdog mechanism is triggered (if enabled).
wwan.modem.recovery.restart.modemmanager boolean false - - If a modem firmware crash occurs and ModemManager fails to properly recognize or manage the restarted modem, EVE will attempt to restart ModemManager as a recovery step. This occurs before the watchdog mechanism is triggered (if enabled) and can be combined with driver reload recovery mechanism.
diag.probe.remote.http.endpoint string www.google.com - - Remote endpoint hostname or IP address queried over HTTP to assess the state of network connectivity whenever the controller is not reachable. Used only for diagnostics (no functional impact). Set to an empty string to disable.
diag.probe.remote.https.endpoint string www.google.com - - Remote endpoint hostname queried over HTTPS to assess the state of network connectivity whenever the controller is not reachable. IP addresses are not accepted. Used only for diagnostics (no functional impact). Set to an empty string to disable.
app.enable.tcp.mss.clamping bool true - - Configuration property that enables EVE to automatically adjust (clamp) the TCP MSS on forwarded application traffic to match the path MTU, preventing fragmentation and connectivity issues on lower-MTU links.
scep.retry.interval timer in seconds 300 (5 minutes) 60 (1 minute) 3600 (1 hour) Interval between retry attempts for certificates that previously failed to enroll/renew or returned PENDING from the SCEP server.
pnac.dhcp.reacquire.max.retries integer 4 0 8 Maximum number of DHCP reacquire retries after a PNAC (802.1X) port authentication state change. When the network switch reassigns the port to a different access VLAN, EVE retries with exponential backoff (2s, 4s, 8s, ...) until the IP subnet changes or the retry limit is reached. Setting this value to 0 disables DHCP reacquire.
dhcp.enable.vendorclassid bool true - - Enables sending the DHCP Vendor Class Identifier (Option 60) to identify the device as EVE OS. This allows networks or DHCP servers to apply policies such as VLAN assignment or granting access to the EVE controller. Some badly configured DHCP servers may reject unknown vendor class IDs. Setting this to false disables sending the vendor class ID.
igpu.gop string "" - - Filename (basename only) of a proprietary Intel GOP Option ROM placed under /persist/gop/. Used for Intel iGPU passthrough to provide a pre-OS UEFI framebuffer. Empty (default) or a missing file falls back to the bundled open-source igd.rom (IgdAssignmentDxe only — OS display works but no pre-OS framebuffer). Path separators, .., and absolute paths are rejected to prevent directory traversal. See INTEL-IGPU-PASSTHROUGH.md for details.
debug.enable.efi boolean false - - When true, attaches an isa-debugcon device at I/O port 0x402 to each KVM guest, writing OVMF/EDK2 DEBUG() output to /run/hypervisor/kvm/<domain>/efi-debug.log. Only produces useful output with a TARGET=DEBUG OVMF build (default is TARGET=RELEASE which compiles DEBUG() macros out). Primary diagnostic for iGPU passthrough GOP failures.

Local Profile Server (LPS) intervals

Name Type Default Min Value Max Value Description
timer.lps.profile.interval integer in seconds 60 (1 minute) 3 3600 (1 hour) how frequently EVE fetches the local profile from the Local Profile Server (LPS)
timer.lps.radio.interval integer in seconds 5 3 3600 (1 hour) how frequently EVE POSTs radio status to LPS and fetches radio silence configuration
timer.lps.appinfo.interval integer in seconds 60 (1 minute) 3 3600 (1 hour) how frequently EVE POSTs application info to LPS and fetches application commands
timer.lps.devinfo.interval integer in seconds 60 (1 minute) 3 3600 (1 hour) how frequently EVE POSTs device info to LPS and fetches device commands
timer.lps.network.interval integer in seconds 60 (1 minute) 3 3600 (1 hour) how frequently EVE POSTs network configuration to LPS and fetches locally-made network configuration
timer.lps.appbootinfo.interval integer in seconds 60 (1 minute) 3 3600 (1 hour) how frequently EVE POSTs application boot info to LPS and fetches boot configuration

Note: when an LPS endpoint responds with HTTP 404 (the endpoint is not implemented by the deployed LPS application), EVE overrides the configured interval with a longer backoff — 1 hour for most endpoints, 5 minutes for the radio endpoint — to avoid unnecessary traffic. The configured interval resumes automatically if the LPS address changes or if LPS starts implementing the endpoint.

Log levels

Log level can be set for four different components of EVE: EVE microservices, syslog, kernel, and TUI monitor application. Logs for TUI monitor are not sent to the controller and only available locally on the device. The log levels set this way are used to control the verbosity of the logs produced by the corresponding components. All logs produced this way will be saved locally in /persist/newlog/keepSentQueue/ directory and will be subject to rotation based on the max total size of stored logs.

Due to implementation specifics, there are two different sets of log levels that can be set: logrus and syslog levels. Logrus levels are used by the EVE microservices, while syslog levels are used by syslog and kernel.

  • the logrus levels are as follows: panic, fatal, error, warning, info, debug, and trace ["https://pkg.go.dev/github.com/sirupsen/logrus"].
  • the syslog levels are as follows: emerg, alert, crit, err, warning, notice, info, debug ["https://man7.org/linux/man-pages/man3/syslog.3.html"].

Additionally all log levels can be set to "none" to disable logging for the corresponding component or to "all" to enable all log levels.

Furthermore, the "remote" log levels control which subset of the generated logs are sent to the controller. A corresponding "remote" log level can be set for each of the three components: EVE microservices, syslog, and kernel.

Name Type Default Description
debug.default.loglevel string info default level of logs produced by EVE microservices. Can be overwritten by agent.agentname.debug.loglevel. Uses logrus log levels as described here ["https://pkg.go.dev/github.com/sirupsen/logrus"]: panic, fatal, error, warning, info, debug and trace.
debug.default.remote.loglevel string info default level of logs sent by EVE microservices to the controller. Can be overwritten by agent.agentname.debug.remote.loglevel. Uses logrus log levels as described here ["https://pkg.go.dev/github.com/sirupsen/logrus"]: panic, fatal, error, warning, info, debug and trace.
debug.syslog.loglevel string info level of the produced syslog messages. System default loglevel string representation should be used as described here ["https://man7.org/linux/man-pages/man3/syslog.3.html"]: emerg, alert, crit, err, warning, notice, info, debug.
debug.syslog.remote.loglevel string info level of the syslog messages sent to the controller. System default loglevel string representation should be used as described here ["https://man7.org/linux/man-pages/man3/syslog.3.html"]: emerg, alert, crit, err, warning, notice, info, debug.
debug.kernel.loglevel string info level of the produced kernel log messages. System default loglevel string representation should be used as described here ["https://man7.org/linux/man-pages/man3/syslog.3.html"]: emerg, alert, crit, err, warning, notice, info, debug.
debug.kernel.remote.loglevel string info level of the kernel log messages sent to the controller. System default loglevel string representation should be used as described here ["https://man7.org/linux/man-pages/man3/syslog.3.html"]: emerg, alert, crit, err, warning, notice, info, debug.
debug.tui.loglevel string info Set log level for EVE Text UI (TUI) monitor. Possible values are "OFF", "ERROR", "WARN", "INFO", "DEBUG", "TRACE" and are case insensitive

In addition, there can be per-agent settings to overwrite the default log level set for EVE microservices. These use the same log levels as the default log level settings (logrus). The per-agent settings begin with "agent.agentname.setting":

Name Type Default Description
agent.agentname.debug.loglevel string "" if set overrides debug.default.loglevel for this particular agent (Legacy setting debug.agentname.loglevel still supported)
agent.agentname.debug.remote.loglevel string "" if set overrides debug.default.remote.loglevel for this particular agent (Legacy setting debug.agentname.remote.loglevel)

Right now the following agents support per-agent log level settings:

  • newlogd
  • wwan
  • nodeagent
  • downloader
  • tpmmgr
  • client
  • vcomlink
  • executor
  • vaultmgr
  • baseosmgr
  • zedagent
  • verifier
  • wstunnelclient
  • zfsmanager
  • zedkube
  • ledmanager
  • faultinjection
  • zedmanager
  • nim
  • loguploader
  • watcher
  • volumemgr
  • zedrouter
  • msrv
  • domainmgr
  • diag
  • scepclient