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:
- Meteor.settings (highest — always wins)
- Environment variables (fallback when settings don't specify a value)
- 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": {
},
"public": {
"skysignal": {
}
}
}
Server-Side Configuration
Configure server-side monitoring via settings.skysignal or environment variables:
Required
| Option | Type | Description |
|---|
apiKey | String | Your SkySignal API key (sk_xxx format) |
General Options
| Option | Type | Default | Description |
|---|
enabled | Boolean | true | Enable/disable the agent |
debug | Boolean | false | Enable verbose debug logging |
endpoint | String | https://dash.skysignal.app | API endpoint URL |
host | String | Auto-detected | Override hostname identification |
appVersion | String | Auto-detected | Application version for tracking releases |
| Option | Type | Default | Description |
|---|
batchSize | Integer | 50 | Max items before auto-flush |
batchSizeBytes | Integer | 262144 | Max bytes per batch (256KB) |
flushInterval | Integer | 10000 | Flush interval in ms |
maxBatchRetries | Integer | 3 | Max retries for failed batches |
requestTimeout | Integer | 3000 | API request timeout in ms |
maxMemoryMB | Integer | 50 | Max memory for batches |
Sampling
| Option | Type | Default | Description |
|---|
traceSampleRate | Number | 1.0 | Method trace sampling (0.0-1.0) |
rumSampleRate | Number | 0.5 | RUM data sampling (0.0-1.0) |
System Metrics
| Option | Type | Default | Description |
|---|
collectSystemMetrics | Boolean | true | Collect CPU, memory, event loop |
systemMetricsInterval | Integer | 60000 | Collection interval (ms) |
Method Tracing
| Option | Type | Default | Description |
|---|
collectTraces | Boolean | true | Track Meteor Methods |
traceMethodArguments | Boolean | true | Capture method arguments |
maxArgLength | Integer | 1000 | Max string length for arguments |
traceMethodOperations | Boolean | true | Capture detailed operation timeline |
Error Tracking
| Option | Type | Default | Description |
|---|
collectErrors | Boolean | true | Track server-side errors |
MongoDB Monitoring
| Option | Type | Default | Description |
|---|
collectMongoPool | Boolean | true | Track connection pool stats |
mongoPoolInterval | Integer | 60000 | Collection interval (ms) |
mongoPoolFixedConnectionMemory | Number | null | Fixed bytes per connection |
collectCollectionStats | Boolean | true | Track collection statistics |
collectionStatsInterval | Integer | 300000 | Collection interval (5 min) |
Index Usage Tracking
| Option | Type | Default | Description |
|---|
captureIndexUsage | Boolean | true | Capture MongoDB explain() data |
indexUsageSampleRate | Number | 0.05 | Sample rate for explain (5%) |
explainVerbosity | String | executionStats | queryPlanner, executionStats, or allPlansExecution |
explainSlowQueriesOnly | Boolean | false | Only explain slow queries |
DDP Connections
| Option | Type | Default | Description |
|---|
collectDDPConnections | Boolean | true | Track DDP connections |
ddpConnectionsInterval | Integer | 30000 | Collection interval (ms) |
Live Queries
| Option | Type | Default | Description |
|---|
collectLiveQueries | Boolean | true | Track 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
| Option | Type | Default | Description |
|---|
collectHttpRequests | Boolean | true | Track HTTP requests |
Background Jobs
| Option | Type | Default | Description |
|---|
collectJobs | Boolean | true | Track background jobs |
jobsInterval | Integer | 30000 | Collection interval (ms) |
jobsPackage | String | Auto-detect | Job package (msavin:sjobs) |
Log Collection
| Option | Type | Default | Description |
|---|
collectLogs | Boolean | true | Enable structured log collection |
logLevels | Array | ["info", "warn", "error", "fatal"] | Which log levels to capture |
logSampleRate | Number | 1.0 | Sample rate for logs (0.0-1.0) |
logMaxMessageLength | Integer | 10000 | Max characters per log message |
logCaptureConsole | Boolean | true | Intercept console.log/warn/error/etc |
logCaptureMeteorLog | Boolean | true | Intercept 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
| Option | Type | Default | Description |
|---|
useWorkerThread | Boolean | false | Offload to worker thread |
workerThreshold | Integer | 50 | Pool size to trigger worker |
Client-Side Configuration (RUM)
Configure Real User Monitoring in settings.public.skysignal:
Required
| Option | Type | Description |
|---|
publicKey | String | Your SkySignal public key (pk_xxx format) |
RUM Options
Configure under settings.public.skysignal.rum:
| Option | Type | Default | Description |
|---|
enabled | Boolean | true | Enable RUM collection |
trackUserActions | Boolean | true | Track clicks, form submits |
trackPageViews | Boolean | true | Track page navigation |
debug | Boolean | false | Enable debug logging |
Error Tracking Options
Configure under settings.public.skysignal.errorTracking:
| Option | Type | Default | Description |
|---|
enabled | Boolean | true | Enable client error tracking |
attachScreenshots | Boolean | false | Capture screenshots on error |
screenshotQuality | Number | 0.7 | Screenshot JPEG quality |
screenshotSamplingRate | Number | 100 | % of errors to screenshot |
maxScreenshotSize | Integer | 512000 | Max screenshot size (bytes) |
redactSelectors | Array | [] | CSS selectors to redact |
captureUnhandledRejections | Boolean | true | Capture Promise rejections |
captureConsoleErrors | Boolean | false | Capture console.error calls |
ignoreErrors | Array | [] | Error messages to ignore |
debug | Boolean | false | Enable 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
}
}
}
}
Production (Full Featured)
{
"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.
Meteor settings override environment variables. Env vars act as a fallback for values not specified in settings.
Quick Start with Env Vars
SKYSIGNAL_API_KEY=sk_live_xxxxxxxxxxxx meteor run
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 Type | Accepted Values | Example |
|---|
| Boolean | true, 1, yes / false, 0, no (case-insensitive) | SKYSIGNAL_DEBUG=true |
| Integer | Numeric string | SKYSIGNAL_FLUSH_INTERVAL=30000 |
| Float | Numeric string with decimal | SKYSIGNAL_TRACE_SAMPLE_RATE=0.25 |
| String | Any non-empty string | SKYSIGNAL_API_KEY=sk_live_xxx |
| Array | Comma-separated values | SKYSIGNAL_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 Variable | Config Key | Type |
|---|
SKYSIGNAL_API_KEY | apiKey | String |
SKYSIGNAL_ENDPOINT | endpoint | String |
SKYSIGNAL_ENABLED | enabled | Boolean |
SKYSIGNAL_DEBUG | debug | Boolean |
SKYSIGNAL_HOST | host | String |
SKYSIGNAL_APP_VERSION | appVersion | String |
| Environment Variable | Config Key | Type |
|---|
SKYSIGNAL_BATCH_SIZE | batchSize | Integer |
SKYSIGNAL_BATCH_SIZE_BYTES | batchSizeBytes | Integer |
SKYSIGNAL_FLUSH_INTERVAL | flushInterval | Integer |
SKYSIGNAL_MAX_BATCH_RETRIES | maxBatchRetries | Integer |
SKYSIGNAL_REQUEST_TIMEOUT | requestTimeout | Integer |
SKYSIGNAL_MAX_MEMORY_MB | maxMemoryMB | Integer |
Sampling
| Environment Variable | Config Key | Type |
|---|
SKYSIGNAL_TRACE_SAMPLE_RATE | traceSampleRate | Float |
SKYSIGNAL_RUM_SAMPLE_RATE | rumSampleRate | Float |
SKYSIGNAL_INDEX_USAGE_SAMPLE_RATE | indexUsageSampleRate | Float |
SKYSIGNAL_LOG_SAMPLE_RATE | logSampleRate | Float |
Feature Flags
| Environment Variable | Config Key | Type |
|---|
SKYSIGNAL_COLLECT_SYSTEM_METRICS | collectSystemMetrics | Boolean |
SKYSIGNAL_COLLECT_TRACES | collectTraces | Boolean |
SKYSIGNAL_COLLECT_ERRORS | collectErrors | Boolean |
SKYSIGNAL_COLLECT_HTTP | collectHttpRequests | Boolean |
SKYSIGNAL_COLLECT_MONGO_POOL | collectMongoPool | Boolean |
SKYSIGNAL_COLLECT_COLLECTION_STATS | collectCollectionStats | Boolean |
SKYSIGNAL_COLLECT_DDP | collectDDPConnections | Boolean |
SKYSIGNAL_COLLECT_RUM | collectRUM | Boolean |
SKYSIGNAL_COLLECT_JOBS | collectJobs | Boolean |
SKYSIGNAL_COLLECT_LOGS | collectLogs | Boolean |
SKYSIGNAL_COLLECT_DNS_TIMINGS | collectDnsTimings | Boolean |
SKYSIGNAL_COLLECT_OUTBOUND_HTTP | collectOutboundHttp | Boolean |
SKYSIGNAL_COLLECT_CPU_PROFILES | collectCpuProfiles | Boolean |
SKYSIGNAL_COLLECT_LIVE_QUERIES | collectLiveQueries | Boolean |
SKYSIGNAL_COLLECT_PUBLICATIONS | collectPublications | Boolean |
SKYSIGNAL_COLLECT_ENVIRONMENT | collectEnvironment | Boolean |
SKYSIGNAL_COLLECT_VULNERABILITIES | collectVulnerabilities | Boolean |
SKYSIGNAL_COLLECT_DEPRECATED_APIS | collectDeprecatedApis | Boolean |
Collection Intervals
| Environment Variable | Config Key | Type |
|---|
SKYSIGNAL_SYSTEM_METRICS_INTERVAL | systemMetricsInterval | Integer |
SKYSIGNAL_MONGO_POOL_INTERVAL | mongoPoolInterval | Integer |
SKYSIGNAL_COLLECTION_STATS_INTERVAL | collectionStatsInterval | Integer |
SKYSIGNAL_DDP_CONNECTIONS_INTERVAL | ddpConnectionsInterval | Integer |
SKYSIGNAL_JOBS_INTERVAL | jobsInterval | Integer |
SKYSIGNAL_DNS_TIMINGS_INTERVAL | dnsTimingsInterval | Integer |
SKYSIGNAL_OUTBOUND_HTTP_INTERVAL | outboundHttpInterval | Integer |
SKYSIGNAL_LIVE_QUERIES_INTERVAL | liveQueriesInterval | Integer |
Log Collection
| Environment Variable | Config Key | Type |
|---|
SKYSIGNAL_LOG_LEVELS | logLevels | Comma-separated |
SKYSIGNAL_LOG_MAX_MESSAGE_LENGTH | logMaxMessageLength | Integer |
SKYSIGNAL_LOG_CAPTURE_CONSOLE | logCaptureConsole | Boolean |
SKYSIGNAL_LOG_CAPTURE_METEOR_LOG | logCaptureMeteorLog | Boolean |
CPU Profiling
| Environment Variable | Config Key | Type |
|---|
SKYSIGNAL_CPU_PROFILE_THRESHOLD | cpuProfileThreshold | Float |
SKYSIGNAL_CPU_PROFILE_DURATION | cpuProfileDuration | Integer |
SKYSIGNAL_CPU_PROFILE_COOLDOWN | cpuProfileCooldown | Integer |
Other
| Environment Variable | Config Key | Type |
|---|
SKYSIGNAL_LIVE_QUERIES_MAX_OBSERVERS | liveQueriesMaxObservers | Integer |
SKYSIGNAL_USE_WORKER_THREAD | useWorkerThread | Boolean |
SKYSIGNAL_WORKER_THRESHOLD | workerThreshold | Integer |
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';
SkySignalAgent.configure({
apiKey: process.env.SKYSIGNAL_API_KEY,
debug: true,
traceSampleRate: 0.5,
collectJobs: false
});
SkySignalAgent.start();
If using programmatic configuration, ensure your settings.json doesn't have a skysignal.apiKey to prevent auto-start.
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