首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serilog HTTP接收器+ Logstash:将Serilog消息数组拆分为单个日志事件

Serilog HTTP接收器+ Logstash:将Serilog消息数组拆分为单个日志事件
EN

Stack Overflow用户
提问于 2017-01-19 16:10:31
回答 3查看 2.6K关注 0票数 5

我们使用Serilog HTTP接收器向Logstash发送消息。但是HTTP消息体如下所示:

代码语言:javascript
复制
{
  "events": [
    {
      "Timestamp": "2016-11-03T00:09:11.4899425+01:00",
      "Level": "Debug",
      "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
      "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
      "Properties": {
        "Heartbeat": {
          "UserName": "Mike",
          "UserDomainName": "Home"
        },
        "Computer": "Workstation"
      }
    },
    {
      "Timestamp": "2016-11-03T00:09:12.4905685+01:00",
      "Level": "Debug",
      "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
      "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
      "Properties": {
        "Heartbeat": {
          "UserName": "Mike",
          "UserDomainName": "Home"
        },
        "Computer": "Workstation"
      }
    }
  ]
}

即。日志事件是在数组中批处理的。可以一个一个地发送消息,但它仍然是一个项目数组。

然后,该事件在Kibana中显示为具有值的字段message

代码语言:javascript
复制
{
  "events": [
    {
      // ...
    },
    {
      // ...
    }
  ]
}

即。实际上,HTTP输入带来了什么。

如何将events数组中的项拆分为单个日志事件,并将属性“拉”到顶层,以便在ElasticSearch中有两个日志事件:

代码语言:javascript
复制
  "Timestamp": "2016-11-03T00:09:11.4899425+01:00",
  "Level": "Debug",
  "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
  "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
  "Properties": {
    "Heartbeat": {
      "UserName": "Mike",
      "UserDomainName": "Home"
    },
    "Computer": "Workstation"
  }
代码语言:javascript
复制
  "Timestamp": "2016-11-03T00:09:12.4905685+01:00",
  "Level": "Debug",
  "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
  "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
  "Properties": {
    "Heartbeat": {
      "UserName": "Mike",
      "UserDomainName": "Home"
    },
    "Computer": "Workstation"
  }

我试过Logstash json拆分,但我无法让它工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-23 13:37:00

升级到Logstash5.0之后,瓦尔氏溶液由于事件API中的更改而停止工作:更新event.to_hash没有反映在原始的event中。对于Logstash,必须使用5.0+、event.get('field')event.set('field', value)访问器。

现在更新的解决方案是:

代码语言:javascript
复制
input {
  http {
    port => 8080
    codec => json
  }
}

filter {
  split {
    field => "events"
  }
  ruby {
    code => "
      event.get('events').each do |k, v|
        event.set(k, v)
      end
    "
  }
  mutate {
    remove_field => [ "events" ]
  }
}
票数 1
EN

Stack Overflow用户

发布于 2017-01-20 04:53:12

您可以使用附加的ruby过滤器从子结构中提取字段,从而达到预期的效果:

代码语言:javascript
复制
filter {
  split {
   field => "events"
  }
  ruby {
    code => "
       event.to_hash.update(event['events'].to_hash) 
       event.to_hash.delete_if {|k, v| k == 'events'}     
    "
  }
}

由此产生的事件如下所示:

代码语言:javascript
复制
{
           "@version" => "1",
         "@timestamp" => "2017-01-20T04:51:39.223Z",
               "host" => "iMac.local",
          "Timestamp" => "2016-11-03T00:09:12.4905685+01:00",
              "Level" => "Debug",
    "MessageTemplate" => "Logging {@Heartbeat} from {Computer}",
    "RenderedMessage" => "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
         "Properties" => {
        "Heartbeat" => {
                  "UserName" => "Mike",
            "UserDomainName" => "Home"
        },
         "Computer" => "Workstation"
    }
}
票数 4
EN

Stack Overflow用户

发布于 2020-01-24 07:30:47

现在可以通过设置batchFormatter来实现这一点。默认批处理格式化程序将创建错误事件,但ArrayBatchFormatter将修复以下问题:

代码语言:javascript
复制
 logger.WriteTo.DurableHttpUsingFileSizeRolledBuffers(
                    requestUri: new Uri($"http://{elasticHost}:{elasticPort}").ToString(),
                    batchFormatter: new ArrayBatchFormatter());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41746502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档