Wired streams (serverless)
Wired streams are the simplest managed ingestion path. Elasticsearch owns templates and lifecycle — you send documents to a wired bulk endpoint.
For the full reference (endpoints, mappings caveats, Kibana Streams), see Wired streams under index management.
- Serverless Elasticsearch or Elastic Stack with wired streams enabled
- ECS or OTel log documents that should land in Kibana Streams
- You want the minimum local configuration (no template bootstrap)
public class LogEntry
{
[Timestamp]
[JsonPropertyName("@timestamp")]
public DateTimeOffset Timestamp { get; set; }
[JsonPropertyName("log.level")]
public string Level { get; set; }
[JsonPropertyName("message")]
public string Message { get; set; }
[JsonPropertyName("service.name")]
public string Service { get; set; }
}
Prefer LogsEcs when sending Elastic Common Schema documents (including payloads from ecs-dotnet):
[ElasticsearchMappingContext]
[WiredStream<LogEntry>(
Type = "logs",
Dataset = "myapp",
IngestEndpoint = WiredStreamIngestEndpoint.LogsEcs)]
public static partial class WiredContext;
var options = new IngestChannelOptions<LogEntry>(transport, WiredContext.LogEntry.Context);
using var channel = new IngestChannel<LogEntry>(options);
// Bootstrap is a no-op for wired streams
await channel.BootstrapElasticsearchAsync(BootstrapMethod.Failure);
foreach (var entry in logEntries)
channel.TryWrite(entry);
await channel.WaitForDrainAsync(TimeSpan.FromSeconds(10), ctx);
| Behavior | Strategy | Why |
|---|---|---|
| Ingest | WiredStreamIngestStrategy |
Sends to logs.ecs/_bulk (or logs / logs.otel) |
| Bootstrap | NoopBootstrapStep |
Elasticsearch manages all templates |
| Provisioning | AlwaysCreateProvisioning |
No local index management |
| Alias | NoAliasStrategy |
Elasticsearch manages routing |
- Wired streams: reference
- ECS and OTel endpoints: endpoint choice and ecs-dotnet paths
- Streams: classic vs wired
- Time-series: data streams with local template management