首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用logstash-grok、克隆和变异在两个事件中拆分日志条目。

使用logstash-grok、克隆和变异在两个事件中拆分日志条目。
EN

Stack Overflow用户
提问于 2015-01-21 15:21:08
回答 1查看 6.9K关注 0票数 2

我试图在日志存储配置中使用格罗克突变型无性系将日志分成两个事件。我的堆栈是一个非常标准的麋鹿 (Elasticsearch,Logstash,Kibana)。

我正在创建一个这样格式化的日志:

代码语言:javascript
复制
timestamp float integer

例如:

代码语言:javascript
复制
2015/01/19 21:48:12 24.7 32
2015/01/19 22:00:20 24.7 32
2015/01/19 22:01:11 24.7 32
2015/01/19 22:01:58 24.7 28
2015/01/19 22:02:28 23.7 28
(etc ...)

最后,我想要logstash中的两个事件,一个带有键timestamptype=sensorAvalue=%{the value of the integer},另一个具有相同的时间戳以及value=%{value of the float}type=sensorB

到目前为止,我已经在logstash.conf中使用了这个配置

1.我的日志在输入中使用type=sensor标记:

代码语言:javascript
复制
  input {
    file {
      path => "/var/log/sensors.log"
      type => "sensor"
    }
  }

2.然后,我用grok,克隆和变异来分裂它们。

代码语言:javascript
复制
if [type] == "sensor" {
  # Extracts the values
  grok { 
    match => { "message" => "(?<timestamp>%{YEAR}/%{MONTHNUM:month}/%{MONTHDAY:day} %{TIME}) %{NUMBER:sensorA:float} %{NUMBER:sensorB:int}" }
  }
  mutate {
    update => [ "type", "sensorA" ]
  }
  # Clones the event
  clone {
    clones => ["sensorB"]
  }
}
# So now I should have two events, 
# one with type sensorA and one with type sensorB, no ? :
if [type] == "sensorA" {
  mutate {
    add_field => { "value" => "%{sensorA}" }
    convert => ["value", "float"]
  }
}
if [type] == "sensorB" {
  mutate {
    add_field => { "value" => "%{sensorB}" }
    convert => ["value", "integer"]
  }
}

但是这并不有效,因为即使我得到了两个具有不同类型的事件,它们的值都是相同的(也就是sensorB的值,总是这样)。

怎么会这样?我有一种感觉,logstash.conf文件不是真正以线性方式读取的,但我找不到任何解决方案。

有什么暗示吗?我是不是漏掉了一些很明显的东西?非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 01:11:16

您可以使用value插件来实现所需的功能,而不是使用mutate将值转换为ruby字段。

代码语言:javascript
复制
if [type] == "sensor" {
    # Extracts the values
    grok {
        match => { "message" => "(?<timestamp>%{YEAR}/%{MONTHNUM:month}/%{MONTHDAY:day} %{TIME}) %{NUMBER:sensorA:float} %{NUMBER:sensorB:int}" }
    }
    mutate {
        update => [ "type", "sensorA" ]
    }
    # Clones the event
    clone {
        clones => ["sensorB"]
    }
}
# So now I should have two events,
# one with type sensorA and one with type sensorB, no ? :
ruby {
    code => "
        if event['type'] == 'sensorA'
                event['value'] = event['sensorA']
        elsif event['type'] == 'sensorB'
                event['value'] = event['sensorB']
        end
    "
}

有了这个配置,我可以满足您的要求。希望这能对你有所帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28070686

复制
相关文章

相似问题

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