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                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Serilog.Sinks.InfluxDB.Syslog" Version="2.3.5" />                
对于支持 PackageReference 的项目,请将此 XML 节点复制到项目文件中以引用包。
paket add Serilog.Sinks.InfluxDB.Syslog --version 2.3.5                
#r "nuget: Serilog.Sinks.InfluxDB.Syslog, 2.3.5"                
#r 指令可用于 F# Interactive 和多语言笔记本。将此内容复制到交互式工具或脚本的源代码中以引用包。
// 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

Build nuget

Serilog 输出Sink,可以将事件写入到以日志消息格式(默认情况)描述在 Influx 博客 中的 InfluxDB。可以通过以下方式通过输出配置来自定义确切字段、标签甚至测量名称。支持与 .NET 平台标准 兼容的平台 netstandard2.0

仅与 InfluxDB v2.0 及以上版本兼容

注意:针对 InfluxDB v1.X 的使用,请使用以下 nuget 包: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 包 😗* 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"
        }
    }
}

构建状态

Latest Release Latest Pre-Release Downloads License

分支 状态
主分支 Build

基准测试

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 被计算过。
兼容的目标框架
包含的目标框架(在包中)
详细了解目标框架.NET Standard

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错误