Server configuration
A Nexus Telemetry Fleet server has 2 kinds of setting. Environment variables are read when it starts. The fields on the dashboard’s Settings page are stored in its database. No setting is in both. Variables used only in development and testing are left out of this page.
Environment variables
A variable is read at startup unless its notes say otherwise, so a change
takes effect at the next restart. A packaged fleet server reads its variables
from /etc/nexus-fleet/server.env. A container reads them from the
environment: block of its compose file.
Listening and names
| Variable | Sets | Default |
|---|---|---|
NF_LISTEN |
The address and port the dashboard listens on. An address other than loopback, with no TLS, is warned about at startup | 127.0.0.1:3000 |
NF_DATA_DIR |
Where the databases, the certificate authority and the keys are stored. The packages set /var/lib/nexus-fleet. The command line reads it too |
./data |
NF_STREAM_LISTEN |
The address and port collectors connect to. A value that cannot be parsed stops the fleet server at startup | 0.0.0.0:9443 |
NF_STREAM_SAN |
The name written into the fleet server’s certificate at the first run, and given to collectors at enrolment as the address to connect to. localhost and 127.0.0.1 are always included as well. Read again whenever the certificate is issued |
localhost |
NF_SERVER_URL |
The fleet server address written into the enrolment commands the dashboard generates. When set, it is used instead of the address the browser reached the dashboard at. The command line prints http://<fleet-server>:3000 when it is unset |
http:// followed by NF_LISTEN |
NF_ORG_BASE_DOMAIN |
The domain that organisations’ web addresses are under, so that the Organisations page can show each organisation’s full address. Read on every load of the Organisations page | none |
NF_PLATFORM_ORG_SLUG |
The platform organisation’s short name, at the first run. First run only. It does not rename. A value that is not a bare short name is refused with a warning, and default is used |
default |
NF_PLATFORM_ORG_NAME |
The platform organisation’s display name, at the first run. First run only | Default Organisation |
NF_PROBE_TOKEN |
The bearer token that opens the full /healthz body, with the uptime, the stream count, the enrolled count, the rollup lag and the version, and /metrics, to a monitoring system. Without it /metrics is refused. Without it, or with a wrong one, /healthz answers with the status alone |
unset, and the full body is never served |
TLS and proxy
| Variable | Sets | Default |
|---|---|---|
NF_DASHBOARD_TLS_CERT |
The path of the dashboard’s certificate chain, a PEM file. Both this and the key must be set for HTTPS | none, plain HTTP |
NF_DASHBOARD_TLS_KEY |
The path of that certificate’s private key, a PEM file. With only one of the two set, the dashboard stays on plain HTTP. Nothing warns about the half-set pair, and a non-loopback NF_LISTEN still warns about plain HTTP |
none |
NF_TRUST_FORWARDED_PROTO |
1, true or on trusts the X-Forwarded-Proto header from a proxy, so that the session cookie is marked Secure. Never set it where the dashboard port is reachable directly |
off |
NF_STREAM_MAX_CONNS |
The most collector connections open at the same time. Must be greater than 0 | 8192 |
NF_STREAM_HANDSHAKE_MAX |
The most TLS handshakes in progress at the same time. A collector arriving above it is refused and retries. Must be greater than 0 | 32 |
Licensing
| Variable | Sets | Default |
|---|---|---|
NF_LICENCE_CHECK |
off, 0 or false stops the daily online check of the licence key. Startup only |
the check runs |
NF_LICENCE_URL |
The address the licence key is checked against. Startup only | https://licensing.nexustelemetry.com |
NF_LICENCE_GRANT |
A licence key to apply at startup. Applied only while no key is stored. A key that is refused is logged and ignored, and the fleet server starts | none |
Updates
| Variable | Sets | Default |
|---|---|---|
NF_UPDATE_CHECK |
off, 0 or false stops the check for a newer fleet server version. Startup only |
the check runs |
NF_UPDATE_CHECK_URL |
The download host used by the update check and by the enrolment commands the dashboard generates. Read each time Add telemetry collector opens | https://fleet-downloads.nexustelemetry.com |
NF_UPDATE_CHANNEL |
The release channel the fleet server compares its version against. Read once at startup for the version check, and again each time the enrolment commands or About are rendered. The value is used as typed, without checking that the channel exists | the channel in the apt repository file, else stable |
NF_UPDATE_MANIFEST_URL |
The address of the collector release manifest, which the dashboard reads to know which collectors are behind their channel. An empty value turns updates from the dashboard off. A value beginning / is read as a local file |
<download host>/fleet/<channel>/latest.json |
Alerts and email
| Variable | Sets | Default |
|---|---|---|
NF_SENDGRID_API_KEY |
The SendGrid key that alert email is sent with. Read at every send, so it can be set without a restart | none, and no email is sent |
NF_SENDGRID_API_KEY_FILE |
A file containing that key. Read only when the variable above is unset or empty, so the key in the file can change without a restart | none |
NF_ALERT_FROM |
The address alert email comes from. Read at every send | [email protected] |
NF_ACCOUNT_FROM |
The address account email, the verification code, comes from. Read at every send | [email protected] |
NF_AUTH_EMAIL_ECHO |
1, true or on writes each sign-in verification code to the log instead of sending it. A fleet server with no SendGrid key writes them to the log whatever this is set to. For a test fleet server only. Never set on a production fleet server |
unset |
NF_ALLOW_PRIVATE_WEBHOOKS |
Allows a webhook address on a loopback or private network address. Setting the variable to anything, an empty value included, allows them. Link-local, metadata, unspecified and broadcast addresses are refused whatever it is set to | such addresses are refused when saved |
State timings
The 4 NF_STATUS_ variables exist for test runs that need faults confirmed
faster. A production fleet server leaves them unset.
| Variable | Sets | Default |
|---|---|---|
NF_STATUS_CONFIRM_SECS |
How long a fault must last before the state changes. Must be greater than 0. The value is fixed per organisation at the first pass after a restart | 180 |
NF_STATUS_HOLD_SECS |
How long a recovery must last before the state returns to healthy. As above | 300 |
NF_STATUS_COALESCE_SECS |
How close together two faults must be to count as one incident. As above | 600 |
NF_STATUS_SWEEP_SECS |
Seconds between the passes that re-check every terminal’s state. Must be greater than 0. Startup only | 30 |
NF_SETTLE_SECS |
Seconds after a fleet server restart during which terminals that have not yet reconnected show as Planned outage rather than Outage on the dashboard. 0 turns this off. Startup only |
3600 |
Tiles and weather
| Variable | Sets | Default |
|---|---|---|
NF_TILES_URL |
The map tile server the Map fetches its background from, through the fleet server. A fleet server with no internet access uses a local tile server here. Read whenever a tile is not already cached | https://tiles.nexustelemetry.com/basemap |
NF_TILES_TOKEN |
The value sent to the tile server in the X-Nexus-Tiles header. An empty value sends no header |
nf-server-selfhost-v1 |
NF_WEATHER |
on or 1 turns the weather panels on. Startup only |
off |
NF_WEATHER_API_KEY |
A key for the paid weather service. With a key set, the 2 addresses below default to the paid service’s hosts | none |
NF_WEATHER_URL |
The forecast address | https://api.open-meteo.com/v1/forecast, or the paid host with a key |
NF_WEATHER_MARINE_URL |
The marine forecast address | https://marine-api.open-meteo.com/v1/marine, or the paid host with a key |
NF_WEATHER_DAILY_CAP |
The most weather requests made in a day. 0 is accepted and stops every request |
8000 |
NF_WEATHER_REFRESH_SECS |
How old a forecast may be before the background pass fetches it again. The pass runs every 300 seconds | 3600 |
NF_WEATHER_CLICK_MIN_SECS |
How old a forecast may be before opening its panel fetches it again | 900 |
NF_WEATHER_SWEEP |
off or 0 stops the background pass, so forecasts are fetched only when a panel is opened. Startup only |
the pass runs |
Backups
| Variable | Sets | Default |
|---|---|---|
NF_BACKUP_MAX_AGE_HOURS |
How old the newest successful backup may be before the Backups check on Server health reads Problem. Must be greater than 0. Read on every load of the page | 26 |
The scheduled backup’s own settings are in /etc/nexus-fleet/backup.env,
not in the fleet server’s environment. See Backup and
restore.
Custody and keys at rest
| Variable | Sets | Default |
|---|---|---|
NF_CUSTODY_PUBLIC_KEY |
An X25519 public key. A new organisation’s root key is encrypted to it and kept off the host. Base64, exactly 32 bytes. A value that cannot be decoded fails the creation of a new organisation, and the custody commands, with an error. It never falls back to keeping the key on the host | none, and root keys stay on the host |
NF_CUSTODY_P256_PUBLIC_KEY |
A second public key, held in a hardware security module. Base64, exactly 65 bytes beginning 04. With both set, a new root key is encrypted to both |
none |
NF_STOCK_WINDOWS_ON_BOX |
How many of the prepared CA certificates, the signing cover, are kept on the host. The rest are encrypted and kept elsewhere. See Certificates. Must be 1 or more. Read on every top-up and by the custody commands | 2 |
NF_DEK_KEYSTORE |
1, true or yes keeps the data encryption key in the operating system’s keystore as well as in dek.key. shred then deletes dek.key once the keystore is confirmed to have the key |
the key is in dek.key only |
Microsoft sign-in
The three registration variables are read once at startup. All three are required for Microsoft sign-in to be available, and it is then turned on per organisation in Settings. See Sign-in.
| Variable | Sets | Default |
|---|---|---|
NF_OIDC_CLIENT_ID |
The application id of the Microsoft Entra app registration. A value that is not a GUID is refused at load, logged as oidc.client_invalid, and Microsoft sign-in stays off |
unset, and Microsoft sign-in is off |
NF_OIDC_KEY_FILE |
The private key the fleet server signs its requests to Microsoft with, a PKCS#8 PEM file. Its certificate is uploaded to the app registration | unset |
NF_OIDC_CERT_FILE |
That certificate, a PEM file | unset |
NF_OIDC_ISSUER_BASE |
The issuer address, with {tenant} standing for the organisation’s tenant id |
https://login.microsoftonline.com/{tenant}/v2.0 |
NF_OIDC_REDIRECT_BASE |
One fixed address the sign-in returns to, for a deployment of many fleet servers behind one app registration. The sign-in is then sent on to the fleet server it started at | unset, and the sign-in returns to the fleet server’s own address |
Enrolment and first run
| Variable | Sets | Default |
|---|---|---|
NF_ENROL_MAX_PER_IP |
Enrolment attempts allowed from one source address in a minute. Must be 1 or more. Read at the first enrolment attempt and not again. The other enrolment limits, 20 failures per token and 100 per fleet server in a minute, are fixed | 30 |
NF_INITIAL_ADMIN_PASSWORD |
Creates the first user, admin with the Owner role, at the first start, with this password. Applied only while no user exists. Otherwise it is logged as ignored. The value is never logged |
none, and the first user is created at the command line |
Data and logging
| Variable | Sets | Default |
|---|---|---|
NF_LIVE_RING_MINUTES |
Minutes of live readings kept in memory, per terminal and per source. Must be greater than 0, and at most 240. Read at first use | 30 |
NF_POLL_INTERVAL |
The interval between readings, in seconds, given to collectors at enrolment. A connected collector that has sent nothing for 3 intervals plus 30 seconds, and at least 120 seconds, is marked offline. With the default, that is 120 seconds | 30 |
NF_LOG |
The log level, as a RUST_LOG filter. RUST_LOG is read when this is unset. An invalid filter means info, with a warning |
info |
NF_LOG_FORMAT |
json or pretty. An unrecognised value keeps the default, with a warning |
json |
NF_HEARTBEAT_SECS |
Seconds between the heartbeat lines in the log. Limited to 60 to 31536000, and a limited value is logged | 3600 |
NF_PLAUSIBLE_DOMAIN |
The site name for page view analytics on the dashboard. Unset on every customer fleet server, so no analytics script is served. Set only on the public demo | unset |
NF_PLAUSIBLE_ORIGIN |
The analytics server the script reports to. Read only when NF_PLAUSIBLE_DOMAIN is set |
https://pl.nexustelemetry.com |
NF_DEMO |
Marks the fleet server as the public demo, with the watermark and the shared sign-in hint. Never set on a customer fleet server | unset |
The fleet server writes no log file. Its log goes to standard output.
NF_LOG_DIR is a collector setting only.
Settings page
The dashboard’s Settings page holds the settings stored in the fleet server’s database. Fields under Terminals and Data save when changed. Connectivity checks and Maintenance notice save on their own button. See Settings for using the page.
Appearance
Appearance is stored in the browser, not on the fleet server.
| Field | Sets | Default | Range | Takes effect |
|---|---|---|---|---|
| Theme | The colour scheme | Dark | System, Dark, Light | On change, in this browser |
| Display scale | The size of everything on screen, as a percentage | Normal, 100 | Extra Small 80, Small 90, Normal 100, Large 110, Extra Large 120, Maximum 150 | On change, in this browser |
Terminals
| Field | Sets | Default | Range | Takes effect |
|---|---|---|---|---|
| Stale threshold | How long a terminal may be silent before it is marked stale | 1 day | 1 minute to 1 year | Within 30 seconds |
| Decommission timeout | How long a decommission waits for an offline collector to connect and confirm, before completing without it | 10 minutes | 1 minute to 1 day | Within 30 seconds, for decommissions already waiting as well |
Stale threshold takes Minutes, Hours, Days or Years. Decommission timeout takes Minutes, Hours or Days.
Data
Every field here takes Days or Years, and is stored as whole days.
| Field | Sets | Default | Range | Takes effect |
|---|---|---|---|---|
| Raw readings | How long every reading is kept | 7 days | 1 to 3650 days | Within 30 seconds |
| 5-minute summaries | How long 5-minute summaries are kept. The percentiles inside each summary are kept for 30 days, the averages for the whole period | 90 days | 1 to 3650 days | Within 30 seconds |
| Hourly summaries | How long hourly summaries are kept. The percentiles inside each summary are kept for 90 days, the averages for the whole period | 2 years | 1 to 3650 days, and never less than 5-minute summaries | Within 30 seconds |
| Audit log | How long audit entries are kept | 90 days | 1 to 3650 days | Within 30 seconds |
Daily summaries are kept forever. Audit entries for revoked certificates are kept forever, whatever Audit log is set to. A setting that cannot be read is skipped on that pass rather than replaced by a default, so a bad value never deletes anything.
Connectivity checks
Connectivity checks is one form, saved with Save targets. At most 12 targets are tested in one sweep.
| Field | Sets | Default | Range | Takes effect |
|---|---|---|---|---|
| Address | The target’s host name or IP address | empty | No comma and no equals sign | On Save targets |
| Label | The name shown for the target | empty, shown as - |
Up to 20 characters, no comma or equals sign | On Save targets |
| Test | Ping or TCP connect | Ping | the two | On Save targets |
| Port | The port, for TCP connect | 443 | 1 to 65535 | On Save targets |
| Also test the built-in targets | Adds the terminal, the site’s router, and Cloudflare’s and Google’s public resolvers | on | on or off | On Save targets |
The fleet server sends the saved list to every collector each time it connects, and to connected collectors when the list is saved. Test now tests from the fleet server and stores nothing. It waits up to 3 seconds, allows 20 tests a minute per user, and answers Reachable, No answer, Name not found, Invalid address or Try again in a minute.
Maintenance notice
Maintenance notice is one form, saved with Post notice.
| Field | Sets | Default | Range | Takes effect |
|---|---|---|---|---|
| Start (UTC) | When the maintenance starts | empty, and no notice is shown | A date and time. Clearing it withdraws the notice | Within 60 seconds |
| Expected minutes | How long the maintenance lasts | empty, read as 0 | 0 to 1440. 0 shows no banner | Within 60 seconds |
| Note (optional) | Text shown with the notice | empty | Up to 200 characters | Within 60 seconds |
The notice is shown as a banner from 7 days before the start, is red once the start has passed, and clears when the expected minutes have passed.
Email is read-only. Every row shows the environment as it is at the next send, with no restart.
| Field | Shows | From |
|---|---|---|
| Email delivery | Configured or Not configured | NF_SENDGRID_API_KEY, else NF_SENDGRID_API_KEY_FILE |
| Sender address, alerts | The address alert email comes from | NF_ALERT_FROM |
| Sender address, account codes | The address account email comes from | NF_ACCOUNT_FROM |
Licence
Licence has read-only rows and the field that applies or removes a licence key.
| Field | Shows | Takes effect |
|---|---|---|
| Status, Licence type, Licensed to, Expires, Collectors, Last validated | The stored licence key | Read on each load |
| Organisation root fingerprint | The fingerprint the licence key is tied to. It is the same after a backup and restore | Fixed |
| Licence key with Apply key | Applies a pasted key | On press, without a restart |
| Remove key | Removes the key | After a confirmation, without a restart |
About
About is read-only. It shows the version and its release channel, Edition, Platform, whether an update is published, and links to the documentation, the release notes, the privacy policy, the terms and support.
Settings versus environment
Everything under Terminals, Data, Connectivity checks and Maintenance notice is stored in the fleet server’s database only. No environment variable overrides it, and a change takes effect within 30 seconds for Terminals and Data, within 60 seconds for Maintenance notice, and on save for Connectivity checks, without a restart.
4 things on the page come from the environment. Email reads the 3 sending
variables at every send. Microsoft sign-in under Authentication is
available only with the NF_OIDC_* variables set. The release channel on About is
NF_UPDATE_CHANNEL if set, else the one in the apt repository file.
Licence applies NF_LICENCE_GRANT only while no key is stored, and the
stored key takes precedence from then on.
Certificate lifetimes have no field on the page. They are set when the fleet server is deployed, and their defaults are in Timings.
See Collector configuration for the collector’s variables.