windows 系统
springboot:2.1.3.RELEASE
elasticsearch: 6.2.2
kibana: 6.2.2
logstash: 6.2.2
Java:1.8
其他环境:springdata, mybatis, mysql 等
强调:elasticsearch, kibana, logstash 版本一定要匹配
下载 elasticsearch, 解压到指定目录,该步骤网上有很多教程,不细说了,解压后到 bin 目录下,执行 elasticsearch.bat 文件,成功执行后访问:http://localhost:9200/, 显示如下图,即为成功
下载 kibana, 解压到指定目录,该步骤网上有很多教程,不细说了, 解压后到 bin 目录下, 执行 kibana.bat 文件,启动成功后,访问:http://localhost:5601/,显示如下图,即为成功。
2.3 logstash 测试下载 logstash, 解压到指定目录,该步骤网上有很多教程,不细说了, 解压后到 config 目录下,创建 logstash.conf 文件,文件为 springboot 集成时要用到的配置,文件内容为:
input { tcp { mode => "server" host => "127.0.0.1" port => 4560 codec => json_lines } } output { elasticsearch { hosts => "localhost:9200" index => "springboot-logstash-%{+YYYY.MM.dd}" } }
强调:文件缩进及格式要严格正确,否则启动会报错。
文件配置完成后,切换到 bin 目录下,执行命令进行测试:logstash -e “input { stdin { } } output { elasticsearch { hosts => [‘127.0.0.1:9200’] } }”。 执行后稍等一下屏幕会出现等待输入的提示,如:
输入 hello,然后查看 kibana 页面,会出现索引为 logstash-xxx 的索引,并且可以看到 hello, 如:
该步成功后,意味着 logstash 可以收集信息并发送到 elasticsearch,并在 bibana 页面展示,整个流程是通的。成功后在 bin 目录下执行启动命令:logstash -f …/config/logstash.conf, 稍等一下等待启动成功, 启动成功后访问:http://localhost:9600/, 如下所示:
至此 ELK 的环境准备及测试完成,接下来进行springboot 集成 ELK 所需的配置
三 配置简单准备一个可以正常启动的 springboot 项目,且有 log 的输出。
本文只列出关于 ELK 的相关配置,其他依赖或者配置可以自由添加,如 redis, mongdb等。
- 添加依赖:
mysql mysql-connector-java8.0.15 org.springframework.boot spring-boot-starter-data-elasticsearchorg.junit.jupiter junit-jupiterRELEASE test net.logstash.logback logstash-logback-encoder5.3
其他所需依赖可以自由添加,如 mybatis 分页或者 mybati 生成器之类的。
- application.yml 内容类似:
server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: xxx password: xxx data: elasticsearch: repositories: enabled: true cluster-nodes: 127.0.0.1:9300 # es的连接地址及端口号 cluster-name: elasticsearch # es集群的名称 mybatis: mapper-locations: - classpath:mappermapper/*.xml logging: level: root=INFO: config: classpath:logback-spring.xml
有其他配置可以自由添加。
- resource 目录下添加文件 logback-spring.xml,文件内容为:
INFO ${CONSOLE_LOG_PATTERN} utf8 127.0.0.1:4560 UTC { "logLevel": "%level", "serviceName": "${springAppName:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" }
成功启动项目, 访问项目,触发 log 的输出,在 kibana 页面如果可以看到 springboot-logstash-xxx 的索引,就已经成功一半了,接下来,在 kibana 页面创建索引:
索引名称可以按照规则自己随便填,点击下一步,
之后就可以在 Discover 中查询自己想要关注的内容了,搜索 log 中的关键字等。至此, 集成完成。
集成过程遇到了一些问题,记录一下。
4.1 项目启动失败项目本来启动正常,但是当集成 logstash 后,启动失败,错误为: Caused by: java.lang.IllegalArgumentException: mapper [brandName] of different type, current_type [text], merged_type [keyword] 等。
查询出错误原因为 elasticsearch 上的索引映射数据和现在对不上,数据不一致导致的,所以解决办法就是删除 es 上的索引。如在 kibana 界面,Dev Tools 功能下,执行命令:
DELETE xxx { "query": { "match_all": {} } }
其中 XXX 为 索引名称。
删除成功后,再次启动项目,启动成功,问题解决。
在 kibana 页面创建索引曾经一直失败,点击创建按钮后就一直在这个页面上,F12 打开控制台,发现该请求一直返回 503,service unreachable,调整了好久,又调整 es 以及 kibana 的 yml 配置文件,把 端口号之类的注释都打开了,的确可以成功创建了,但是 项目又不好用了,后来又把改的配置文件都还原,调整项目可以正常启动及使用,然后调整 logstash,conf 文件,使其可以连接到本地的 es,注意,调整完成后一定要重启,重启后,再次创建,可以成功了。
五 总结还有一堆琐碎的小问题,都在网上很快找到了答案,就不记载了。之前项目已经用 spring data 集成了 es, 这次加上 logstash, 也弄了两天,遇到了很多问题,也都一一解决了,终于把整个 ELK 框架搭建完成,收获很多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)