Excalibur
首发于Excalibur
Elasticsearch Logstash Kibana(ELK)代码和知识点总结(二)

Elasticsearch Logstash Kibana(ELK)代码和知识点总结(二)

先解决一个问题,当ElasticSearch查询的结果过多时,如果在前端页面上如果直接点击后面的结果,会报Result window is too large问题,解决方案如下:

Elasticsearch在页面上设置max_result_window - CSDN博客blog.csdn.net图标es的index.max_result_window只能修改一次? - Elastic中文社区elasticsearch.cn图标ES报错Result window is too large问题处理www.jianshu.com

至于是不是只能修改一次还没有尝试过2333,反正我只改了一次,解决了问题


接下来解决mysql数据库与els在windows环境下同步的问题

首先我查了一下,有很多同步的插件,各有优劣,主要参考了如下的文章:

elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解 - 铭毅天下 - CSDN博客blog.csdn.net图标利用logstash-input-jdbc实现ElasticSearch与mysql同步的教程_技术栈www.jishux.com

具体的优劣对比可以详细的去研究,但我比较了三种主流插件后决定用logstash-input-jdbc: ruby语言开发这一个,因为go-mysql-elasticsearch还不是很稳定,担心以后在开发中出现问题,elasticsearch-jdbc: java开发,去github上一看,发现支持的最新的版本才到2.3.4啊,而我用的els版本比较新,所以还是用logstash好了。

反正如果要用elasticsearch-jdbc-java的话,这边配置的时候还是要注意一下的

elasticsearch-jdbc的安装和使用 - Lufwill的博客 - CSDN博客blog.csdn.net
elasticsearch-jdbc 插件的使用 · Issue #3 · ameizi/elasticsearchgithub.com图标Elasticsearch JDBC的使用-MySQL 数据源导入和增量索引、更新blog.csdn.net

主要就是数据库地址+端口号+数据库名称,然后index对应库名字,type对应表名字


然后是logstash的安装,配置等,ruby自然要提前安装

使用Logstash同步mysql到Elasticsearch 6.0.1www.pocketdigi.com
Elasticsearch系列(九)----使用Logstash-input-jdbc同步数据库中的数据到ES - fendo - CSDN博客blog.csdn.net图标

其中提到了一个叫sense的插件,其实kibana中其实已经集成了,sense就是可以比较方便的

"No valid url specified" when trying to install Kibana's Sense pluginstackoverflow.com图标

通过http请求来实现创建Index之类的操作,当然也可以直接代码去增加索引es.index(index='document', doc_type='document', body={})

还有一些比较好的资源:

使用Logstash-input-jdbc同步数据库中的数据(全量 和 增量)blog.csdn.net图标logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解blog.csdn.net图标Elasticsearch JDBC的使用-MySQL 数据源导入和增量索引、更新blog.csdn.net
利用logstash的logstash-input-jdbc插件实现mysql增量导入ES_sh10034_新浪博客blog.sina.com.cn

全量更新在这4个博客的第一个中已经写的很好了,我试验了,也能成功同步,但是肯定不能每次都全量更新,而是要进行增量更新,这里要注意要在数据库表结构中增加更新时间(update_time)这一个列,因为后续更新的时候要根据这个字段进行同步,配置文件的jdbc.sql可以这么写:

select
    id as object_id,
    listpage.index,
    html as pro,
    created_time,
    update_time
from
    listpage
where
    update_time > :sql_last_value

然后在数据库里写sql,主要是更新,插入的sql,因为logstash的删除实时同步不行,上面的链接文章里有写,可以去研究一下

update listpage set html = 'lisp' where html='elixir';
alter table listpage add column update_time datetime default null;
insert into listpage (id, listpage.index, html, created_time, update_time) VALUES (3328871520, 456, 'elixir', NOW(), NOW());

这里要更新一下一个很蛋疼的问题,问题描述如下:

在windows server服务器上启动logstash时碰到了错误:找不到或无法加载主类

我一开始以为是java版本以及java home, path, classpath的设置问题,然后我重新装了jdk,这里先说明一下,不要用最新的jdk9, 版本过新并不支持,用jdk8就好,然后安装好完,配置好了以后发现还是报错,然后没办法,只能看一下logstash.bat文件里写了些什么,用echo %CLASSPATH%打印发现显示的是竟然是jdk9,什么鬼?我明明安装了jdk8啊,然后发现问题原来在path里面,oracle会自带jdk版本,当你把它写在java配置的前面时就会报错,然后我调整了一下顺序,成功识别了java8,但还没完,继续报错,还是找不到或无法加载主类,

使用 logstash + kafka + elasticsearch 实现日志监控www.jianshu.com图标

最后我在这篇文章里看到了kafka也有这样的问题,解决方法就是在CLASSPATH两边加双引号

代码如下:

%JAVA% %JAVA_OPTS% -cp "%CLASSPATH%" org.logstash.Logstash %*

这个问题折腾了一天多的时间。。。真的要报警了。。。

好,基本上问题就解决了,接下来会写一下Elasticsearch与中文分词的教程,因为现在发现一个问题,搜索时els貌似是按字来搜索的,感觉搜索效果并不好。

编辑于 2018-02-22

文章被以下专栏收录