基于 logstash 中转换后的 unix 时间戳值的索引

Index based on the value of a converted unix timestamp in logstash

我需要根据 UNIX 时间戳(自纪元以来的秒数)字段的值对记录进行索引,但是索引需要采用 YYYY-MM-dd 的形式。但是,时间戳字段的值需要保持为 UNIX 时间戳。

所以问题分为两部分。

  1. 如何在不破坏 UNIX 时间戳的情况下将时间戳文件转换为 YYYY-MM-dd
  2. 如何将 YYYY-MM-dd 值应用于索引?

这是我目前所拥有的。

input {
    tcp {
            port => 5000
    }
}

filter {
    csv {
            separator => "  " # <- this white space is actually a tab
            skip_empty_columns => true
            # other fields omitted for brevity
            columns => ["timestamp"]
    }

    #grok {
    #       match => {"indexdate" => "%{NUMBER:timestamp}"}
    #}

    date {
            match => ["timestamp", "YYYY-MM-DD"]
            target => "@timestamp"
    }

    mutate {
            # omitted for brevity
            remove_field => []
    }
}

output {
    elasticsearch {
            hosts => "elasticsearch:9200"
            index => "indexname-%{+YYYY-MM-dd}"
    }
}

我已经进行了几次不同的 grok 尝试,但到目前为止都没有成功。

只需像这样更改您的 date 过滤器,它就会起作用。您在 date 过滤器中使用的模式应该与您正在解析的字段的模式匹配,因为您有纪元秒,那么模式应该是 UNIX:

date {
        match => ["timestamp", "UNIX"]
        target => "@timestamp"
}

请注意,您可能需要在 csv 过滤器中添加 convert 设置,以确保 timestamp 字段为整数

csv {
   ...
   convert => { "timestamp" => "integer" }
}