哪个 Serilog 接收器用于发送到 Logstash?
Posted
技术标签:
【中文标题】哪个 Serilog 接收器用于发送到 Logstash?【英文标题】:Which Serilog sink to use for sending to Logstash? 【发布时间】:2014-10-06 16:05:28 【问题描述】:我们开始将 Serilog 与 Elasticsearch 结合使用,这是一种非常有效的存储结构日志数据的方法(后来使用 Kibana 等工具将它们可视化)。但是,我看到了不将日志数据直接写入后端而是配置日志代理(例如 Logstash)的优势,该代理可以负责将标签添加到日志消息、选择索引等。通过此设置,应用程序将不需要具备相关知识日志数据分布。
Logstash 在中间,问题是最好使用哪种 Serilog 接收器,以便 Logstash 可以在不应用高级和 CPU 密集型过滤器的情况下导入其数据。我已经看到 Redis 被认为是 Logstash 的好伴侣,但是 Serilog 没有 Redis 接收器。对 Serilog 接收器有什么建议,哪些数据可以通过 Logstash 轻松传输到 Elasticsearch 索引?
甚至还有一种方法是先使用 Elasticsearch sink,然后在经过一些安排并应用额外的标签后再次将其环回 Elasticsearch。
【问题讨论】:
【参考方案1】:接受的答案是在接收器Serilog.Sinks.Http 存在之前编写的。
可以让 HTTP 接收器将日志事件发布到 Logstash HTTP input plugin,而不是记录到文件并让 Filebeat 监视它。这意味着创建日志的实例上的移动部件更少。
【讨论】:
会要求 OP 将他接受的答案更改为这个。 如果暂时无法访问logstash怎么办?你不会丢失你的日志吗?所以 Filebeat 更有意义。 HTTP 接收器可以是持久的,防止丢失日志事件。请查看它的文档。 对我很有帮助。谢谢@FantasticFiasco【参考方案2】:我收到了 Nicholas Blumhardt(Serilog 创建者)的建议,建议将 RollingFileSink 与 JsonFormatter 结合使用。
【讨论】:
是的!我只需要找出记录异常的最佳方法,但这是另一个问题的答案。 ...大概是用伐木工人运送? RollingFileSink 将日志保存到文件中。如何使用它将日志传输到 Logstash? filebeat 可以将文件中的日志发送到 logstash。 elastic.co/products/beats/filebeat 我们可以自定义 JSON 的格式吗,我们希望所有元素在 JSON 中处于同一级别。我只能用实现ELK的团队不接受的属性elemet进行配置。【参考方案3】:我已经为支持 RabbitMQ 的 Serilog 创建了一个接收器,它使用 logstash 的 rabbitmq 输入插件非常好地与 logstash 关联:
https://www.nuget.org/packages/Serilog.Sinks.RabbitMQ
如果您在应用服务器上运行 RabbitMQ 实例,则可以使用 RabbitMQSink 通过 Serilog 登录到该 RabbitMQ 实例,最终绕过网络隔离/停机场景。
当网络备份时,Logstash 将在队列中提取消息。
更新:Sink 现在是 V2.0 并支持 ASP.NET Core 1.0
【讨论】:
【参考方案4】:也许最新的答案是:
使用ElasticSearch Sink。
它确实包含durability mode,因此如果应用程序离线,日志不会丢失。
【讨论】:
如果你想跨多个传入日志重用过滤和处理设置,引入 Logstash 似乎仍然是一个有效的举措......我认为这个接收器与开箱即用的 Logstash 不兼容。 . 所以不确定这是否可以作为答案...... @chaami 正确 - 这个接收器目前与 LogStash 不兼容,但我认为答案应该保留,因为对于那些来寻找并意识到他们实际上只是想直接与 ElasticSearch 通信的人来说可能是相关的.此外,我怀疑以后可能会支持 LogStash,因为 Beats 可以同时与 LogStash 和 ElasticSearch 通信。【参考方案5】:我使用了这个解决方案并为我工作。 1- 带有管道的 Logstash:
input
http
host => "0.0.0.0"
port => 31000
codec => json
#filter
#
#
output
#stdout
elasticsearch
hosts => ["127.0.0.1:9200"]
index => "logstash-%+YYYY.MM.dd"
2-Serilog 配置为:
"Serilog":
"Using": [ "Serilog.Sinks.Http" ],
"MinimumLevel": "Information",
"WriteTo": [
"Name": "Async",
"Args":
"bufferSize": 10000000,
"configure": [
"Name": "Http",
"Args":
"requestUri": "http://127.0.0.1:31000",
"textFormatter": "Serilog.Formatting.Elasticsearch.ElasticsearchJsonFormatter, Serilog.Formatting.Elasticsearch",
"batchFormatter": "Serilog.Sinks.Http.BatchFormatters.ArrayBatchFormatter, Serilog.Sinks.Http"
]
],
"Properties":
"Application": "Test1"
,
"AllowedHosts": "*"
【讨论】:
以上是关于哪个 Serilog 接收器用于发送到 Logstash?的主要内容,如果未能解决你的问题,请参考以下文章
关于c#:Filter Serilog日志取决于上下文源到不同的接收器?