ECS 摄入通道编辑

Elastic.Ingest.Elasticsearch 的一种专门化,它提供了两个通道实现,可以轻松写入 ECS 格式的数据,并使用 ECS 映射和设置引导目标数据流/索引。

安装编辑

添加对 Elastic.Ingest.Elasticsearch.CommonSchema 包的引用

<PackageReference Include="Elastic.Ingest.Elasticsearch.CommonSchema" Version="8.6.0" />

用法编辑

EcsDataStreamChannel<TEvent>编辑

一个专门用于将带时间戳的数据写入 Elasticsearch 数据流的通道。

可以创建一个通道来将数据推送到 logs-dotnet-default 数据流。

var dataStream = new DataStreamName("logs", "dotnet");
var bufferOptions = new BufferOptions { }
var options = new DataStreamChannelOptions<EcsDocument>(transport)
{
  DataStream = dataStream,
  BufferOptions = bufferOptions
};
var channel = new EcsDataStreamChannel<EcsDocument>(options);

这篇博文 中了解有关 Elastic 数据流命名约定的更多信息。

现在我们可以使用 EcsDataStreamChannel 将数据推送到 Elasticsearch

var doc = new EcsDocument
{
    Timestamp = DateTimeOffset.Now,
    Message = "Hello World!",
}
channel.TryWrite(doc);

EcsIndexChannel<TEvent>编辑

一个专门用于将目录数据写入 Elastic 索引的通道。

我们可以创建一个 EcsIndexChannel<> 来推送 EcsDocument(或子类)实例。

var options = new IndexChannelOptions<EcsDocument>(transport)
{
    IndexFormat = "catalog-data-{0:yyyy.MM.dd}",
    // BulkOperationIdLookup = c => null,
    TimestampLookup = c => c.Timestamp,
};
var channel = new EcsIndexChannel<CatalogDocument>(options);

现在我们可以使用以下方式推送数据

var doc = new CatalogDocument
{
    Created = date,
    Title = "Hello World!",
    Id = "hello-world"
}
channel.TryWrite(doc);

这将把数据推送到 catalog-data-2023.01.1,因为 TimestampLookupTimestamp 生成到 IndexFormat

IndexFormat 也可以只是一个固定字符串,写入 Elasticsearch 别名/索引。

BulkOperationIdLookup 确定是否应该使用 createindex 操作将文档推送到 Elasticsearch。

引导目标数据流或索引编辑

可以选择使用以下方法引导目标数据流或索引。

await channel.BootstrapElasticsearchAsync(BootstrapMethod.Failure, "7-days-default");

这将引导

如果索引模板已存在,则不会进行进一步的引导。

就像 Elastic.Ingest.Elasticsearch 一样,该通道知道 logsmetrics 有默认的组件模板,并确保新的索引模板引用它们。