Serilog-Sinks-Loki 向 Loki 批量传输日志。如何减少批量?

Serilog-Sinks-Loki transmitting logs to Loki in big batches. How can I reduce batch amount?

我正在尝试将我的日志从 .netcore 3.1 API 发送到 Loki 服务器。为此,我使用了 Serilog-Sinks-Loki nugget 包。 当我 运行 我的代码时,日志会立即发送,我可以在 Grafana 中看到它们。随着时间的推移,日志的延迟越来越大。最终我看到我的日志在延迟 10 分钟后到达 Loki。 我阅读了相关内容并了解 Serilog-Sinks-Loki 位于 Serilog-Sinks-Http 之上,因此我需要在那里配置一些东西以使我的日志到达更快但不确定如何,有人可以帮助我吗? 我的目标是立即发送我的日志,没有延迟。

这是我的 program.cs 代码

public static IHostBuilder CreateHostBuilder(string[] args) =>
           Host.CreateDefaultBuilder(args)
                .UseLamar()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .ConfigureLogging(logging =>
                {

                    var credentials = new BasicAuthCredentials("LOKI-SERVER-URL", "USER", "PASSWORD");
                    var log = new LoggerConfiguration()
                            .MinimumLevel.Verbose()
                            .Enrich.FromLogContext()
                            .WriteTo.LokiHttp(credentials)
                            .CreateLogger();
                    logging.AddSerilog(log);
                });
    }

尽管 Serilog.Sinks.Loki 包裹了一个 Serilog.Sinks.Http 接收器,it doesn't expose any of the settings that would allow you to configure how often messages are sent (batchPostingLimit, period, etc.)

也就是说,Sinks.Sink.Http 的默认周期是 2 秒,因此 10 分钟对于使用默认设置发送消息来说太长了。您可能遇到连接问题,导致接收器无法发送消息或服务器无法接收消息。

您是否尝试启用 SelfLog 以查看接收器是否捕获了任何错误?

如果没有,您可以监控网络流量以查看是否可以在接收器尝试发送日志事件时发现失败的尝试 and/or 超时。

您还可以 extend the LokiHttpClient 并将一些调试消息写入文件或其他内容以查看发送消息的频率/数量。

这里是 Serilog.Sinks.Loki 存储库中的一个最新问题(也许是你创建的?)

Logs are been sent as a batch once in 10 minutes #26