ECS 摄入通道
编辑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
,因为 TimestampLookup
将 Timestamp
生成到 IndexFormat
。
IndexFormat
也可以只是一个固定字符串,写入 Elasticsearch 别名/索引。
BulkOperationIdLookup
确定是否应该使用 create
或 index
操作将文档推送到 Elasticsearch。
引导目标数据流或索引编辑
可以选择使用以下方法引导目标数据流或索引。
await channel.BootstrapElasticsearchAsync(BootstrapMethod.Failure, "7-days-default");
这将引导
- 为所有 ECS 字段集设置组件模板
- 参考:https://elastic.ac.cn/guide/en/ecs/8.11/ecs-field-reference.html
- 模板:https://github.com/elastic/ecs/tree/main/generated/elasticsearch/composable/component
- 为数据流/索引创建一个特殊的
*-settings
组件模板,用于设置 ILM。 - 为目标数据流或索引设置一个 索引模板。
如果索引模板已存在,则不会进行进一步的引导。
就像 Elastic.Ingest.Elasticsearch
一样,该通道知道 logs
和 metrics
有默认的组件模板,并确保新的索引模板引用它们。