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