通过弹性输出从 Logstash 发送的信息未显示在 Kibana 中,但文件输出工作正常 - 我做错了什么?

通过弹性输出从 Logstash 发送的信息未显示在 Kibana 中,但文件输出工作正常 - 我做错了什么?

我有一个“ELK 堆栈”配置,起初,我使用 elasticsearch 输出插件从 logstash 执行标准“filebeat”系统日志馈送。它工作得很好。

现在我添加了一个 TCP 输入端口(为该数据分配了“类型”,以便执行 if [type] == "thistype" 来区分过滤器)、它自己的 grok 过滤器,以及使用其自己唯一的索引名称和 document_type 名称和文件向 elasticsearch 输出的数据。当数据通过 TCP 端口进入时,它会按照文件输出插件中的预期将格式正确的数据写入输出文件,但当我选择给定的索引时,Kibana 中没有显示任何数据。Kibana 从我的输出配置中识别索引,并列出我在 grok 过滤器中分配的所有字段/键;但是,同样,没有数据可搜索。正如我提到的那样,数据肯定被正确 grok 了,因为它出现在文件插件输出中。

我在这里做错了什么?我的配置如下:

input {
  tcp {
    host => "10.1.1.10"
    port => 12345
    type => "odata"
    id => "odata"
    codec => line
  }
}

filter {
  if [type] == "odata" {
    grok {
      match => { "message" => "%{QUOTEDSTRING:oid},\"%{WORD:oword1}\",\"%{IPV4:oclientip}\",\"%{DATA:otimestamp}\",%{QUOTEDSTRING:opl},%{QUOTEDSTRING:oos},%{QUOTEDSTRING:oua}" }
      remove_field => "message"
    }

    date {
      match => ["otimestamp", "YYYY-MM-dd HH:mm:ss Z"]
    }

    mutate {
      remove_field => "otimestamp"
      remove_field => "host"
      remove_field => "@version"
    }
  }
}

output {
# the if .. is here because there are other types that are handled in this output since I centralize the input, filter, and output files to three distinct files.
  if [type] == "odata" {
    elasticsearch {
      hosts => ["10.1.1.1:9200", "10.1.1.2:9200"]
      sniffing => false
      index => "odataindex"
      document_type => "odatatype"
    }
    file {
      path => "/tmp/odata_output"
    }
  }
}

同样,grok 过滤器很好;数据通过 tcp 提取得很好;文件输出插件很好地输出了解释/grokd 字段。Kibana 从 grok 过滤器中看到了“odataindex”索引和字段(例如 oid、oclientip、oua 等)。当我进行搜索时,它没有返回任何数据。

有什么想法吗?我是 elastic/kibana/logstash 的新手,也希望得到有关调试这些内容的任何提示。

先感谢您!

答案1

由于不熟悉 Kibana,我不知道默认搜索/显示的数据的时间限制仅为 15 分钟。传入的数据通过“date”插件带有原始打开日期的时间戳(@timestamp 键),而不是通过 TCP 端口到弹性插入事件的时间;因此,没有显示任何数据,我不知道默认情况下只显示基于 @timestamp 的过去 15 分钟的数据。如果我读过关于时间限制的部分,我就会知道。所以我只是调整了时间以回溯无限年并查看了我的数据。

因此,如果其他人遇到这个问题,可能是因为您创建了时间相关索引,但还没有单击右上角的“时间”按钮并更改时间范围。

朋友们,这就是你们阅读手册的原因!

相关内容