弹性堆栈:我需要用另一个字段设置时间过滤器字段名称

elastic stack : i need set Time Filter field name with another field

我需要通过 logstash 从 rabbitMq 读取消息(内容是日志),然后将其发送到 elasticsearch 以便在 kibana 中进行可视化监控。所以我在 logstash 中写了从 rabbitmq 读取的输入,如下所示:

input { 
  rabbitmq {
    queue => "testLogstash"
    host => "localhost"
  }
}

并且我在 logstash 中的 elasticsearch 中编写了存储的输出配置,如下所示:

output {
 elasticsearch{
   hosts => "http://localhost:9200"
            index => "d13-%{+YYYY.MM.dd}"
 }
}

两者都放在myConf.conf

在每个消息的内容中,有一个 Json 包含这样的字段:

{
  "mDate":"MMMM dd YYYY, HH:mm:ss.SSS"
  "name":"test name"
}

但是有两个问题。首先,新建索引字段(Time Filter字段名)中没有日期字段。其次,我使用与默认@timestamp 相同的时间戳,该字段不会显示在图表的构建类型中。我认为这是因为字段的数据类型。该字段是date类型,但考虑的是字符串

我尝试像这样在 logstash 配置中通过 mutate 将字段值转换为日期:

filter {
  mutate {
    convert => { "mdate" => "date" }
  }
}

现在,出现两个问题: 1-这是问题吗?如果是,修复它的正确解决方案是什么? 2-我的主要需求是使用消息进入队列的时间,而不是 Logstash 接收消息的时间。什么是最好的解决方案?

如果不指定@timestamp的值,应该获取elasticsearch索引文档时的当前系统时间。这样,您应该能够在 kibana 中看到项目。

如果我对你的理解正确,你宁愿使用 mDate 字段 @timestamp。为此,请在 logstash 中使用 date{} filter