EdgeStream
observability-hooks-js Package
The @edge-stream/observability-hooks-js package provides hook implementations that forward pipeline events to external observability platforms: Splunk, Elasticsearch, Datadog, New Relic, Sumo Logic, Graylog, and any REST endpoint via WebMcpHook.
Available Hooks
| Hook | Destination | Config Key |
|---|---|---|
SplunkLogHook | Splunk HEC | hecUrl, hecToken, sourcetype |
ElasticsearchHook | Elasticsearch | url, index, apiKey |
DatadogHook | Datadog Logs API | apiKey, site |
NewRelicHook | New Relic Logs API | licenseKey, region |
SumoLogicHook | Sumo Logic HTTP Source | collectorUrl |
GraylogHook | Graylog GELF HTTP | url, port |
WebMcpHook | Any REST endpoint | endpoint, headers, retries |
BaseLogHook Batching Pattern
All platform hooks extend BaseLogHook which implements automatic batching with configurable flush intervals:
abstract class BaseLogHook<T> extends BaseHook {
// Accumulates log records in a batch
// Flushes when: batchSize is reached OR flushInterval expires
protected async batchFlush(doc: T): Promise<void>;
// Subclass sends the batch to the platform
protected abstract sendBatch(docs: T[]): Promise<void>;
}
// Defaults:
// batchSize: 100 documents
// flushInterval: 5000ms (5 seconds)
Splunk Integration
import { SplunkLogHook } from '@edge-stream/observability-hooks-js';
const server = stream.server('bas')!;
server.incomingPipeline.addHook(new SplunkLogHook({
hecUrl: 'https://splunk.company.com:8088/services/collector',
hecToken: process.env.SPLUNK_HEC_TOKEN!,
sourcetype: 'edgestream:pipeline',
batchSize: 100,
flushInterval: 5000, // flush at least every 5 seconds
}));
Datadog Integration
import { DatadogHook } from '@edge-stream/observability-hooks-js';
server.incomingPipeline.addHook(new DatadogHook({
apiKey: process.env.DATADOG_API_KEY!,
site: 'datadoghq.com', // or 'datadoghq.eu', 'us3.datadoghq.com', etc.
batchSize: 50,
flushInterval: 3000,
}));
Generic REST Endpoint (WebMcpHook)
import { WebMcpHook } from '@edge-stream/observability-hooks-js';
// Forward every pipeline event to a custom webhook
server.incomingPipeline.addHook(new WebMcpHook({
endpoint: 'https://internal-monitoring.company.com/webhook',
headers: {
'X-API-Key': process.env.MONITORING_KEY!,
'Content-Type': 'application/json',
},
retries: 3,
}));
HookActivityLogger (from edge-stream-js)
The in-process observability hook — feeds HooksMonitor and SubscribersMonitor. Unlike the external platform hooks, it writes to the local LoggingService ring buffer instead of a remote endpoint:
import { HookActivityLogger } from 'edge-stream-js';
// (also re-exported as LogHook from @edge-stream/observability-hooks-js)
server.incomingPipeline.addHook(new HookActivityLogger()); // priority 5
// Respects LogSettings.isHookLoggingEnabled()
// Use getLogSettings().setHookLoggingEnabled(false) to disable at runtime
Combining Multiple Observability Hooks
// Development: in-process monitor only
if (import.meta.env.DEV) {
server.incomingPipeline.addHook(new HookActivityLogger()); // local UI monitor
}
// Production: external platform logging
if (import.meta.env.PROD) {
server.incomingPipeline.addHook(new DatadogHook({
apiKey: env.DATADOG_KEY,
site: 'datadoghq.com',
batchSize: 100,
flushInterval: 5000,
}));
}