Expanded Built-In Sinks

Use the expanded sink set when LoadStrike run data should flow into observability platforms, databases, message streams, StatsD collectors, JSONL files, or a generic webhook destination.

What this page helps you do

What this page helps you do

Use the expanded sink set when LoadStrike run data should flow into observability platforms, databases, message streams, StatsD collectors, JSONL files, or a generic webhook destination.

Who this is for

Teams exporting final run data and realtime metrics into supported observability backends.

Prerequisites

  • A run result or sink destination you want to wire into the wider observability stack

By the end

A sink-specific setup path that stays tied to the same LoadStrike report model.

Use this page when

Use this page when the local report is not the only destination and you need to wire realtime or final export into a supported sink.

Visual guide

Realtime reporting flow showing LoadStrike events moving through a sink to observability backends.
Realtime reporting sinks receive interval snapshots during execution and final metadata when the run completes.

Sample Report Data Rows

Scope    Scenario     Result Count RPS  LatencyP50Ms LatencyP80Ms LatencyP85Ms LatencyP90Ms LatencyP95Ms LatencyP99Ms
Scenario reports-demo OK     675   15.0 21.4         30.2         33.0         36.8         48.6         72.1

LatencyTable Scenario     Result Count LatencyP50Ms LatencyP95Ms
LatencyTable reports-demo OK     675   21.4         48.6
LatencyTable reports-demo FAIL   12    35.9         79.2

StatusCode Result Percent
200        OK     97.48
500        FAIL   2.52

FailedStatus Scope     Scenario     Step StatusCode Count Percent
FailedStatus Scenario  reports-demo      500       12    1.75

Reporting

Realtime reporting

Choose Portal Reporting when users should review runs in the customer portal, pick the built-in sink page that matches the backend your team already runs, or open Custom Reporting when you need to implement your own destination. Each tab opens a dedicated page with the settings, behavior, and lifecycle details for that reporting path.

Guide

What The Expanded Set Covers

The expanded built-in sink set includes Prometheus remote write, Amazon CloudWatch, Dynatrace, Elasticsearch, OpenSearch, Kafka, StatsD, DogStatsD, New Relic, Netdata-compatible StatsD, JSONL file streaming, and generic webhook destinations. They sit alongside the existing InfluxDB, TimescaleDB, Grafana Loki, Datadog, Splunk HEC, OTEL Collector, portal reporting, and custom sink options.

Shared Export Model

Built-in sinks receive the common LoadStrike reporting model: individual attempt batches where the destination supports event records, one final event per completed correlation outcome, realtime scenario stats, projected metrics, final run summaries, final metric snapshots, threshold results, report-file metadata, sink error metadata, and detailed report rows when the run produces them. Correlation outcome events retain tracking and GatherBy dimensions without substituting SDK percentile aggregates. Metric-only destinations expose the closest supported per-attempt projection and report that the complete event shape is unavailable. Choose the destination based on where your team already reviews performance evidence.

Destination Families

Use Prometheus remote write, CloudWatch, Dynatrace, New Relic, StatsD, DogStatsD, or Netdata when metric workflows are the priority. StatsD-compatible destinations receive native protocol measurements for each captured attempt plus stream-delivery counts. Use Elasticsearch, OpenSearch, JSONL, or webhook sinks when searchable event envelopes are more useful. HTTP event destinations receive bounded compressed JSON attempt batches. Use Kafka when the organization wants LoadStrike reporting events on an internal stream for downstream processing.

Configuration

Configure sinks directly in code or bind missing values from LoadStrike:ReportingSinks:* infra-config sections. HTTP-style sinks use endpoint URL, timeout, headers, and static tags. Kafka needs a topic and either a host-provided publisher or runtime configuration. JSONL needs a file path. StatsD-style sinks use a host and port, an optional metric prefix, and optional DogStatsD tags.

Failure Behavior

Sink initialization, realtime export, raw delivery, completion, final export, stop, and dispose all use the configured bounded retry policy and remain isolated from scenario execution. A recovered callback adds no final sink error. Persistent sink failures are recorded in the run result and can disable that sink for the current run, while the load test itself continues. Stop and dispose are best-effort cleanup, and an exhausted stop callback does not prevent dispose.

Plan Gate

Expanded built-in reporting sinks are available on Enterprise. The same runner key validates the scenario, the selected sinks, portal reporting, and any transport features used by the run.

Expanded sink setup

Use these samples when LoadStrike reporting events should leave the local report pipeline and feed the observability, stream, file, or webhook destination your team already operates.

If you run these examples locally, add a valid runner key before execution starts. Set it with WithRunnerKey("...") or the config key LoadStrike:RunnerKey.

HTML reports include a top-right Light/Dark theme toggle and responsive offline SVG charts. Use exact-value tooltips, legends, zoom, pan, reset, the accessible expanded view, chart-title search, and grid-density controls to inspect dense results. Light is the default report theme.

Expanded Built-In Sinks

using LoadStrike;

var scenario = LoadStrikeScenario.Empty("orders-expanded-sinks")
    .WithLoadSimulations(LoadStrikeSimulation.Inject(20, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(120)));

var prometheus = new PrometheusRemoteWriteReportingSink(new PrometheusRemoteWriteReportingSinkOptions
{
    BaseUrl = "https://prometheus.example.com",
    BearerToken = "prometheus-token"
});

var kafka = new KafkaReportingSink(new KafkaReportingSinkOptions
{
    Topic = "loadstrike-reporting",
    PublishAsync = (topic, payload, cancellationToken) => Task.CompletedTask
});

var jsonl = new JsonlFileReportingSink(new JsonlFileReportingSinkOptions
{
    FilePath = "./reports/loadstrike-events.jsonl"
});

var webhook = new GenericWebhookReportingSink(new GenericWebhookReportingSinkOptions
{
    Url = "https://hooks.example.com/loadstrike",
    Secret = "webhook-secret"
});

LoadStrikeRunner.RegisterScenarios(scenario)
    .WithReportingInterval(TimeSpan.FromSeconds(5))
    .WithReportingSinks(prometheus, kafka, jsonl, webhook)
    .WithRunnerKey("rkl_your_enterprise_runner_key")
    .Run();

Expanded sink families

Metrics-first sinks

Prometheus remote write, CloudWatch, Dynatrace, New Relic, StatsD, DogStatsD, and Netdata-compatible StatsD are useful when dashboard and alert metric series are the primary destination.

Searchable event sinks

Elasticsearch, OpenSearch, JSONL file streaming, and generic webhook sinks keep LoadStrike reporting events easy to search, replay, ship, or transform.

Stream sink

Kafka publishes LoadStrike reporting envelopes to a topic so downstream consumers can enrich, route, store, or alert on them.

Individual attempts

Event-capable sinks retain each attempt in bounded batches. Metrics-first sinks use the closest supported per-attempt projection and record a shape-limited warning when the full observation envelope cannot be represented.

Shared lifecycle

All built-in sinks participate in the same Init, Start, SaveRealtimeStats, SaveRealtimeMetrics, SaveRunResult, Stop, and Dispose lifecycle.

Failure handling

Every reporting-sink callback receives three retries by default with 250 ms, 500 ms, and 1 second delays. Recovered callbacks add no final sink error or warning. Only exhausted raw-observation delivery counts as dropped observations; other exhausted callbacks are reported against that sink. Stop and dispose remain best-effort cleanup.

Plan gate

Expanded built-in sinks are available on Enterprise.

{
  "LoadStrike": {
    "ReportingSinks": {
      "PrometheusRemoteWrite": {
        "BaseUrl": "https://prometheus.example.com",
        "EndpointPath": "/api/v1/write",
        "BearerToken": "prometheus-token"
      },
      "CloudWatch": {
        "Region": "eu-west-2",
        "Namespace": "LoadStrike"
      },
      "Dynatrace": {
        "BaseUrl": "https://dynatrace.example.com",
        "ApiToken": "dynatrace-token"
      },
      "Elasticsearch": {
        "BaseUrl": "https://elastic.example.com",
        "IndexName": "loadstrike-runs"
      },
      "OpenSearch": {
        "BaseUrl": "https://opensearch.example.com",
        "IndexName": "loadstrike-runs"
      },
      "Kafka": {
        "BootstrapServers": "kafka.example.com:9092",
        "Topic": "loadstrike-reporting"
      },
      "StatsD": {
        "Prefix": "loadstrike"
      },
      "DogStatsD": {
        "Prefix": "loadstrike"
      },
      "NewRelic": {
        "BaseUrl": "https://metric-api.newrelic.com",
        "LicenseKey": "new-relic-license-key"
      },
      "Netdata": {
        "Prefix": "loadstrike"
      },
      "Jsonl": {
        "FilePath": "./reports/loadstrike-events.jsonl"
      },
      "Webhook": {
        "Url": "https://hooks.example.com/loadstrike",
        "Secret": "webhook-secret"
      }
    }
  }
}

Use WithReportingSinks(...) for code-first setup, or LoadInfraConfig(...) when deployment-specific endpoint, token, topic, or file path values should live outside the test source.