微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Serilog-Sinks-Loki将日志大量传输到Loki如何减少批次数量?

如何解决Serilog-Sinks-Loki将日志大量传输到Loki如何减少批次数量?

我正在尝试将日志从.netcore 3.1 API发送到Loki服务器。为此,我使用了Serilog-Sinks-Loki块包。 当我运行代码时,日志将立即发送,并且可以在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可以让您配置发送邮件的频率(batchPostingLimit,period,etc.

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

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

如果没有,您可以监视网络流量,以查看接收器尝试发送日志事件时是否可以找到失败的尝试和/或超时。

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

作为参考,这里是Serilog.Sinks.Loki存储库中的最新一期(也许是您创建的?)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。