ELK的使用与简化

在最新的6.6版本中,elasticsearch 与 kibana 都已经默认集成了 X-Pack 安全插件,因此在连接的时候,如果未在 elasticsearch.yml 文件中进行允许匿名访问的设置,则必须使用用户名密码登录,否则就会出现以下报错:
ELK的使用与简化
然而在实际操作时,设置完匿名访问后依然报错,在 elasticsearch 社区看到需要在 logstash.yml 文件中写上 X-Pack 的一些设置,设置中包含了 elasticsearch 使用的地址。添加如下两句后该问题不再出现:

xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.url: http://X.X.X.X:9200 (该处写 elasticsearch 使用的IP)

此时再度尝试在命令行执行,出现了新的报错:
ELK的使用与简化
更换了 mysql 连接驱动后,新的报错:
ELK的使用与简化
该篇博文了解到,出现以上报错是由于安装目录中包含空格导致无法识别造成的,此后直接将 logstash 文件夹移动到其它路径下,成功启动:
ELK的使用与简化
6.6 版本可以成功运行,将软件卸载全部重新安装后,未对 logstash.yml 做出任何改动,也不再出现匿名访问设置的问题,真实出错原因有待探究。该版本对于二进制的支持也是值得注意的一点,推测是对使用二进制元数据进行特征标记的数据进行更好的识别以便于与相应算法结合进行数据分类。

与 Oracel11g R2 进行连接时,需注意使用的 JDBC 驱动包不是 ojdbc6,而是 ojdbc14。

再度运行后,会发现在 kibana 的界面上出现 “index_not_found_exception” 的报错,原本可以查询出的表数据现在无法查看:
ELK的使用与简化
discover 栏目只能看到一条数据记录:
ELK的使用与简化
而表中有5条记录:
ELK的使用与简化
出现这种情况,可能是由于清理掉了之前保留在 elasticsearch 的数据,也有可能是缓存无法被新数据覆盖。具体原因及解决方式待探究。由于logstash有些过于庞大,启动有些缓慢,而且公司项目涉及到的数据量并不庞大,因此领导让我直接自己写一个 java 类实现表转换为json文件再上传。参考博文

运行该类之后,生成的 json 文件:
ELK的使用与简化
接下来,使用 curl 进行文件传输:
ELK的使用与简化
要注意的是,如果数据库表所使用的字符集在 elastisearch 识别范围外,则会导致转换之后的 json 数据无法上传至 elasticsearch 。

传输后发现,POST请求中指定的“b”索引库名并不会被使用,具体作用有待探究。传输成功时,elasticsearch 界面如下:
ELK的使用与简化
ELK的使用与简化
至此手动传输数据成功。下一步,设置 HttpClient 以简化传输数据步骤。

使用 HttpClient 传输 json 数据,只需要在上一步转换数据的步骤当中增加一步将转换完成的数据存储入字符串流中,再将字符串流通过编写好的 HttpClient 使用类传递到 elasticsearch 使用的端口(默认9200)即可。

部署在服务器上时,由于许多项目需要用的 JDK 版本是1.7,所以需要将 1.8 单独指定给 elasticsearch,具体更改步骤参考博文