文章目录
- 1.1.安装Elasticsearch
- 1.2.安装Kibana
- 1.3.安装logstash
- 1.4.安装文档抽取插件 ingest-attachment
- 1.5.安装head插件
- 1.6.安装常见问题
- 1.启动es.bat时,出现中文乱码
- 2.启动es.bat闪退
- 3.ArgumentError: invalid byte sequence in US-ASCII =~ at org/jruby/问题
- 4.Logstash stopped processing because of an error: (SystemExit) exit
- 5.pipeline with id [attachment] does not exist
- 6.Root mapping definition has unsupported parameters:
- 7.es的head管理平台连不上
- 8. java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED
声明:版本号最好保持一致,例如这里es为7.62版本,Kibana和Logstash也得是7.62版本,否则会出现未知的问题
1.1.安装Elasticsearch
下载对应的版本:
解压运行elasticsearch.bat
E:\softwares\elasticsearch-7.6.2\bin
启动完成直接访问连接:127.0.0.1:9200
es启动成功!
1.2.安装Kibana
(es对应的版本号)
下载资源
1.2.1解压运行kibana.bat(先启动es,再启动kibana)
E:\softwares\kibana-7.6.2-windows-x86_64\bin
上面的是没有安装分词器的效果。
1.2.2下载ik分词器
下载资源(下载对应的版本)
将ik分词器解压放到es的plugin中
----记住ELK安装版本一定要一致,以后代码jar版本也尽量保持一致,以免有坑!!!
这里我走了弯路,下面 常见问题
会为这个踩坑记录说明前因后果------
正确的应该是下面这样的↓↓↓
重新启动es.bat。
重启成功后,刷新kabana,配置DSL查询语句,可看到分词效果
1.2.3 开启中文语言
Kibana在6.7以后的版本,支持了多种语言。并且自带在安装包里。
开启方式:
- 找到 Kibana 配置文件所在:config/kibana.yml
- 找到配置:
i18n.locale: "en"
并将en
修改为zh-CN
(简体中文)。 - 重启即可
1.3.安装logstash
(版本都是统一的7.6.2)(用于同步mysql和es的数据)
下载资源
1.3.1 安装logstash-input-jdbc
logstash-input-jdbc 是ruby开发的,先下载ruby并安装
下载地址: https://rubyinstaller.org/downloads
注:java的jdk配置路径不能有空格(C:\Program Files\Java)错误示范
ArgumentError: invalid byte sequence in US-ASCII =~ at org/jruby/
官网下载选择有好几种,选择不带开发工具的安装包即可,安装ruby2.6.4(x64),这里不需要安装带开发工具的ruby。
下载之后是一个exe文件,安装即可。
安装完成查看是否安装成功,在cmd窗口输入:ruby -v
logstash7.x版本本身不带logstash-input-jdbc插件,需要手动安装
进入logstash安装目录的bin目录下,输入:logstash-plugin.bat install logstash-input-jdbc
显示 Installation successful表示安装成功!
1.3.2 创建模板文件
Logstash的工作是从MySQL中读取数据,向ES中创建索引,这里需要提前创建mapping的模板文件以便logstash
使用。
-
在logstach的config目录创建xiaomifeng1010_template.json,内容如下:
目录是:E:\softwares\logstash-7.6.2\myconfig\xiaomifeng1010_template.json
{
"mappings" : {
"doc" : {
"properties" : {
"charge" : {
"type" : "keyword"
},
"description" : {
"analyzer" : "ik_max_word",
"search_analyzer" : "ik_smart",
"type" : "text"
},
"end_time" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
},
"expires" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
},
"grade" : {
"type" : "keyword"
},
"id" : {
"type" : "keyword"
},
"mt" : {
"type" : "keyword"
},
"name" : {
"analyzer" : "ik_max_word",
"search_analyzer" : "ik_smart",
"type" : "text"
},
"pic" : {
"index" : false,
"type" : "keyword"
},
"price" : {
"type" : "float"
},
"price_old" : {
"type" : "float"
},
"pub_time" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
},
"qq" : {
"index" : false,
"type" : "keyword"
},
"st" : {
"type" : "keyword"
},
"start_time" : {
"format" : "yyyy-MM-dd HH:mm:ss",
"type" : "date"
},
"status" : {
"type" : "keyword"
},
"studymodel" : {
"type" : "keyword"
},
"teachmode" : {
"type" : "keyword"
},
"teachplan" : {
"analyzer" : "ik_max_word",
"search_analyzer" : "ik_smart",
"type" : "text"
},
"users" : {
"index" : false,
"type" : "text"
},
"valid" : {
"type" : "keyword"
}
}
}
},
"template" : "xiaomifeng1010"
}
- 配置mysql.conf
在logstash的config目录下配置mysql.conf文件供logstash使用,logstash会根据mysql.conf文件的配置的地址从
MySQL中读取数据向ES中写入索引。
参考https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html
配置输入数据源和输出数据源。
input {
stdin {
}
jdbc {
jdbc_connection_string => "jdbc:mysql://localhost:3306/es?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"
# the user we wish to excute our statement as
jdbc_user => "root"
jdbc_password => "root"
# the path to our downloaded jdbc driver
jdbc_driver_library => "E://softwares//logstash-7.6.2//myconfig//mysql-connector-java-8.0.18.jar"
# the name of the driver class for mysql
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
#要执行的sql文件
#statement_filepath => "/conf/course.sql"
statement => "select * from course_pub where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)"
#定时配置
schedule => "* * * * *"
record_last_run => true
last_run_metadata_path => "E://softwares//logstash-7.6.2//myconfig//logstash_metadata"
}
}
output {
elasticsearch {
#ES的ip地址和端口
hosts => "localhost:9200"
#hosts => ["localhost:9200","localhost:9202","localhost:9203"]
#ES索引库名称
index => "xc_course"
document_id => "%{id}"
document_type => "doc"
template =>"E://softwares//logstash-7.6.2//myconfig//xiaomifeng1010_template.json"
template_name =>"xiaomifeng1010"
template_overwrite =>"true"
}
stdout {
#日志输出
codec => json_lines
}
}
以下红色标注是需要修改的地方:
以上需要修改的地方,换成自己的
说明:
1、ES采用UTC时区问题
ES采用UTC 时区,比北京时间早8小时,所以ES读取数据时让最后更新时间加8小时
where timestamp > date_add(:sql_last_value,INTERVAL 8 HOUR)
2、logstash每个执行完成会在E:\softwares\logstash-7.6.2\myconfig\logstash_metadata记录执行时间下次以此
时间为基准进行增量同步数据到索引库。
配置数据源以及查询的表:
DROP TABLE IF EXISTS `course_pub`;
CREATE TABLE `course_pub` (
`id` varchar(32) NOT NULL COMMENT '主键',
`name` varchar(32) NOT NULL COMMENT '课程名称',
`users` varchar(500) NOT NULL COMMENT '适用人群',
`mt` varchar(32) NOT NULL COMMENT '大分类',
`st` varchar(32) NOT NULL COMMENT '小分类',
`grade` varchar(32) NOT NULL COMMENT '课程等级',
`studymodel` varchar(32) NOT NULL COMMENT '学习模式',
`teachmode` varchar(32) DEFAULT NULL COMMENT '教育模式',
`description` text NOT NULL COMMENT '课程介绍',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '时间戳logstash使用',
`charge` varchar(32) NOT NULL COMMENT '收费规则,对应数据字典',
`valid` varchar(32) NOT NULL COMMENT '有效性,对应数据字典',
`qq` varchar(32) DEFAULT NULL COMMENT '咨询qq',
`price` float(10,2) DEFAULT NULL COMMENT '价格',
`price_old` float(10,2) DEFAULT NULL COMMENT '原价格',
`expires` varchar(32) DEFAULT NULL COMMENT '过期时间',
`start_time` varchar(32) DEFAULT NULL COMMENT '课程有效期-开始时间',
`end_time` varchar(32) DEFAULT NULL COMMENT '课程有效期-结束时间',
`pic` varchar(500) DEFAULT NULL COMMENT '课程图片',
`teachplan` text NOT NULL COMMENT '课程计划',
`pub_time` varchar(32) DEFAULT NULL COMMENT '发布时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `course_pub` */
insert into `course_pub`(`id`,`name`,`users`,`mt`,`st`,`grade`,`studymodel`,`teachmode`,`description`,`timestamp`,`charge`,`valid`,`qq`,`price`,`price_old`,`expires`,`start_time`,`end_time`,`pic`,`teachplan`,`pub_time`) values ('297e7c7c62b888f00162b8a7dec20000','test_java基础33','java爱好者d','1-3','1-3-3','200002','201002',NULL,'test_java基础33test_java基础33test_java基础33','2018-04-27 22:57:24','203002','204002','32432',55.00,NULL,NULL,NULL,NULL,'group1/M00/00/02/wKhlQFrQfNqAL0d_AALDG1Ia4xE439.png','','2018-04-26 16:57:23'),('297e7c7c62b888f00162b8a965510001','test_java基础','test_java基础','1-3','1-3-2','200001','201001',NULL,'test_java基础2test_java基础2test_java基础2test_java基础2test_java基础2test_java基础2test_java基础2test_java基础2test_java基础2test_java基础2','2018-04-27 22:57:24','203001','204001','443242',NULL,NULL,NULL,NULL,NULL,'group1/M00/00/00/wKhlQFrZS2aACA0LAAAxkpcK7CQ874.jpg','java基础语法 ','2018-04-25 19:11:35'),('297e7c7c62b8aa9d0162b8ab13910000','java基础3','java基础3','1-3','1-3-2','200001','201001',NULL,'java基础3java基础3java基础3java基础3java基础3java基础3','2018-04-27 22:57:24','203001','204001',NULL,NULL,NULL,NULL,NULL,NULL,'group1/M00/00/00/wKhlQFrZS2aACA0LAAAxkpcK7CQ874.jpg','','2018-04-26 17:10:55'),('402885816243d2dd016243f24c030002','大数据','具有一定的java基础','1-6','1-6-1','200001','201001',NULL,'111111大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据大数据','2018-05-26 16:49:33','203002','204001',NULL,99.00,199.00,NULL,NULL,NULL,'group1/M00/00/02/wKhlQFrQfNqAL0d_AALDG1Ia4xE439.png','第一节 ','2018-04-25 19:11:35'),('4028858162e0bc0a0162e0bfdf1a0000','人工智能+python','小白','1-6','1-6-5','200002','201001',NULL,'人工智能+python非常不错!!!','2018-04-27 22:57:24','203002','204002','45323453',198.00,NULL,NULL,NULL,NULL,'group1/M00/00/00/wKhlQFrZS2aACA0LAAAxkpcK7CQ874.jpg','','2018-04-25 19:11:35'),('4028e581617f945f01617f9dabc40000','Bootstrap开发框架','','1-1','1-1-1','200002','201001',NULL,'Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。','2018-05-05 19:24:41','203002','204001','4455432',0.01,NULL,NULL,NULL,NULL,'group1/M00/00/01/wKhlQFqO0OGAFyhGAAA-8SWa8Qc537.jpg','计算机原理 计算机硬件 计算机软件 计算机编程入门 java语法介绍 Hello World 数据库编程 操作系统原理 操作系统类型介绍 操作系统原理 ','2018-04-25 19:11:35'),('4028e58161bcf7f40161bcf8b77c0000','spring cloud实战','所有人','1-3','1-3-2','200003','201001','','本课程主要从四个章节进行讲解: 1.微服务架构入门 2.spring cloud 基础入门 3.实战Spring Boot 4.注册中心eureka。','2018-04-27 22:57:24','203002','204002','54354353',0.01,NULL,NULL,NULL,NULL,'group1/M00/00/01/wKhlQFqO2HqAA6sPAAArlhJed-w088.jpg','微服务架构入门 为什么要使用微服务:单体架构的特点 为什么要使用微服务:微服务的优缺点 spring cloud 基础入门 为什么要选择spring cloud? 为什么springcloud要设计一套新的版本升级规则? 实战-Spring Boot 为什么越来越多的开发者选择使用spring boot?它解决了什么问题? spring boot的入门例子 注册中心Eureka 微服务架构为什么需要注册中心,它解决了什么问题? 一个Eureka注册中心的入门例子 ','2018-04-25 19:11:35'),('4028e58161bd22e60161bd23672a0001','Javascript之VueJS','所有人','1-1','1-1-9','200002','201001','','Vue系列课程:从Vue1.0讲到Vue2.0,从理论讲到实战,理论与案例巧妙结合,让课程更容易理解!','2018-04-27 16:57:24','203002','204001','4324322',0.01,NULL,NULL,NULL,NULL,'group1/M00/00/01/wKhlQFqO4MmAOP53AAAcwDwm6SU490.jpg','Vuejs 第一讲 第一节 vue基础、常用指令、bootstrap+vue的简易留言 第二节 属性和事件、模板、交互、案例 Vuejs 第二讲 第一节 计算属性的使用、vue实例的简单方法、提高循环的性能,让重复数据显示出来 第二节 自定义过滤器、自定义指令 、自定义键盘事件、数据的监听 Vuejs 第三讲 ','2018-04-25 19:11:35'),('4028e58161bd3b380161bd3bcd2f0000','Redis从入门到项目实战','','1-3','1-3-2','200002','201001',NULL,'redis在当前的大型网站和500强企业中,已被广泛应用。 redis是基于内存的key-value数据库,比传统的关系型数据库在性能方面有非常大的优势。 肖老师这套视频,精选了redis在实际项目中的十几个应用场景。通过本课程的学习,可以让学员快速掌握redis在实际项目中如何应用。 作为架构师,redis是必须要掌握的技能!','2018-05-16 18:55:36','203002','204001','32432432',0.01,NULL,NULL,NULL,NULL,'group1/M00/00/01/wKhlQFqO5yqAQMozAAAqor3lyz0082.jpg','第一章:redis简介 第一节 NoSQL简介 第二节 认识Redis 第二章:redis的安装与配置 第三章:Redis数据操作 第四章:Redis进阶操作 第五章:Redis主从配置 ','2018-04-25 19:11:35');
创建的数据库es,数据表course_pub
1.3.3 启动logstash.bat:
直接在cmd窗口输入logstash.bat会报错:
会提示pipeline.yml文件为空白,该文件默认情况下,全文注释,所以直接启动logstash.bat,找不到pipeline,报错。
- 打开pipeline.yml文件
注:红色框之间的那一段是没有放开注释的
- 然后再次启动logstash.bat
1.3.4.测试同步数据
- 进入E:\softwares\logstash-7.6.2\bin 输入cmd命令
运行logstash -f ..\myconfig\mysql.conf
Es同步数据,新创建的索引xc_course
创建索引成功
1.4.安装文档抽取插件 ingest-attachment
抽取附件内容,相当于是把附件转成Base64编码上传到es中,es会自动解析
- 两种安装方式
-
第一种方式
① 切换到es 的 bin 目录
② 在目录里输入cmd 回车
③ 在cmd命令输入框中输入elasticsearch-plugin install ingest-attachment
进行安装
-
第二种方式
下载插件,解压放到es的plugins文件夹下
https://artifacts.elastic.co/downloads/elasticsearch-plugins/ingest-attachment/ingest-attachment-7.6.2.zip
1.5.安装head插件
head插件可以很方便的操作es,head插件与es的关系就像navicat与MySQL数据库的关系,不过head插件的界面也是通过访问网址浏览的。
1.下载插件 https://github.com/mobz/elasticsearch-head
下载好并解压。
2.安装node.js:https://nodejs.org/zh-cn/#home-downloadhead插件需要node.js的支持,所以要安装它。
安装一路next即可。输入
node -v
若出现node.js的版本信息,则安装成功。
3.安装grunt: 运行head需要借助grunt命令,所以要安装。 在cmd窗口进入node.js安装的根目录,然后执行npm install -g grunt -cli
4.安装pathomjs: 在cmd命令窗口进入head插件解压后的根目录,然后执行npm install
5.连接es: 在es的安装根目录的config目录下有elasticsearch.yml,在此文件中添加如下内容:
http.cors.enabled: true
http.cors.allow-origin: "*"
6.运行head: 在cmd命令窗口进入head插件解压后的根目录,然后执行grunt server
,如下图就启动成功。
浏览器打开http://localhost:9100/
,如下图
1.6.安装常见问题
1.启动es.bat时,出现中文乱码
- 解决方法:找到conf目录下的jvm.options文件,添加
-Dfile.encoding=GBK
2.启动es.bat闪退
进入es的bin目录,输入cmd进入黑窗口,输入elasticsearch.bat回车,查看报错信息。
报错结果:java.lang.IllegalArgumentException: Plugin [analysis-ik] was built for Elasticsearch version 7.12.0 but version 7.6.2 is running ,版本不一致导致,安装的es7.6.2版本,IK分词器为7.12.0版本
- 解决方法:
第一种方法: 下载同一个版本的ik分词器,这里是7.6.2版本。 (推荐)
第二种方法: 修改IK分词器配置文件,plugin-descriptor.properties文件
elasticsearch.version= 7.6.2
你的ES版本号
3.ArgumentError: invalid byte sequence in US-ASCII =~ at org/jruby/问题
目录有空格,文中有提到
- 解决方法:指定无空格的安装目录
4.Logstash stopped processing because of an error: (SystemExit) exit
可能原因:服务占用
- 关掉上面的Logstash.bat服务,重新运行
logstash -f ..\myconfig\mysql.conf
出现如下,表示运行成功
5.pipeline with id [attachment] does not exist
插件不存在
- 解决方法:安装对应插件,重启服务
6.Root mapping definition has unsupported parameters:
下面的指令在ES6没问题:
PUT test_index
{
"settings":{
"number_of_shards":1,
"number_of_replicas":0
},
"mappings":{
"product": {
"properties": {
"title": {"type": "text"}
}
}
}
}
product为指定索引类型
ES7必须改为:
PUT test_index
{
"settings":{
"number_of_shards":1,
"number_of_replicas":0
},
"mappings":{
"properties": {
"title": {"type": "text"}
}
}
}
原因:elasticsearch7默认不在支持指定索引类型,默认索引类型是_doc
- 解决方法:如果想改变,则配置include_type_name: true 即可。
- 官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.6/index.html
7.es的head管理平台连不上
端口号不一致导致跨域
- 解决方法:添加如下两行
http.cors.enabled: true
http.cors.allow-origin: "*"
8. java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED
某度翻译:java.lang.IllegalStateException:请求无法执行;I/O反应器状态:停止。可能原因是资源被关闭了。
Reactor1是个什么东东?
- 解决方法:去掉代码中的关闭资源
参考博客:
https://blog.csdn.net/qq_33371766/article/details/103322707
https://blog.csdn.net/huiyunfei/article/details/89496407
https://www.cnblogs.com/chuangcc/p/11205951.html
Reactor简介:反应器模式由Reactor反应器线程、Handlers处理器两大角色组成:
(1)Reactor反应器线程的职责:负责响应IO事件,并且分发到Handlers处理器。
(2)Handlers处理器的职责:非阻塞的执行业务处理逻辑。
从上面的反应器模式定义,看不出这种模式有什么神奇的地方。当然,从简单到复杂,反应器模式也有很多版本。根据前面的定义,仅仅是最为简单的一个版本 ↩︎