我们开始将Serilog与Elasticsearch结合使用,这是一种非常有效的方式来存储结构日志数据(之后使用像Kibana这样的工具可视化它们).但是,我看到了不直接将日志数据写入后端的优势,而是配置了一个日志代理,例如Logstash,可以负责为日志消息添加标签,选择索引等.使用此设置,应用程序将不需要具备知识日志数据分发.
Logstash位于中间,问题是Serilog接收器最好使用,因此Logstash可以导入其数据,而无需应用高级和CPU密集型过滤器.我已经看到Redis被提到是Logstash的好伴侣,但是Serilog没有Redis接收器.对于Serilog接收的任何建议哪些数据可以通过Logstash轻松传输到Elasticsearch索引?
甚至有一种方法首先使用Elasticsearch sink,然后在一些安排和应用额外标签之后再次将其环回到Elasticsearch.
我收到了Nicholas Blumhardt(Serilog创建者)的建议,将RollingFileSink与JsonFormatter一起使用.
接受的答案是在接收器Serilog.Sinks.Http存在之前写的.
可以让HTTP接收器将日志事件发送到Logstash HTTP输入插件,而不是记录到文件并让Filebeat监视它.这意味着创建日志的实例上的移动部件更少.
我已经为Serilog创建了一个支持RabbitMQ的接收器,它使用logstash的rabbitmq输入插件非常好地与logstash绑定:
https://www.nuget.org/packages/Serilog.Sinks.RabbitMQ
如果在应用程序服务器上运行RabbitMQ实例,则可以使用RabbitMQSink使用Serilog登录到此RabbitMQ实例,最终通过网络隔离/停机方案.
然后,Logstash将在网络备份时获取队列中的消息.
更新:Sink现在在V2.0中并支持ASP.NET Core 1.0