为什么 kibana 中没有 logstash 索引

Why are there no logstash indexes in kibana

我按照 digitalocean 教程使用我的 ELK 节点设置了 ELK stack 和 filebeat 作为 RedHat 服务器。 Kibana 已启动并且 运行,但是当我将索引模式配置为 logstash-*:

时,我没有看到任何 logstash 索引
Unable to fetch mapping. Do you have any indices matching the pattern? 

当我执行 curl 查看我拥有的索引时,它们只是 filebeat 索引。 Filebeat 应该将数据推送到正在侦听 5044

的 logstash
$curl 'localhost:9200/_cat/indices?v'
health status index               pri rep docs.count docs.deleted store.size pri.store.size 
yellow open   filebeat-2017.01.10   5   1       3864            0      1.7mb          1.7mb 
yellow open   filebeat-2017.06.17   5   1       1848            0    740.1kb        740.1kb 
yellow open   filebeat-2017.01.18   5   1      77062            0       33mb           33mb 
yellow open   filebeat-2017.09.14   5   1       1932            0      1.1mb          1.1mb 
yellow open   filebeat-2017.01.11   5   1      19094            0      3.6mb          3.6mb 
yellow open   .kibana  

你可以看到我只有filebeat索引。我检查了我的端口是否打开,并且根据教程我的配置文件是正确的。有什么问题吗? Filebeat 应该将日志从 /var/log/*.log 发送到 logstash,到 elasticsearch。

当我

tail /var/log/logstash/logstash.log

我的 logstash 日志中没有任何内容。我查了一下,logstash、filebeat、kibana、elasticsearch 都是运行。我也做了配置文件测试,它说没问题:

$sudo service logstash status
logstash is running

在我的ELK节点上,可以清楚的看到5044端口正在监听:

$ netstat -tulpn | grep -i listen | grep -v tcp6
 tcp        0      0 :::5044                     :::*                        LISTEN      -  

define 您的 Kibana 中的索引是否来自 管理 > 索引模式 > 添加新

很明显,您将无法在 Kibana 中找到使用 logstash 创建的索引,除非您在 Managemen 部分中手动创建它 Kibana.

确保您使用 logstash 创建的索引名称相同。看看 doc,它表示:

When you define an index pattern, indices that match that pattern must exist in Elasticsearch. Those indices must contain data.

这几乎是说索引应该存在,以便您在 Kibana 中创建索引。 logstash 所做的是,仅在 Elasticsearch 中创建索引,而您必须在 Kibana 中手动创建它们才能访问和可视化数据。

希望对您有所帮助!

Filebeat 使用 filebeat-YYYY.MM.dd 模式创建每日索引,因此您不应期望在 Elasticsearch 中看到 logstash 索引。

Filebeat文档中推荐的Logstash configuration将数据写入基于"%{[@metadata][beat]}-%{+YYYY.MM.dd}"的索引,其中[@metadata][beat]默认为节拍(filebeat)的名称,除非output.logstash.index 在 Filebeat 配置中配置。这是 Logstash 的基本配置。

input {
  beats {
    port => 5044
  }   
}   

output {
  elasticsearch {
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }   
}

您可以检查这些索引中的数据,看看它是否是您希望使用如下命令从 filebeat 获得的数据:

curl http://localhost:9200/filebeat-*/_search?pretty&size=100