Skip to main content

Configuration reference

Configuration reference

The agent reads one JSON file, config.json, when it starts. The file is the agent's security policy: it decides which integrations exist, which hosts each may reach and which networks may be swept. The agent never writes to it, and a change takes effect when the agent restarts.

InstallLocation
.deb, .rpm/etc/continuum-local/config.json
.msiC:\ProgramData\Continuum Local\config.json
Container/etc/continuum-local/config.json, mounted
Helm chartthe config.json key of the Secret named in existingSecret
.mjs bundlethe path you pass; without one, CONTINUUM_LOCAL_CONFIG, then ./config.json

Keys that start with // are comments. The Continuum Local panel in Blueprintr prints the block for each integration, keyed by its ID, ready to paste under integrations (see Registering an agent).

How the agent reads the file

  • A value of the wrong type stops the start with a message that gives the key. Nothing is guessed: "true" in quotes is refused where true is meant.
  • An unknown key at the top level, inside an integration or inside remoteCredentialScope is logged as a warning, with the key it probably meant, and the agent starts. Inside discovery, an unknown key is ignored without a warning, except inside collectors, where it stops the start.
  • null counts as not set for top-level, integration and remoteCredentialScope keys.
  • A syntax error is reported by line and column only. The agent never prints the text around it, which could be a credential.
{
  "apexUrl": "https://blueprintr.io",
  "displayName": "DC1 agent",
  "enrollmentToken": "env:CONTINUUM_LOCAL_TOKEN",
  "integrations": {
    "<integration ID from the Continuum Local panel>": {
      "provider": "solarwinds",
      "allowedHosts": ["orion.corp.example"],
      "caFile": "/etc/continuum-local/corp-root-ca.pem",
      "credential": {
        "username": "svc-blueprintr",
        "password": "env:SOLARWINDS_PASSWORD"
      }
    }
  }
}

Agent settings

KeyTypeDefaultMeaning and limits
apexUrlstringrequiredYour Blueprintr URL, https://blueprintr.io. It must be https://, with no user name, password, query string or fragment.
displayNamestringrequiredAny text that is not empty. Blueprintr shows the name you gave the agent in the Continuum Local panel, not this one.
enrollmentTokenstring or secret referencenoneThe single-use token Blueprintr showed when you added the agent. Needed only until the agent has enrolled: remove it afterwards. A different token re-enrols the agent in place. The placeholder from config.example.json stops the start.
integrationsobject{}The integrations this agent serves, keyed by integration ID. See Integration settings. An ID that still starts with REPLACE_WITH, from the example file, stops the start.
discoveryobjectnoneNetwork sweeps over SNMP. Without it the agent refuses every sweep and SNMP probe. See Discovery.
allowRemoteCredentialsbooleanfalseAccept integrations and credentials sent from Blueprintr. Needs useGateway on. See Credentials.
remoteCredentialScopeobjectnoneWhere integrations sent from Blueprintr may connect. See remoteCredentialScope.
useGatewaybooleantrueUse the gateway Blueprintr advertises. false turns it off, and configuration from Blueprintr with it.
gatewayUrlstringnonePin a gateway instead of the advertised one. Same rules as apexUrl. The agent warns at every start when it is not on apexUrl's host or a subdomain of it, because the agent presents its credential there. Ignored while useGateway is false.
proxystring or secret referenceHTTPS_PROXY, https_proxy, then HTTP_PROXYProxy for traffic to Blueprintr only: http:// or https://, a host, an optional port and an optional user:password@. A path, a query string or another scheme, such as SOCKS, stops the start.
noProxystring or list of stringsNO_PROXY, then no_proxyHosts that bypass the proxy, comma-separated or as a JSON list.
extraCaFilefile pathnonePEM certificates trusted for Blueprintr traffic only, typically a TLS-inspecting proxy's root.
trustSystemCabooleantrueTrust the operating system's certificate store as well as the roots built into Node.js, for Blueprintr and for integrations with no caFile.
maxConcurrentJobswhole number4Relay and probe jobs run at once, from 1 to 16. At most one sweep runs alongside them.
pollWaitMsnumber20000Milliseconds a poll asks Blueprintr to wait for work while the gateway WebSocket is not connected. Values outside 1000 to 60000 are clamped to that range, and the agent never asks for more than 25 seconds.
logLevelstringCONTINUUM_LOCAL_LOG_LEVEL, else infodebug, info, warn or error, in any letter case.
statePathfile pathsee Where state is keptThe file the enrolled identity is written to. A directory stops the start.

A value outside what the table allows stops the start, except pollWaitMs, which is clamped. A relative file path resolves against the directory config.json is in.

A file given as extraCaFile or caFile must contain at least one PEM certificate. An unreadable file, or one with none, stops the start, and a DER file is refused with the openssl command that converts it. An expired certificate, or a private key in the same file, is logged as a warning.

Integration settings

Each entry under integrations:

KeyTypeDefaultMeaning and limits
providerstringrequiredsolarwinds, zabbix, prtg, checkmk, icinga2, opmanager, whatsupgold, netbox, infoblox or veeam. It must match the connector the integration uses in Blueprintr, or every request is refused with unknown_integration.
allowedHostslist of stringsrequiredThe host names or IP addresses this integration may reach, as they appear in its URL in Blueprintr, compared without regard to letter case. At least one.
credentialobjectnoneThe credential parts the connector needs, by name. Each value is a string or a secret reference. Never sent to Blueprintr.
credentialFilefile pathnoneA JSON object of credential parts, for example written by your secret manager. Its values are used as written, never as secret references. A part set here and in credential takes this file's value, with a warning.
caFilefile pathnonePEM certificates this integration trusts instead of every other root: your internal authority's certificate, or a self-signed appliance's own.
allowInsecureTlsbooleanfalseAccept any certificate from this integration's hosts. Logged as a warning at every start. Use caFile where you can.
allowPlaintextHttpbooleanfalseAllow http:// for this integration, which sends the credential unencrypted. Logged as a warning at every start.
allowWriteOperationsbooleanfalseLift the read-only guard for this integration. Logged as a warning at every start. Blueprintr can never set it, and the agent's header checks still apply. See Read-only by default.

An allowedHosts entry that contains a wildcard, a scheme, a user name, a path or a port stops the start. Any port on a listed host is allowed. Write IPv4 addresses in plain dotted-decimal form: 010.0.20.5 and 10.1 are refused, because resolvers read them differently. IPv6 addresses may be written with or without brackets.

ProviderCredential parts
solarwinds, checkmk, icinga2, whatsupgold, infoblox, veeamusername, password
zabbix, prtg, opmanager, netboxtoken

A part the connector needs but cannot find fails the request with credential_missing, and the message gives the part's name.

remoteCredentialScope

This block limits integrations sent from Blueprintr, and has no effect while allowRemoteCredentials is off. A host in such an integration must match at least one entry.

KeyTypeMeaning and limits
hostslist of stringsHost names allowed exactly, with the same rules as allowedHosts.
domainSuffixeslist of stringsDomains whose hosts are allowed, such as monitoring.corp.example, written without a leading dot or wildcard. A single label is refused unless it is private by convention: internal, local, localdomain, lan, corp, home, intranet, private or test. An IP address is refused: put it in cidrs.
cidrslist of stringsIPv4 or IPv6 ranges. They cover hosts written as IP addresses and the addresses a host name resolves to, checked again at every connection. A range with bits set below its prefix is refused with the corrected range, and /0 is refused. A range broader than /8 for IPv4 or /16 for IPv6 is logged as a warning at every start.
allowTlsOverridesboolean, default falseLet Blueprintr set allowInsecureTls or caFile on an integration it sends. Logged as a warning at every start when on.

With or without a scope, loopback, link-local (including the cloud metadata address 169.254.169.254) and unspecified addresses, and localhost names, are refused for integrations sent from Blueprintr unless a cidrs entry covers them. With allowRemoteCredentials on and no scope, the agent warns at every start that such an integration may reach any host that is not loopback or link-local. A scope with no entries refuses every one.

Discovery

KeyTypeDefaultMeaning and limits
cidrslist of IPv4 rangesnoneThe ranges a sweep may cover. A bare address is a /32. A range larger than maxSweepPrefix allows stops the start. With none, the agent refuses every sweep.
excludelist of IPv4 addresses or ranges[]Never probed by a sweep.
credentialSetslistrequiredAt least one. See Credential sets.
credentialTrial"parallel" or "sequential""parallel"parallel tries every set that applies to a host at once: a dead address costs one timeout, and every applicable community reaches every host. sequential tries them one at a time in the order written and stops at the first that answers: fewer communities reach each host, and a dead address costs one timeout per set.
collectorsobjectevery collector planned for the device's class{ "allow": [...] } runs only the named collectors, { "deny": [...] } runs all but them, and both together mean allow minus deny. Names: interfaces, addresses, entity, lldp, cdp, bridge, vlans, fdb, arp, routes, health, hostResources, vmware, printer, ups.
collectContactbooleantruefalse never requests sysContact, which often identifies a person.
concurrencynumber16Devices profiled at once, 1 to 256.
packetsPerSecondnumber50SNMP packets a second, 1 to 5000, shared by every sweep and probe the agent runs.
timeoutMsnumber1500Milliseconds per request, 100 to 30000.
retriesnumber1Retries per request, 0 to 5.
maxSweepPrefixnumber22The largest range allowed in cidrs, as a prefix length, 16 to 32.
maxHostsnumber65534Addresses probed in one sweep, 1 to 65534. Addresses past it are skipped.
deviceBudgetMsnumber60000Milliseconds per device, every collector included, 5000 to 600000.
portnumber161The SNMP port, 1 to 65535.
maxRowsPerTablenumber20000Rows read from one table on one device, 100 to 200000.
maxVlanWalksnumber64VLANs walked one by one on switches that keep their bridge tables per VLAN, 0 to 4094.

A number outside its range, or a collector name that does not exist, stops the start. Denying arp or fdb, or setting collectContact to false, also limits what Blueprintr can request from a device directly: raw requests then return only the objects the permitted collectors read.

A sweep probes only addresses inside cidrs and outside exclude. An SNMP probe of one device may also reach a host in its integration's allowedHosts, whatever cidrs and exclude say, on the port the probe gives, with the credential sets that apply to that host. A set without its own cidrs applies to every host, host names included.

Credential sets

KeyMeaning and limits
nameRequired, and different for each set.
version"1", "2c" or "3". Default "2c".
communityRequired for versions 1 and 2c. May be a secret reference.
userRequired for version 3.
securityLevelnoAuthNoPriv, authNoPriv or authPriv. Left out, it follows the passphrases given: authPriv with a privPassphrase, authNoPriv with only an authPassphrase, otherwise noAuthNoPriv.
authProtocolmd5, sha, sha224, sha256, sha384 or sha512. Required for authNoPriv and authPriv.
authPassphraseAt least 8 characters. Required for authNoPriv and authPriv. May be a secret reference.
privProtocoldes, aes128, aes192 or aes256, or aes192b and aes256b for devices that use the Blumenthal key extension. Required for authPriv.
privPassphraseAt least 8 characters. Required for authPriv. May be a secret reference.
contextNameOptional SNMPv3 context.
cidrsIPv4 ranges, each inside discovery.cidrs. The set is tried only against addresses inside them. An empty list, or a range outside discovery.cidrs, stops the start.

Secret references

A credential part, an SNMP community or passphrase, enrollmentToken and proxy can each be written as a reference instead of the value.

Written asMeans
"env:NAME"The value of environment variable NAME. A variable that is unset or empty stops the start.
"file:/absolute/path"The file's contents, with one trailing newline removed. The path must be absolute, and the file a regular, non-empty file of at most 64 KiB.
"literal:..."The text after literal:, for a value that starts with env: or file:.

References are resolved once, at start, so rotating a secret takes a restart. A reference that cannot be resolved stops the start with a message that says where it sat, never the value. Values in a credentialFile are never treated as references.

Set the variables where the service reads them: /etc/continuum-local/environment for the Linux packages, the container's environment, or extraEnv for the Helm chart. On Windows, use file: references: environment variables added to the service are replaced by every upgrade.

Environment variables

VariableMeaning
CONTINUUM_LOCAL_CONFIGThe config path when none is given on the command line. The container sets it to /etc/continuum-local/config.json.
CONTINUUM_LOCAL_STATE_DIRThe state directory when the config has no statePath. The systemd unit, the Windows service, the container and the Helm chart set it.
CONTINUUM_LOCAL_LOG_LEVELThe log level when the config has no logLevel. A value that is not a level means info.
HTTPS_PROXY, https_proxy, HTTP_PROXYThe proxy for Blueprintr traffic when the config sets none, read in that order.
NO_PROXY, no_proxyHosts that bypass the proxy when the config sets no noProxy.
NODE_EXTRA_CA_CERTSExtra roots, read by Node.js at start and trusted for every connection, your on-premise systems included, except an integration with its own caFile. For a proxy's root, use extraCaFile.

Where state is kept

The state directory contains the agent's enrolled identity, agent-state.json, and with allowRemoteCredentials, one file per integration sent from Blueprintr under remote-integrations. The agent creates the directory with mode 0700 and each file with mode 0600, and checks that it can write there before it spends an enrolment token.

Without a statePath, the agent uses the first of these that applies:

  1. CONTINUUM_LOCAL_STATE_DIR.
  2. STATE_DIRECTORY, which systemd sets for the unit.
  3. On Windows, %ProgramData%\Continuum Local\state.
  4. On Linux, /var/lib/continuum-local, when the config is /etc/continuum-local/config.json.
  5. The directory config.json is in.

File permissions

  • config.json can contain credentials. On the Linux packages it is owned by root, group continuum-local, with mode 0640, and every install or upgrade sets it back to that. Keep it that way: the service runs as continuum-local, so it cannot read a root-owned file with mode 0600. Mode 0600 suits a file owned by the account the agent runs as, such as the .mjs bundle under a service account. The agent warns at every start when the file is readable by every user, or writable by anyone but its owner, and checks each credentialFile the same way.
  • On Windows the agent skips that check. The installer restricts C:\ProgramData\Continuum Local so the service can read config.json but not change it, and can write only to state and logs.
  • /etc/continuum-local/environment is owned by root with mode 0600. systemd reads it as root, so the service account never needs to.
  • continuum-local check warns when the state file is readable by other users.

What Blueprintr receives from this file

On every poll, the agent reports its version, protocol version, platform and capabilities, including whether it accepts configuration from Blueprintr, the IDs of its integrations and the ranges in discovery.cidrs. At enrolment it also sends displayName, which Blueprintr does not keep. Blueprintr uses the report to send the agent only work it can do and to offer its ranges when you start a sweep. Host names, credentials, certificates and every other setting stay on the agent.

Blueprintr keeps the latest report on the agent's record until the agent is deleted. People who can manage Continuum integrations for the organisation or team can see all of it, and Blueprintr staff who run the service see the version, platform, protocol version and capabilities.

Logging

The agent writes one JSON object per line, with ts, level and message and any other fields: info and debug to standard output, warn and error to standard error. Before a line is written, each credential value the agent loaded is masked in its plain, JSON-escaped and URL-encoded forms. A value shorter than four characters is not masked.

logLevel sets which lines are written. Security warnings are written at every level. They cover write operations permitted, certificate checking off, http:// allowed, configuration from Blueprintr with no scope or with TLS overrides allowed, a very broad scope range, a pinned gateway off your Blueprintr domain, a config or credential file others can read or change, a certificate file that also contains a private key, and each integration sent from Blueprintr that uses a TLS override.

Where each install writes its log is in Troubleshooting.

The check command

continuum-local check [config.json] [--port N | --port ID=N]... [--timeout MS]

check tests the path the agent will take and prints what to change when something fails. It reads the config from the argument, else CONTINUUM_LOCAL_CONFIG, else ./config.json. It prints no secret and sends nothing beyond TLS handshakes, so it cannot enrol, spend a token or claim work.

SectionWhat it tests
ConfigurationThe file loads, with a summary: integrations, discovery on or off, configuration from Blueprintr on or off, and jobs at once. Every warning and notice the agent would log at start follows.
StateThe state directory is writable, and the agent is enrolled or has an enrollmentToken.
TrustThe certificate roots in use: Node.js's defaults, NODE_EXTRA_CA_CERTS, the system store, extraCaFile and each integration's caFile.
BlueprintrThe proxy in use, then DNS, TCP and a verified TLS handshake with Blueprintr, and with the gateway when one is known.
IntegrationsDNS and a verified TLS handshake, direct and never through the proxy, with every host in every allowedHosts, eight at a time.

Each line starts with ok, WARN, FAIL or -- for information, and the report ends with a Result: line. check exits with 0 when everything required passed and 1 otherwise. The gateway is not required: an agent that cannot reach it polls.

OptionMeaning
--port NThe port to try on every integration host. Default 443.
--port ID=NThe port for one integration, by ID, such as --port <ID>=17774 for SolarWinds Orion. Repeat it for others.
--timeout MSMilliseconds allowed for each connection attempt, 100 to 120000. Default 10000.

On the Linux packages, run sudo continuum-local check /etc/continuum-local/config.json. Run as root, the command reads /etc/continuum-local/environment the way systemd does, then runs as the continuum-local user, so it sees the same proxy, certificate roots and file permissions as the service.

continuum-local --version prints the agent version, the protocol version, the Node.js version and the platform.