要使用哪个Serilog接收器发送到Logstash



我们开始将Serilog与Elasticsearch结合使用,这是一种非常有效的存储结构化日志数据的方法(稍后使用Kibana等工具将它们可视化)。但是,我看到了不直接将日志数据写入后端而是配置日志代理(如Logstash)的好处,它可以负责向日志消息添加标记、选择索引等。通过这种设置,应用程序不需要了解日志数据分布。

Logstash在中间的问题是什么Serilog接收器是最好的,这样Logstash可以导入它的数据,而不应用高级和cpu密集型过滤器。我看到有人提到Redis是Logstash的好伙伴,但是Serilog没有Redis接收器。对于Serilog sink,哪些数据可以很容易地通过Logstash传输到Elasticsearch索引,有什么建议吗?

甚至有一种方法可以先使用Elasticsearch sink,然后在进行一些安排并应用额外的标签后再次将其环回到Elasticsearch。

接受的答案是在接收器serilog . sink . http存在之前编写的。

与其将日志记录到文件并让Filebeat监视它,不如让HTTP接收器将日志事件发送到Logstash HTTP输入插件。这将意味着在创建日志的实例上移动的部分更少。

我收到Nicholas Blumhardt (Serilog创建者)的建议,将RollingFileSink与JsonFormatter结合使用。

我为Serilog创建了一个支持RabbitMQ的接收器,使用logstash的RabbitMQ input-plugin:

https://www.nuget.org/packages/Serilog.Sinks.RabbitMQ

如果你在应用服务器上运行一个RabbitMQ实例,那么你可以使用RabbitMQSink使用Serilog记录到这个RabbitMQ实例,最终绕过网络隔离/下行场景。

当网络恢复时,Logstash将从队列中获取消息。

更新:Sink现在是V2.0并且支持ASP。. NET Core 1.0

也许最新的答案是:

使用ElasticSearch Sink

它包含了一个持久性模式,这样即使应用程序离线,日志也不会丢失。

我使用这个解决方案,并为我工作。
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 config as:
{
  "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": "*"
}

最新更新