Serilog.Sinks.InfluxDB.Syslog 2.3.5
dotnet add package Serilog.Sinks.InfluxDB.Syslog --version 2.3.5
NuGet\Install-Package Serilog.Sinks.InfluxDB.Syslog -Version 2.3.5
<PackageReference Include="Serilog.Sinks.InfluxDB.Syslog" Version="2.3.5" />
paket add Serilog.Sinks.InfluxDB.Syslog --version 2.3.5
#r "nuget: Serilog.Sinks.InfluxDB.Syslog, 2.3.5"
// Install Serilog.Sinks.InfluxDB.Syslog as a Cake Addin #addin nuget:?package=Serilog.Sinks.InfluxDB.Syslog&version=2.3.5 // Install Serilog.Sinks.InfluxDB.Syslog as a Cake Tool #tool nuget:?package=Serilog.Sinks.InfluxDB.Syslog&version=2.3.5
Serilog.Sinks.InfluxDB.Syslog
Serilog 输出Sink,可以将事件写入到以日志消息格式(默认情况)描述在 Influx 博客 中的 InfluxDB。可以通过以下方式通过输出配置来自定义确切字段、标签甚至测量名称。支持与 .NET 平台标准 兼容的平台 netstandard2.0
。
仅与 InfluxDB v2.0 及以上版本兼容
注意:针对 InfluxDB v1.X 的使用,请使用以下 nuget 包:
关于 V1,参见 V1.X 入门
入门
InfluxDB v2.X
要开始使用,请安装 Serilog.Sinks.InfluxDB.Syslog 包
PM> Install-Package Serilog.Sinks.InfluxDB.Syslog
或
$ dotnet add package Serilog.Sinks.InfluxDB.Syslog
如果要在本地进行开发,您可以在此存储库的根目录中使用 docker-compose-v2.yml,如需则调整卷。
$ docker-compose -f docker-compose-v2.yml up -d
将记录器指向 InfluxDb(使用默认的 _internal 数据库作为最快的方式)
Log.Logger = new LoggerConfiguration()
.WriteTo.InfluxDB(applicationName: "Quick test",
uri: new Uri("http://127.0.0.1:8086"),
organizationId: "88e1f5a5ad074d9e", // Organization Id - unique id can be found under Profile > About > Common Ids)
bucketName: "logs",
token: "bGfBKhSycNiUOia4k7peib2jHFewkz3o6Hv2uz1xAoUcdnEFRW7cHn03KICySLemA4VPZKvc0CwzSQT8GNl2DA==")
.CreateLogger();
另一个示例,使用 InfluxDBSinkOptions 获得更多对周期性批处理选项和连接信息的控制
Log.Logger = new LoggerConfiguration()
.WriteTo.InfluxDB(new InfluxDBSinkOptions()
{
ApplicationName = "fluentSample",
InstanceName = "fluentSampleInstance",
ConnectionInfo = new InfluxDBConnectionInfo()
{
Uri = new Uri("http://127.0.0.1:8086"),
BucketName = "logs",
OrganizationId = "88e1f5a5ad074d9e", // Organization Id - unique id can be found under Profile > About > Common Ids
// To be set if bucket already created and give write permission and set CreateBucketIfNotExists to false
Token = null,
CreateBucketIfNotExists = true,
//To specify if Bucket needs to be created and if token not known or without all access permissions
AllAccessToken = "bGfBKhSycNiUOia4k7peib2jHFewkz3o6Hv2uz1xAoUcdnEFRW7cHn03KICySLemA4VPZKvc0CwzSQT8GNl2DA==",
BucketRetentionPeriod = TimeSpan.FromDays(1)
},
BatchOptions = new PeriodicBatching.PeriodicBatchingSinkOptions()
{
BatchSizeLimit = 50,
Period = TimeSpan.FromSeconds(10),
EagerlyEmitFirstEvent = true,
QueueLimit = null
}
})
.CreateLogger();
如果您使用 appsettings.json
进行配置,以下示例展示了使用 InfluxDb 和控制台输出。
{
"Serilog": {
"Using": ["Serilog.Sinks.Console", "Serilog.Sinks.InfluxDB.Syslog"],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo:Influx": {
"Name": "InfluxDB",
"Args": {
"sinkOptions": {
"ApplicationName": "testApp",
"InstanceName": "testInstance",
"ConnectionInfo": {
"Uri": "https://127.0.0.1:8086",
"BucketName": "logs",
"OrganizationId": "88e1f5a5ad074d9e",
"Token": "edBlcWgLkoPOituD_6V1ftCznpDR8niFcF46MJCSYuSxc1FM_srm9cuoc84yX5kOjOH_11Zvxk_juqr44S-57A==",
"CreateBucketIfNotExists": false
//"Username": "influxdbroot",
//"Password": "TBD"
"BucketRetentionPeriod": "7.00:00:00",
},
"BatchOptions": {
"EagerlyEmitFirstEvent": true,
"BatchSizeLimit": 100,
"Period": "0.00:00:30",
"QueueLimit": 1000000
}
}
}
},
"Properties": {
"Application": "Serilog Sink InfluxDb Console Sample"
}
}
}
所有示例都可以在这个存储库的 samples 子目录下找到。
可选参数
"sinkOptions": {
"MeasurementName": "syslog",
"ApplicationName": "testApp",
"InstanceName": "testInstance",
"IncludeFullException": true,
"IncludeHostname": false,
"IncludeLevel": true,
"IncludeSeverity": true,
"IncludeDefaultFields": true,
"ExtendedFields": ["ReleaseNumber"],
"ExtendedTags": [],
...
}
非 syslog 格式支持
自从创建此插件以来,InfluxDB 现在支持更灵活的日志方法,从而消除了对严格 syslog 格式的严格要求。这意味着可以通过以下配置创建更简单的日志有效负载,而不需要额外的与 syslog 相关的条目
"sinkOptions": {
"MeasurementName": "mymeasurement",
"IncludeHostname": false,
"IncludeLevel": false,
"IncludeSeverity": false,
"IncludeDefaultFields": false,
...
}
此配置将生成只包含消息和时间的日志条目
[
{
Time: DateTime_1,
Field: message,
Value: Some warning "Some parameter",
Tags: {}
}
]
InfluxDB v1.X
**对于 InfluxDB v1.X,请使用以下 NuGet 包 😗*
PM> Install-Package Serilog.Sinks.InfluxDBV1.Syslog -Version 1.3.1
或
$ dotnet add package Serilog.Sinks.InfluxDBV1.Syslog --version 1.3.1
如果在本地进行开发,您可以在该存储库的根目录下使用 docker-compose.yml,并根据需要调整卷
$ docker-compose -f docker-compose.yml up -d
将记录器指向 InfluxDb(使用默认的 _internal 数据库作为最快的方式)
Log.Logger = new LoggerConfiguration()
.WriteTo.InfluxDB(
applicationName: "Quick Test",
uri : new Uri("http://127.0.0.1:8086"));
另一个示例,使用 InfluxDBSinkOptions 获得更多对周期性批处理选项和连接信息的控制
Log.Logger = new LoggerConfiguration()
.WriteTo.InfluxDB(new InfluxDBSinkOptions()
{
ApplicationName = "fluentSample", // Application Name
InstanceName = "fluentSampleInstance", // Instance or Environment Name
ConnectionInfo = new InfluxDBConnectionInfo() // Connection Details
{
Uri = new Uri("http://127.0.0.1:8086"),
DbName = "_internal",
},
BatchOptions = new PeriodicBatching.PeriodicBatchingSinkOptions()
{
BatchSizeLimit = 50,
Period = TimeSpan.FromSeconds(10),
EagerlyEmitFirstEvent = true,
QueueLimit = null
}
})
.CreateLogger();
如果您使用 appsettings.json
进行配置,以下示例展示了使用 InfluxDb 和控制台输出。
{
"Serilog": {
"Using": ["Serilog.Sinks.Console", "Serilog.Sinks.InfluxDBV1.Syslog"],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{ "Name": "Console" },
{
"Name": "InfluxDB",
"Args": {
"sinkOptions": {
"applicationName": "testApp",
"instanceName": "testInstance",
"ConnectionInfo": {
"Uri": "https://127.0.0.1:8086",
"DbName": "_internal",
"Username": "",
"Password": ""
},
"BatchOptions": {
"EagerlyEmitFirstEvent": true,
"BatchSizeLimit": 200,
"Period": "0.00:00:30",
"QueueLimit": null
}
}
}
}
],
"Properties": {
"Application": "Serilog Sink InfluxDb Console Sample"
}
}
}
构建状态
分支 | 状态 |
---|---|
主分支 |
基准测试
BenchmarkDotNet=v0.12.1,操作系统=Windows 10.0.19042
Intel Core i7-2640M CPU 2.80GHz (Sandy Bridge), 1 个 CPU,4 个逻辑和 2 个物理核心
.NET Core SDK=5.0.101 [宿主] : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT [附加调试器]
默认作业 : .NET Core 3.1.9 (CoreCLR 4.700.20.47201, CoreFX 4.700.20.47203), X64 RyuJIT
方法 | N | 平均 | 错误 | 标准差 |
---|---|---|---|---|
LogSomething | 1000 | 5.781 微秒 | 0.1832 微秒 | 0.5315 微秒 |
故障排除
没有显示,我可以做什么?
如果在 Chronograf、Grafana 等工具中检查相关的数据库后,事件没有出现在 InfluxDb 中。这可能是因为您的应用程序无法联系 InfluxDb 服务器,或者 InfluxDb 服务器由于某些原因拒绝了日志事件。
服务器端问题
InfluxDb 服务器可能会拒绝不包含所需凭证的事件,请查看influxdb 故障排除文章(如果有效负载在某些方式下已损坏,或者日志事件过大以至于无法接受)。
客户端问题
如果没有在摄取日志中看到信息,那么可能是因为网络配置或连接问题而无法到达服务器。这些问题通过 Serilog 的 SelfLog
报告给应用程序。
在配置日志器后,请添加以下行以将任何错误信息打印到控制台
Serilog.Debugging.SelfLog.Enable(Console.Error);
如果控制台不可用,您可以将一个代表传入每个错误消息的委托传递给 SelfLog.Enable()
Serilog.Debugging.SelfLog.Enable(message => {
// Do something with `message`
});
故障排除清单
- 检查 InfluxDb 连接性,如果出现 服务器端问题,请参阅上文
- 如上所述,打开 Serilog SelfLog 以检查客户端的连接性和其他问题。
- 确保在应用程序退出之前调用 Log.CloseAndFlush() 或销毁根 Logger - 否则,可能会丢失缓冲的事件。
- 如果您的应用程序是 Windows 控制台应用程序,还很重要在退出应用程序时关闭控制台窗口;如果使用标题栏上的关闭按钮,Windows 控制台应用程序会被“硬终止”,因此如果您使用它,发送到 InfluxDb 的缓冲事件可能会丢失。
产品 | 版本 兼容的和额外的计算目标框架版本。 |
---|---|
.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 Standard | netstandard2.0 兼容。 netstandard2.1 已计算。 |
.NET Framework | 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 被计算过。 |
-
.NETStandard 2.0
- InfluxDB.Client (>= 4.13.0)
- Serilog (>= 3.0.1)
- Serilog.Sinks.PeriodicBatching (>= 3.1.0)
NuGet 包
此包未受到任何 NuGet 包的使用。
GitHub 存储库
此包未受到任何流行的 GitHub 存储库的使用。
版本 | 下载 | 最后更新 |
---|---|---|
2.3.5 | 14,174 | 10/27/2023 |
2.3.4 | 2,951 | 7/18/2023 |
2.3.3 | 1,964 | 1/30/2023 |
2.3.2 | 917 | 1/11/2023 |
2.3.1 | 315 | 1/11/2023 |
2.3.0 | 355 | 1/8/2023 |
2.2.0 | 1,740 | 8/20/2022 |
2.1.2 | 394 | 8/13/2022 |
2.1.1 | 5,037 | 3/8/2022 |
2.1.0 | 12,346 | 12/12/2021 |
2.0.3 | 321 | 12/5/2021 |
2.0.2 | 2,186 | 6/19/2021 |
2.0.1 | 831 | 3/13/2021 |
2.0.0 | 849 | 2/13/2021 |
1.4.1 | 569 | 3/8/2022 |
1.4.0 | 1,099 | 12/12/2021 |
1.3.2 | 2,268 | 3/13/2021 |
1.3.1 | 2,921 | 1/23/2021 |
1.3.0 | 415 | 1/21/2021 |
1.2.0 | 576 | 9/17/2020 |
1.1.0 | 523 | 8/14/2020 |
1.0.0 | 543 | 8/14/2020 |
2.3.5(仅适用于 InfluxDB v2.XX)
- 新参数 IncludeDefaultFields 默认为 true 以关闭所有默认字段
- 新参数 MeasurementName 允许自定义测量名称
2.3.4(仅适用于 InfluxDB v2.XX)
- 新参数 IncludeHostname 默认为 true
- 新参数 IncludeLevel 默认为 true
- 新参数 IncludeSeverity 默认为 true
2.3.3
- **警告 - 使用Serilog.Sinks.InfluxDBV1.Syslog nuget 为 InfluxDB V1.XX**
- 更新 nuget 依赖,包括使用 InfluxDBClient 构造函数而不是 InfluxDBClientFactory 的 InfluxDB.Client
- 分离 Serilog.Sinks.InfluxDB.Syslog 和 Serilog.Sinks.InfluxDBV1.Syslog
2.3.2
- 回滚对 https://github.com/pada57/serilog-sinks-influxdb/issues/28 的修复
2.3.1
- 修复只有 CR、LF 和 \ 必须转义 https://github.com/pada57/serilog-sinks-influxdb/issues/26
- 修复必须忽略的非ASCII字符问题 https://github.com/pada57/serilog-sinks-influxdb/issues/28
2.3.0
- 扩展字段/标签以支持名称映射 https://github.com/pada57/serilog-sinks-influxdb/issues/20
- 修复了将字段类型ProcId更改为字符串而不是整数以便与syslog格式一致的问题 https://github.com/pada57/serilog-sinks-influxdb/issues/21
- 修复了添加引号来处理扩展标签的问题 https://github.com/pada57/serilog-sinks-influxdb/issues/18
- 将应用程序名称和实例名称设置为可选 https://github.com/pada57/serilog-sinks-influxdb/issues/23
- 更新nuget依赖项,包括InfluxDB.Client和Serilog.Sinks.PeriodicBatching
2.2.0
- 添加对扩展字段和扩展标签的支持
2.1.2
- 更新nuget依赖项,包括InfluxDB.Client和Serilog
2.1.1
- 更新nuget依赖项,包括InfluxDB.Client和Serilog.Sinks.PeriodicBatching
2.1.0 (仅适用于InfluxDB v2.XX)
- 新参数IncludeFullException默认为false
- 更新nuget依赖项
2.0.3
- 更新nuget依赖项,包括InfluxDB.Client
2.0.2
- 更新nuget依赖项,包括InfluxDB.Client
2.0.1
- 更新nuget依赖项,包括InfluxDB.Client
2.0: 支持InfluxDB v2,与v1不兼容
- 将主要依赖项从InfluxData.Net更改为InfluxDB.Client
- 添加两种认证模式,使用Token或凭据(用户/密码)
- 添加新的BatchOptions来控制批次大小/队列限制/周期/贪婪第一个事件发射
1.4.0 (仅适用于InfluxDB v1.XX)
- 新参数IncludeFullException默认为false
- 更新nuget依赖项
1.3.2
- 更新nuget依赖项
1.3.1
- 调整命名空间
1.3
- 处理带有selflog的自定义响应,并抛出异常,让PeriodicBatchingSink处理回退/重试
- 添加单个InfluxDBSinkOptions来创建接收器,保持了与先前扩展方法的向后兼容性 -
- 添加基准测试和单元测试
- 添加示例项目
- 添加文档和许可证(MIT)
- 删除未使用的方法
1.2
- 添加实例名称,并将源重命名为应用程序名称
- 从消息模板中删除标签
- 将设备映射到实例名称
- 去除对logevent的过滤,直接在格式化后转义消息
- 更新到Serilog 2.10和Serilog.Sinks.PeriodicBatching 2.3
1.1
- 在扩展方法和InfluxDbCOnnectionInfo对象中使用Uri而不是地址/端口
1.0
- 从https://github.com/ThiagoBarradas/serilog-sinks-influxdb分支
- 适配syslog格式
- 修复由于JSON负载包含无效字符导致的400错误