Elastic.CommonSchema 8.11.1
前缀已保留
dotnet add package Elastic.CommonSchema --version 8.11.1
NuGet\Install-Package Elastic.CommonSchema -Version 8.11.1
<PackageReference Include="Elastic.CommonSchema" Version="8.11.1" />
paket add Elastic.CommonSchema --version 8.11.1
#r "nuget: Elastic.CommonSchema, 8.11.1"
// Install Elastic.CommonSchema as a Cake Addin #addin nuget:?package=Elastic.CommonSchema&version=8.11.1 // Install Elastic.CommonSchema as a Cake Tool #tool nuget:?package=Elastic.CommonSchema&version=8.11.1
Elastic Common Schema .NET
Elastic.CommonSchema
项目包含 Elastic Common Schema (ECS) 的完整 C# 表示形式 - 请参阅 文档。
该库的目的是形成一个可靠且正确的基数,以便集成到使用Microsoft .NET和ECS的应用中。
这些类型可以直接使用,也可以与Elasticsearch的官方.NET客户端结合使用。这些类型使用了相应的DataMember
属性进行注释,使得Elasticsearch.net客户端支持开箱即用的序列化。
另请参阅
- Elastic.Ingest.Elasticsearch.CommonSchema,以轻松将ECS文档持久化到Elasticsearch或Elastic Cloud。
包列表
.NET程序集以包名Elastic.CommonSchema发布到NuGet。
主分支在成功进行CI构建后将新的NuGet包推送到https://ci.appveyor.com/nuget/ecs-dotnet。
版本
Elastic.CommonSchema包的版本与发布的ECS版本相匹配,具有相同的对应分支名称。
- 嵌套架构(C#类型是从这个YAML文件生成的):https://github.com/elastic/ecs/blob/v1.4.0/generated/ecs/ecs_nested.yml
- .NET类型:https://github.com/elastic/ecs-dotnet/tree/v1.4.0
NuGet包的版本号必须与Elasticsearch中使用的ECS精确版本相匹配。尝试使用不匹配的版本,例如,使用1.2.0版本的NuGet包而不是索引配置为使用1.1.0版本ECS模板的Elasticsearch索引,会导致索引和数据问题。
开始使用
安装
您可以通过包管理器控制台安装Elastic.CommonSchema。
PM> Install-Package Elastic.CommonSchema
或者,您可以在包管理器UI中简单地搜索Elastic.CommonSchema。
用法
创建ECS事件
创建新的ECS事件就像实例化一个对象一样简单。
var ecsDocument = new EcsDocument
{
Timestamp = DateTimeOffset.Parse("2019-10-23T19:44:38.485Z"),
Dns = new Dns
{
Id = "23666",
OpCode = "QUERY",
Type = "answer",
QuestionName = "www.example.com",
QuestionType = "A",
QuestionClass = "IN",
QuestionRegisteredDomain = "example.com",
HeaderFlags = new[] { "RD", "RA" },
ResponseCode = "NOERROR",
ResolvedIp = new[] { "10.0.190.47", "10.0.190.117" },
Answers = new[]
{
new DnsAnswers
{
Data = "10.0.190.47",
Name = "www.example.com",
Type = "A",
Class = "IN",
Ttl = 59
},
new DnsAnswers
{
Data = "10.0.190.117",
Name = "www.example.com",
Type = "A",
Class = "IN",
Ttl = 59
}
}
},
Network = new Network
{
Type = "ipv4",
Transport = "udp",
Protocol = "dns",
Direction = "outbound",
CommunityId = "1:19beef+RWVW9+BEEF/Q45VFU+2Y=",
Bytes = 126
},
Source = new Source { Ip = "192.168.86.26", Port = 5785, Bytes = 31 },
Destination = new Destination { Ip = "8.8.4.4", Port = 53, Bytes = 95 },
Client = new Client { Ip = "192.168.86.26", Port = 5785, Bytes = 31 },
Server = new Server { Ip = "8.8.4.4", Port = 53, Bytes = 95 },
Event = new Event
{
Duration = 122433000,
Start = DateTimeOffset.Parse("2019-10-23T19:44:38.485Z"),
End = DateTimeOffset.Parse("2019-10-23T19:44:38.607Z"),
Kind = "event",
Category = new[] { "network_traffic" }
},
Ecs = new Ecs { Version = "1.2.0" },
Metadata = new Dictionary<string, object> { { "client", "ecs-dotnet" } }
};
动态分配ECS字段
此外,还可以通过以下方式动态分配ecs字段:
ecsDocument.AssignProperty("orchestrator.cluster.id", "id");
这会将ecsDocument.Orchestrator.ClusterId
分配给"id"
,并在需要时自动创建一个新的Orchestrator
实例。
不是已知ecs
字段的任何string
或boolean
值都将分配给labels.*
,其余的分配给metatetadata.*
关于Metadata
属性的说明
C# EcsDocument
类型包含一个名为Metadata
的属性,其签名如下:
/// <summary>
/// Container for additional metadata against this event.
/// </summary>
[JsonPropertyName("metadata"), DataMember(Name = "metadata")]
public IDictionary<string, object> Metadata { get; set; }
此属性不是ECS规范的一部分,但作为索引补充信息的手段而包含在内。
扩展EcsDocument
在实际使用中,如果使用IDictionary<string, object> Metadata
属性不足以使用,或者有更清晰的ECS兼容文档结构的定义,可以创建EcsDocument对象的子类并提供自己的属性定义。
通过TryRead
/ReceiveProperty
/WriteAdditionalProperties
,可以连接到EcsDocumentJsonConverter
并读取/写入更多属性。
/// <summary>
/// An extended ECS document with an additional property
/// </summary>
[JsonConverter(typeof(EcsDocumentJsonConverterFactory))]
public class MyEcsDocument : EcsDocument
{
[JsonPropertyName("my_root_property"), DataMember(Name = "my_root_property")]
public MyCustomType MyRootProperty { get; set; }
protected override bool TryRead(string propertyName, out Type type)
{
type = propertyName switch
{
"my_root_property" => typeof(MyCustomType),
_ => null
};
return type != null;
}
protected override bool ReceiveProperty(string propertyName, object value) =>
propertyName switch
{
"my_root_property" => null != (MyRootProperty = value as MyCustomType),
_ => false
};
protected override void WriteAdditionalProperties(Action<string, object> write) => write("my_root_property", MyCustomType);
}
Elastic.CommonSchema.BenchmarkDotNetExporter项目采用这种方式,在域源目录中,BenchmarkDocument是EcsDocument的子类。
版权和许可
本软件版权(C)2014-2020归Elasticsearch BV所有。
这是免费软件,许可证为: Apache License Version 2.0。
产品 | 版本 兼容的和其他计算的的目标框架版本。 |
---|---|
.NET | net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET 标准库 | netstandard2.0 兼容。 netstandard2.1 兼容。 |
.NET 框架 | net461 兼容。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETFramework 4.6.1
- Ben.Demystifier (>= 0.4.1)
- System.Diagnostics.DiagnosticSource (>= 5.0.0)
- System.Text.Json (>= 6.0.1)
-
.NETStandard 2.0
- Ben.Demystifier (>= 0.4.1)
- System.Diagnostics.DiagnosticSource (>= 5.0.0)
- System.Text.Json (>= 6.0.1)
-
.NETStandard 2.1
- Ben.Demystifier (>= 0.4.1)
- System.Diagnostics.DiagnosticSource (>= 5.0.0)
- System.Text.Json (>= 6.0.1)
-
net6.0
- Ben.Demystifier (>= 0.4.1)
NuGet 包 (9)
显示依赖于 Elastic.CommonSchema 的前 5 个 NuGet 包
包 | 下载 |
---|---|
Elastic.CommonSchema.Serilog Serilog 文本格式化程序,用于根据 Elastic Common Schema (ECS) 格式化日志事件。 |
|
Elastic.CommonSchema.NLog NLog 布局,用于根据 Elastic Common Schema (ECS) 格式化日志事件。 |
|
Elastic.Ingest.Elasticsearch.CommonSchema 包描述 |
|
Elastic.Extensions.Logging Elasticsearch 日志提供程序,兼容 Microsoft.Extensions.Logging。使用 Elastic Common Schema (ECS) 直接写入 Elasticsearch,可以对消息和作用域值中的结构化数据进行语义日志记录,适用于 Elasticsearch-Logstash-Kibana (ELK) 堆栈。结果可以在 Kibana 控制台中查看和查询。 |
|
Elasticsearch.Extensions.Logging Elasticsearch 日志提供程序,兼容 Microsoft.Extensions.Logging。使用 Elastic Common Schema (ECS) 直接写入 Elasticsearch,可以对消息和作用域值中的结构化数据进行语义日志记录,适用于 Elasticsearch-Logstash-Kibana (ELK) 堆栈。结果可以在 Kibana 控制台中查看和查询。 |
GitHub 代码库
此包未在任何流行的GitHub代码库中使用。
版本 | 下载 | 最后更新 |
---|---|---|
8.11.1 | 172,255 | 6/10/2024 |
8.11.0 | 297,690 | 4/10/2024 |
8.6.1 | 1,615,846 | 8/3/2023 |
8.6.0 | 408,362 | 5/9/2023 |
8.4.0-alpha4 | 32,246 | 3/28/2023 |
8.4.0-alpha3 | 11,971 | 3/15/2023 |
8.4.0-alpha2 | 1,907 | 3/1/2023 |
8.4.0-alpha1 | 2,272 | 2/20/2023 |
1.6.0-alpha1 | 268,113 | 6/2/2021 |
1.5.3 | 7,656,737 | 6/1/2021 |
1.5.1 | 1,539,086 | 6/3/2020 |
1.5.0 | 372,922 | 3/30/2020 |
1.4.4 | 3,489 | 3/25/2020 |
1.4.3 | 7,078 | 3/16/2020 |
1.4.2 | 25,471 | 3/6/2020 |
1.4.1 | 11,707 | 2/26/2020 |
1.4.0 | 13,265 | 1/29/2020 |
1.4.0-beta1 | 802 | 1/7/2020 |
1.2.0-alpha1 | 961 | 11/15/2019 |