【问题标题】:Which Serilog sink to use for sending to Logstash?哪个 Serilog 接收器用于发送到 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。

【问题讨论】:

    标签: logging elasticsearch logstash serilog


    【解决方案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": "*"
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 2018-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多