Elastic.CommonSchema 8.11.1

前缀已保留
dotnet add package Elastic.CommonSchema --version 8.11.1                
NuGet\Install-Package Elastic.CommonSchema -Version 8.11.1                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Elastic.CommonSchema" Version="8.11.1" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件以引用 包。
paket add Elastic.CommonSchema --version 8.11.1                
#r "nuget: Elastic.CommonSchema, 8.11.1"                
#r 指令可用于 F# Interactive 和多语言笔记本。将其复制到交互式工具或脚本源代码中以引用包。
// 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客户端支持开箱即用的序列化。

另请参阅

包列表

.NET程序集以包名Elastic.CommonSchema发布到NuGet。

主分支在成功进行CI构建后将新的NuGet包推送到https://ci.appveyor.com/nuget/ecs-dotnet

版本

Elastic.CommonSchema包的版本与发布的ECS版本相匹配,具有相同的对应分支名称。

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字段的任何stringboolean值都将分配给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 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解有关 目标框架.NET Standard 的更多信息。

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