Collector configuration

A Nexus Telemetry Fleet collector reads its settings at startup from a configuration file and from environment variables. Where a file key and an environment variable set the same thing, the environment variable wins.

Configuration file

The collector reads one configuration file. It uses the first of these that exists, in this order: a path given as the first argument, the path given with --config, and the packaged path for the platform.

Platform Packaged path
Debian, Ubuntu, RHEL and Fedora /etc/nexus-fleet/collector.toml
macOS /Library/Application Support/NexusFleet/collector.toml
Windows C:\ProgramData\NexusFleet\collector.toml
Docker none by default. Mount one and pass its path

With no file, the collector starts on the defaults in the table below. The packaged installers write a file that sets poll_interval_secs, db_path, data_dir and sources, and on Linux setup_page = "off", so on a packaged install those keys have the values the installer wrote. In particular the installers set sources to ["starlink", "connection", "ping"] where the default is ["host"].

Key Type Default Environment variable
poll_interval_secs integer seconds 10 NF_POLL_INTERVAL
db_path path collector.db inside data_dir none
data_dir path ./data NF_DATA_DIR
local_status string, the values under NF_LOCAL_STATUS below absent, and the onboard status page is off NF_LOCAL_STATUS
site_name string the name the fleet server holds for the collector, else the hostname NF_SITE_NAME
setup_page string 1, on at 127.0.0.1:41700. The deb and rpm write off NF_SETUP_PAGE
sources list of strings ["host"] NF_SOURCES
starlink_addr string http://192.168.100.1:9200 NF_STARLINK_ADDR
location_source string, the values under NF_LOCATION_SOURCE below dish, the Starlink terminal NF_LOCATION_SOURCE
location_lat decimal none NF_LOCATION_LAT
location_lon decimal none NF_LOCATION_LON
location_host string none NF_LOCATION_HOST
location_port integer none NF_LOCATION_PORT
location_device path none, auto-detect NF_LOCATION_DEVICE
location_baud integer 9600 NF_LOCATION_BAUD
location_lock boolean false NF_LOCATION_LOCK

poll_interval_secs in the file, or NF_POLL_INTERVAL in the environment, overrides the interval the fleet server gave the collector at enrolment. With neither set, the collector uses the fleet server’s interval.

Note: an [api] block from an earlier version is read and ignored. The collector connects out to the fleet server and listens on no port for it, so there is no listen address to set.

Environment variables

Variable Sets Default
NF_DATA_DIR Where certificates, enrolment state, the local database and the log are stored. Overrides the file key the file’s data_dir, else ./data
NF_SERVER The fleet server address to enrol against. First run only, and on a re-enrolment none
NF_TOKEN The enrolment token. First run only, and on a re-enrolment none
NF_DEVICE_NAME The name the terminal shows on the dashboard. Used at enrolment only. --name wins over it the hostname
NF_REENROL 1 or true enrols the collector again, with the token in NF_TOKEN, keeping the same record. Nothing happens unless NF_TOKEN is a new token, so it can be left set off
NF_STREAM_URL The address the collector connects to, in place of the one the fleet server gave at enrolment. A blank value means the address from enrolment the address from enrolment, else https://localhost:9443
NF_STREAM_GZIP 0 stops the collector compressing what it sends compression on
NF_POLL_INTERVAL The interval between readings, in whole seconds. Must be greater than 0. Overrides the fleet server’s interval 10, or the fleet server’s interval
NF_SUMMARY_INTERVAL Seconds between the summaries the collector sends. Limited to 5 to 300 30
NF_LIVE_POLL_MS The interval between readings, in milliseconds, while a user has the terminal’s Live view open. Limited to 250 to 10000 1000
NF_HEARTBEAT_SECS Seconds between the heartbeat lines in the log. Limited to 60 to 31536000. A value outside that is logged and limited 3600
NF_SETUP_PAGE The port of the setup page on 127.0.0.1. off, 0 or false turns the page off. A value that is not a number means 41700 the file’s setup_page, else 41700
NF_LOCAL_STATUS The onboard status page: 1, true, on or yes for 0.0.0.0:9210, 0, false or off for none, or an address:port. Overrides the file key and the dashboard switch. An unrecognised value serves no page the file’s local_status, else off
NF_SITE_NAME The site name shown on the onboard status page. Overrides the file key the name the fleet server holds for the collector, else the hostname
NF_SOURCES The sources this collector reads, comma-separated. Checked before enrolment, so a mistyped name stops the collector without using the token the file’s sources, else host

Sources

A source is one of the 4 things a collector can read. NF_SOURCES names one or more. An unknown name is refused with Unknown NF_SOURCES entry '<name>' (known: host, starlink, connection, ping).

Source Reads
host The host the collector runs on: CPU, memory, disk and load
starlink The terminal, over its local interface: status, position and history
connection Which connection traffic is going over, found by connecting to known addresses. The backup connection state comes from this. link, the name before 16 September 2026, is still accepted
ping Reachability from the site: the site’s router, the terminal, then 2 public DNS resolvers
Variable Sets Default
NF_STARLINK_ADDR The terminal’s local address. The starlink_addr file key, the setup page’s Advanced field and nf-collector enrol --starlink-addr all set the same thing. A bare host, or host:port, is completed with http:// and port 9200. The ping source tests this address as one of its built-in targets. An address that cannot be parsed turns the starlink source off, and the log says why http://192.168.100.1:9200
NF_STARLINK_BIND_INTERFACE The network interface the collector uses to reach the terminal. Also used to reach the router the operating system’s choice
NF_CONNECTION_TARGETS The host:port addresses the connection source connects to, comma-separated 1.1.1.1:443, 8.8.8.8:443, 9.9.9.9:443
NF_CONNECTION_PRIMARY_ASN The network that counts as the primary connection, as an AS number. With no primary, the backup connection state is never reported AS14593, Starlink, when this collector also reads starlink. Otherwise none
NF_CONNECTION_ASN_MODE off stops the lookup of which network traffic is going over external, the lookup runs
NF_CONNECTION_ASN_URLS The addresses asked which network traffic is going over, comma-separated. All over HTTPS 1 built-in public lookup service
NF_CONNECTION_IP_URLS The addresses asked for the site’s public address, comma-separated 2 built-in public lookup services
NF_CONNECTION_ASN_INTERVAL_SECS The longest interval between lookups. Must be greater than 0. A lookup also runs when the connection changes 300
NF_CONNECTION_UPLINK_INTERFACE The physical interface under a VPN, read only while a VPN holds the default route read from the route table

Each NF_CONNECTION_ variable is also read under its name before 16 September 2026, NF_LINK_ with the same suffix.

Location

The collector reports a position from one of 7 sources. See Collector GPS for the sources and which takes precedence.

Variable Sets Default
NF_LOCATION_SOURCE One of dish, fixed, off or none, serial, nmea_tcp, nmea_udp, gpsd, in any case. Overrides the file key dish
NF_LOCATION_LAT Latitude, for fixed. A value that cannot be parsed is noted in the log at startup, and the collector runs none
NF_LOCATION_LON Longitude, for fixed. As above none
NF_LOCATION_HOST The host, for nmea_tcp and gpsd none for nmea_tcp. localhost for gpsd
NF_LOCATION_PORT The port, for nmea_tcp, nmea_udp and gpsd. A value that cannot be parsed is noted in the log at startup none for nmea_tcp and nmea_udp. 2947 for gpsd
NF_LOCATION_DEVICE The serial port, for serial none, which means auto-detect
NF_LOCATION_BAUD The serial speed, for serial. A value that cannot be parsed is noted in the log at startup 9600
NF_LOCATION_LOCK 1, true, yes or on gives the collector’s own configuration precedence over the dashboard. The fleet server still records a source set from the dashboard, and the collector does not apply it off

Reachability

The ping source tests a list of targets. The collector has a built-in list: the site’s router, the terminal and 2 public DNS resolvers. The dashboard’s Connectivity checks setting adds to the built-in list, and replaces anything NF_PING_TARGETS added. NF_PING_TARGETS adds to the built-in list, or replaces it with the only: prefix. At most 12 targets are tested in one sweep.

Variable Sets Default
NF_PING_TARGETS Extra targets, comma-separated: host for a ping, or tcp://host:port for a TCP connect. A list that starts with only:, for example only:tcp://10.0.0.1:443, replaces the built-in list instead of adding to it none
NF_PING_LOCK 1 ignores the target list set on the dashboard off, the dashboard’s list is used
NF_PING_ROUTER 1 adds the Starlink router to the targets. A terminal in bypass mode has no router off
NF_ROUTER_ADDR The Starlink router’s local address. Used for the router target and for the speed test http://192.168.1.1:9000

Updates

See Release channels for how a collector updates.

Variable Sets Default
NF_MANAGED_UPDATES 0 refuses updates triggered from the dashboard. Read on Windows only today. On Linux, disable the updater service instead. See Release channels updates accepted
NF_UPDATE_MANIFEST_URL The address of the release manifest, which names the installer to download. An empty value turns updates off. Read on macOS and Windows only https://fleet-downloads.nexustelemetry.com/fleet/stable/latest.json
NF_UPDATE_APPLY_CMD A shell command to run in place of the built-in installer. The version is passed to it in NF_UPDATE_VERSION none
NF_UPDATE_VERSION The version being applied. Set by the collector for NF_UPDATE_APPLY_CMD. Never read from the environment not read

Logging and retention

The collector writes its log to standard error and to a rolling JSON file of bounded size under the data directory. The retention settings below prune the collector’s local store, which holds readings until the fleet server has received them. How long the fleet server keeps readings is set on the dashboard’s Settings page.

Variable Sets Default
NF_LOG The log level: error, warn, info, debug or trace, or a per-module filter in the RUST_LOG syntax. RUST_LOG is read when this is unset. An invalid value means info, with a warning info
NF_LOG_FORMAT json or pretty. An unrecognised value keeps the default, with a warning pretty when writing to a terminal window, json otherwise
NF_LOG_DIR Where the rolling log file is written. A directory that cannot be written means the log goes to standard error only <data_dir>/logs
NF_RAW_RETENTION_DAYS Days of readings kept in the local store. NF_LOCAL_RETENTION_DAYS, the older name, is read when this is unset 7
NF_LOCAL_RETENTION_DAYS The older name of the line above. Read only when NF_RAW_RETENTION_DAYS is unset 7
NF_FINE_RETENTION_DAYS Days of five-minute summaries kept in the local store 90
NF_COARSE_RETENTION_DAYS Days of hourly summaries kept in the local store 365

A retention value that is not a positive whole number is ignored and the default applies, so 0 cannot delete readings before they are sent.

See Server configuration for the fleet server’s variables, and Files and repositories for where each file is on disk.