0x01 前言

这两天在配置安装ELK5,对于刚入门的我遇到问题后完全是一头雾水…

昨天我遇到一个错误,从filebeat输出到logstash进行处理后的数据在导入到elasticsearch时却出现WARN的log。在经过一天无尽的资料寻找后终于找到了解决办法。

0x02 log

正常情况下filebeat检测到文件变化后开始向logstash输出日志,由logstash进行格式化处理后输出到elasticsearch保存以便通过kibana进行查看。

然而在今天早上我发现通过kibana已经无法查看到任何新增的log,然后我去翻查ELK套件的日志发现logstash出现了许多警告日志:

在日志的最后提示了错误的原因:

从日志中可以看出是找不到索引:

正因为找不到今天的索引,所以logstash无法将数据进行正确的写入。

0x03 原因

在经过无穷无尽的技术文档翻查后突然想起安装x-pack过程中有一句话:

意思是:如果禁用了Elasticsearch自动创建索引的功能,需要在elasticsearch.yml手动添加action.auto_create_index参数以允许X-Pack自动创建索引。需要在elasticsearch.yml中添加一下一行并重启elasticsearch:

那么logstash找不到索引是不是因为当天的索引没有创建呢?我通过以下命令检查索引:

返还的内容如下:

1478589975

箭头所指的位置就是索引,错误发生时并没有左侧箭头所指的filebeat-2016.11.08这个索引,这个是我修复错误后生成的。

0x04 解决

问题点找到了,那么解决办法有两种,一种是手动生成索引,另一种是在elasticsearch中赋予logstash创建索引的权限,让logstash自行创建索引。

手动创建索引的方法请参考以下地址:

create index API

手动创建索引的话可以写一个脚本,每天定时或者提前生成索引以供logstash使用。我选择了较为简单的一种方式,即赋予logstash创建索引的权限。在以下文件中添加内容:

因为我安装了X-Pack,所以要在X-Pack的索引后添加:filebeat* 即可。然后通过以下命令重启elasticsearch:

重启过程需要一点时间,最重要的是要检查服务是否正常启动:

0x05 结语

对于刚入门的我确实走了不少弯路,但我对这个开源项目的技术文档感觉非常好。写得很详细,若遇到问题基本不需要去Google即可在技术文档中找到解决办法。

在经过两天的配置学习,我已经能将服务正确地配置且能平稳地运行,明天我写篇安装过程的文章记录下需要注意的问题。

最后就是要深入学习filter模块,这才是最深奥的地方。