Skip to main content

Configuration

Complete reference for all SkySignal agent configuration options.

Configuration Sources​

SkySignal can be configured via Meteor settings, environment variables, or both. When both are present, the priority order is:

  1. Meteor.settings (highest — always wins)
  2. Environment variables (fallback when settings don't specify a value)
  3. Default values (lowest)

This means you can set your API key as an environment variable and fine-tune options in your settings file — or use either one exclusively.

Meteor Settings Structure​

{
"skysignal": {
// Server-side configuration (private)
},
"public": {
"skysignal": {
// Client-side configuration (RUM, error tracking)
}
}
}

Server-Side Configuration​

Configure server-side monitoring via settings.skysignal or environment variables:

Required​

OptionTypeDescription
apiKeyStringYour SkySignal API key (sk_xxx format)

General Options​

OptionTypeDefaultDescription
enabledBooleantrueEnable/disable the agent
debugBooleanfalseEnable verbose debug logging
endpointStringhttps://dash.skysignal.appAPI endpoint URL
hostStringAuto-detectedOverride hostname identification
appVersionStringAuto-detectedApplication version for tracking releases

Batching & Performance​

OptionTypeDefaultDescription
batchSizeInteger50Max items before auto-flush
batchSizeBytesInteger262144Max bytes per batch (256KB)
flushIntervalInteger10000Flush interval in ms
maxBatchRetriesInteger3Max retries for failed batches
requestTimeoutInteger3000API request timeout in ms
maxMemoryMBInteger50Max memory for batches

Sampling​

OptionTypeDefaultDescription
traceSampleRateNumber1.0Method trace sampling (0.0-1.0)
rumSampleRateNumber0.5RUM data sampling (0.0-1.0)

System Metrics​

OptionTypeDefaultDescription
collectSystemMetricsBooleantrueCollect CPU, memory, event loop
systemMetricsIntervalInteger60000Collection interval (ms)

Method Tracing​

OptionTypeDefaultDescription
collectTracesBooleantrueTrack Meteor Methods
traceMethodArgumentsBooleantrueCapture method arguments
maxArgLengthInteger1000Max string length for arguments
traceMethodOperationsBooleantrueCapture detailed operation timeline

Error Tracking​

OptionTypeDefaultDescription
collectErrorsBooleantrueTrack server-side errors

MongoDB Monitoring​

OptionTypeDefaultDescription
collectMongoPoolBooleantrueTrack connection pool stats
mongoPoolIntervalInteger60000Collection interval (ms)
mongoPoolFixedConnectionMemoryNumbernullFixed bytes per connection
collectCollectionStatsBooleantrueTrack collection statistics
collectionStatsIntervalInteger300000Collection interval (5 min)

Index Usage Tracking​

OptionTypeDefaultDescription
captureIndexUsageBooleantrueCapture MongoDB explain() data
indexUsageSampleRateNumber0.05Sample rate for explain (5%)
explainVerbosityStringexecutionStatsqueryPlanner, executionStats, or allPlansExecution
explainSlowQueriesOnlyBooleanfalseOnly explain slow queries

DDP Connections​

OptionTypeDefaultDescription
collectDDPConnectionsBooleantrueTrack DDP connections
ddpConnectionsIntervalInteger30000Collection interval (ms)

Live Queries​

OptionTypeDefaultDescription
collectLiveQueriesBooleantrueTrack live query observers (change streams, oplog, polling)

The agent detects the observer driver for each live query and classifies it as changeStream, oplog, or polling. On Meteor 3.5+ apps with MongoDB change streams enabled, you'll see a mix of change stream and oplog observers. On older Meteor 3.x apps, observers will typically be either oplog or polling depending on whether MONGO_OPLOG_URL is set.

HTTP Requests​

OptionTypeDefaultDescription
collectHttpRequestsBooleantrueTrack HTTP requests

Background Jobs​

OptionTypeDefaultDescription
collectJobsBooleantrueTrack background jobs
jobsIntervalInteger30000Collection interval (ms)
jobsPackageStringAuto-detectJob package (msavin:sjobs)

Log Collection​

OptionTypeDefaultDescription
collectLogsBooleantrueEnable structured log collection
logLevelsArray["info", "warn", "error", "fatal"]Which log levels to capture
logSampleRateNumber1.0Sample rate for logs (0.0-1.0)
logMaxMessageLengthInteger10000Max characters per log message
logCaptureConsoleBooleantrueIntercept console.log/warn/error/etc
logCaptureMeteorLogBooleantrueIntercept Meteor Log.info/warn/error

By default the agent hooks into both console.* and Meteor's Log.* methods, captures the output, and forwards it to SkySignal. Each log entry includes a timestamp, level, message, and the server hostname so you can filter by host when running multiple containers.

If you're running a high-traffic app and don't need every info-level log, drop the sample rate or narrow the levels:

{
"skysignal": {
"collectLogs": true,
"logLevels": ["warn", "error", "fatal"],
"logSampleRate": 0.5
}
}

Worker Threads​

OptionTypeDefaultDescription
useWorkerThreadBooleanfalseOffload to worker thread
workerThresholdInteger50Pool size to trigger worker

Client-Side Configuration (RUM)​

Configure Real User Monitoring in settings.public.skysignal:

Required​

OptionTypeDescription
publicKeyStringYour SkySignal public key (pk_xxx format)

RUM Options​

Configure under settings.public.skysignal.rum:

OptionTypeDefaultDescription
enabledBooleantrueEnable RUM collection
trackUserActionsBooleantrueTrack clicks, form submits
trackPageViewsBooleantrueTrack page navigation
debugBooleanfalseEnable debug logging

Error Tracking Options​

Configure under settings.public.skysignal.errorTracking:

OptionTypeDefaultDescription
enabledBooleantrueEnable client error tracking
attachScreenshotsBooleanfalseCapture screenshots on error
screenshotQualityNumber0.7Screenshot JPEG quality
screenshotSamplingRateNumber100% of errors to screenshot
maxScreenshotSizeInteger512000Max screenshot size (bytes)
redactSelectorsArray[]CSS selectors to redact
captureUnhandledRejectionsBooleantrueCapture Promise rejections
captureConsoleErrorsBooleanfalseCapture console.error calls
ignoreErrorsArray[]Error messages to ignore
debugBooleanfalseEnable debug logging

Example Configurations​

Minimal Setup​

{
"skysignal": {
"apiKey": "sk_live_xxxxxxxxxxxx"
},
"public": {
"skysignal": {
"publicKey": "pk_live_xxxxxxxxxxxx"
}
}
}

Development​

{
"skysignal": {
"apiKey": "sk_dev_xxxxxxxxxxxx",
"debug": true,
"traceSampleRate": 1.0
},
"public": {
"skysignal": {
"publicKey": "pk_dev_xxxxxxxxxxxx",
"rum": {
"enabled": true,
"debug": true
},
"errorTracking": {
"enabled": true,
"attachScreenshots": true,
"debug": true
}
}
}
}
{
"skysignal": {
"apiKey": "sk_live_xxxxxxxxxxxx",
"enabled": true,
"debug": false,
"appVersion": "1.2.3",

"collectSystemMetrics": true,
"systemMetricsInterval": 60000,

"collectTraces": true,
"traceMethodArguments": true,
"traceSampleRate": 1.0,

"collectErrors": true,

"collectMongoPool": true,
"mongoPoolInterval": 60000,
"captureIndexUsage": true,
"indexUsageSampleRate": 0.05,

"collectDDPConnections": true,
"collectLiveQueries": true,
"collectHttpRequests": true,

"collectLogs": true,
"collectJobs": true
},
"public": {
"skysignal": {
"publicKey": "pk_live_xxxxxxxxxxxx",
"rum": {
"enabled": true,
"trackUserActions": true,
"trackPageViews": true
},
"errorTracking": {
"enabled": true,
"attachScreenshots": false,
"captureUnhandledRejections": true
}
}
}
}

High-Traffic (Reduced Sampling)​

{
"skysignal": {
"apiKey": "sk_live_xxxxxxxxxxxx",
"traceSampleRate": 0.1,
"rumSampleRate": 0.1,
"indexUsageSampleRate": 0.01,
"systemMetricsInterval": 120000,
"mongoPoolInterval": 120000,
"batchSize": 100,
"flushInterval": 30000
},
"public": {
"skysignal": {
"publicKey": "pk_live_xxxxxxxxxxxx",
"rum": {
"enabled": true,
"trackUserActions": false
}
}
}
}

Server-Only (No RUM)​

{
"skysignal": {
"apiKey": "sk_live_xxxxxxxxxxxx",
"collectSystemMetrics": true,
"collectTraces": true,
"collectErrors": true,
"collectMongoPool": true
}
}

Environment Variables​

Every server-side configuration option has a corresponding SKYSIGNAL_* environment variable. The agent can start from environment variables alone — no Meteor.settings required.

Priority

Meteor settings override environment variables. Env vars act as a fallback for values not specified in settings.

Quick Start with Env Vars​

# Minimal — just the API key
SKYSIGNAL_API_KEY=sk_live_xxxxxxxxxxxx meteor run

# With tuning
SKYSIGNAL_API_KEY=sk_live_xxxxxxxxxxxx \
SKYSIGNAL_DEBUG=true \
SKYSIGNAL_TRACE_SAMPLE_RATE=0.5 \
meteor run

Type Coercion​

Environment variables are strings. The agent automatically coerces them to the correct type:

Target TypeAccepted ValuesExample
Booleantrue, 1, yes / false, 0, no (case-insensitive)SKYSIGNAL_DEBUG=true
IntegerNumeric stringSKYSIGNAL_FLUSH_INTERVAL=30000
FloatNumeric string with decimalSKYSIGNAL_TRACE_SAMPLE_RATE=0.25
StringAny non-empty stringSKYSIGNAL_API_KEY=sk_live_xxx
ArrayComma-separated valuesSKYSIGNAL_LOG_LEVELS=warn,error,fatal

Invalid values are logged as a warning and skipped — the agent will never crash your application due to a misconfigured env var.

Complete Reference​

Core​

Environment VariableConfig KeyType
SKYSIGNAL_API_KEYapiKeyString
SKYSIGNAL_ENDPOINTendpointString
SKYSIGNAL_ENABLEDenabledBoolean
SKYSIGNAL_DEBUGdebugBoolean
SKYSIGNAL_HOSThostString
SKYSIGNAL_APP_VERSIONappVersionString

Batching & Performance​

Environment VariableConfig KeyType
SKYSIGNAL_BATCH_SIZEbatchSizeInteger
SKYSIGNAL_BATCH_SIZE_BYTESbatchSizeBytesInteger
SKYSIGNAL_FLUSH_INTERVALflushIntervalInteger
SKYSIGNAL_MAX_BATCH_RETRIESmaxBatchRetriesInteger
SKYSIGNAL_REQUEST_TIMEOUTrequestTimeoutInteger
SKYSIGNAL_MAX_MEMORY_MBmaxMemoryMBInteger

Sampling​

Environment VariableConfig KeyType
SKYSIGNAL_TRACE_SAMPLE_RATEtraceSampleRateFloat
SKYSIGNAL_RUM_SAMPLE_RATErumSampleRateFloat
SKYSIGNAL_INDEX_USAGE_SAMPLE_RATEindexUsageSampleRateFloat
SKYSIGNAL_LOG_SAMPLE_RATElogSampleRateFloat

Feature Flags​

Environment VariableConfig KeyType
SKYSIGNAL_COLLECT_SYSTEM_METRICScollectSystemMetricsBoolean
SKYSIGNAL_COLLECT_TRACEScollectTracesBoolean
SKYSIGNAL_COLLECT_ERRORScollectErrorsBoolean
SKYSIGNAL_COLLECT_HTTPcollectHttpRequestsBoolean
SKYSIGNAL_COLLECT_MONGO_POOLcollectMongoPoolBoolean
SKYSIGNAL_COLLECT_COLLECTION_STATScollectCollectionStatsBoolean
SKYSIGNAL_COLLECT_DDPcollectDDPConnectionsBoolean
SKYSIGNAL_COLLECT_RUMcollectRUMBoolean
SKYSIGNAL_COLLECT_JOBScollectJobsBoolean
SKYSIGNAL_COLLECT_LOGScollectLogsBoolean
SKYSIGNAL_COLLECT_DNS_TIMINGScollectDnsTimingsBoolean
SKYSIGNAL_COLLECT_OUTBOUND_HTTPcollectOutboundHttpBoolean
SKYSIGNAL_COLLECT_CPU_PROFILEScollectCpuProfilesBoolean
SKYSIGNAL_COLLECT_LIVE_QUERIEScollectLiveQueriesBoolean
SKYSIGNAL_COLLECT_PUBLICATIONScollectPublicationsBoolean
SKYSIGNAL_COLLECT_ENVIRONMENTcollectEnvironmentBoolean
SKYSIGNAL_COLLECT_VULNERABILITIEScollectVulnerabilitiesBoolean
SKYSIGNAL_COLLECT_DEPRECATED_APIScollectDeprecatedApisBoolean

Collection Intervals​

Environment VariableConfig KeyType
SKYSIGNAL_SYSTEM_METRICS_INTERVALsystemMetricsIntervalInteger
SKYSIGNAL_MONGO_POOL_INTERVALmongoPoolIntervalInteger
SKYSIGNAL_COLLECTION_STATS_INTERVALcollectionStatsIntervalInteger
SKYSIGNAL_DDP_CONNECTIONS_INTERVALddpConnectionsIntervalInteger
SKYSIGNAL_JOBS_INTERVALjobsIntervalInteger
SKYSIGNAL_DNS_TIMINGS_INTERVALdnsTimingsIntervalInteger
SKYSIGNAL_OUTBOUND_HTTP_INTERVALoutboundHttpIntervalInteger
SKYSIGNAL_LIVE_QUERIES_INTERVALliveQueriesIntervalInteger

Log Collection​

Environment VariableConfig KeyType
SKYSIGNAL_LOG_LEVELSlogLevelsComma-separated
SKYSIGNAL_LOG_MAX_MESSAGE_LENGTHlogMaxMessageLengthInteger
SKYSIGNAL_LOG_CAPTURE_CONSOLElogCaptureConsoleBoolean
SKYSIGNAL_LOG_CAPTURE_METEOR_LOGlogCaptureMeteorLogBoolean

CPU Profiling​

Environment VariableConfig KeyType
SKYSIGNAL_CPU_PROFILE_THRESHOLDcpuProfileThresholdFloat
SKYSIGNAL_CPU_PROFILE_DURATIONcpuProfileDurationInteger
SKYSIGNAL_CPU_PROFILE_COOLDOWNcpuProfileCooldownInteger

Other​

Environment VariableConfig KeyType
SKYSIGNAL_LIVE_QUERIES_MAX_OBSERVERSliveQueriesMaxObserversInteger
SKYSIGNAL_USE_WORKER_THREADuseWorkerThreadBoolean
SKYSIGNAL_WORKER_THRESHOLDworkerThresholdInteger
Client-side config

Environment variables only apply to server-side configuration. Client-side RUM and error tracking must be configured via Meteor.settings.public.skysignal.

Programmatic Configuration​

For advanced use cases, configure the agent programmatically:

import { SkySignalAgent } from 'meteor/skysignal:agent';

// Configure with custom options
SkySignalAgent.configure({
apiKey: process.env.SKYSIGNAL_API_KEY,
debug: true,
traceSampleRate: 0.5,
collectJobs: false
});

// Start the agent
SkySignalAgent.start();
Override auto-start

If using programmatic configuration, ensure your settings.json doesn't have a skysignal.apiKey to prevent auto-start.

Performance Impact​

The agent is designed for minimal overhead:

  • CPU: < 1% additional usage
  • Memory: < 50MB (configurable via maxMemoryMB)
  • Latency: < 2ms per method call

Reducing Impact​

For resource-constrained environments:

{
"skysignal": {
"apiKey": "sk_live_xxx",
"traceSampleRate": 0.1,
"systemMetricsInterval": 300000,
"mongoPoolInterval": 300000,
"traceMethodArguments": false,
"captureIndexUsage": false,
"batchSize": 100,
"flushInterval": 60000
}
}

Next Steps​