Spring Boot 搭建 ELK正确看日志的配置流程
为什么要用ELK
ELK实际上是三个工具,Elastricsearch+Logstash+Kibana,通过ELK,用来收集日志还有进行日志分析,最后通过可视化UI进行展示。一开始业务量比较小的时候,通过简单的SLF4J+Logger在服务器打印日志,通过grep进行简单查询,但是随着业务量增加,数据量也会不断增加,所以使用ELK可以进行大数量的日志收集和分析
简单画了一下架构图
在环境配置中,主要介绍Mac和Linux配置,Windows系统大致相同,当然,前提是大家都安装了JDK1.8及以上版本~
[root@VM_234_23_centos~]#java-version javaversion"1.8.0_161" Java(TM)SERuntimeEnvironment(build1.8.0_161-b12) JavaHotSpot(TM)64-BitServerVM(build25.161-b12,mixedmode)
注意:高版本的ELK同样需要高版本的JDK支持,本文配置的ELK版本是6.0+,所以需要的JDK版本不小于1.8
Elasticsearch
Elasticsearch是一个分布式的RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为ElasticStack的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
Mac安装和运行:
- 安装:brewinstallelasticsearch
- 运行:elasticsearch
Linux:从Elasticsearch官方地址下载(也可以下载完,通过ftp之类的工具传上去),gz文件的话通过tar进行解压缩,然后进入bin目录下运行软件。
[root@VM_234_23_centosapp]#curl-L-Ohttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz [root@VM_234_23_centosapp]#tar-zxvfelasticsearch-6.2.4.tar.gz [root@VM_234_23_centosapp]#cdelasticsearch-6.2.4 [root@VM_234_23_centoselasticsearch-6.2.4]#./bin/elasticsearch
注意:在Linux机器上,运行Elasticsearch需要一个新的用户组,文章最后有Elastic在Linux安装的踩坑记录。
Logstash
Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。(我们的存储库当然是Elasticsearch。)——官方卖萌
软件安装
Mac安装:
brewinstalllogstash
Linux安装:
[root@VM_234_23_centosapp]#curl-L-Ohttps://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz %Total%Received%XferdAverageSpeedTimeTimeTimeCurrent DloadUploadTotalSpentLeftSpeed 100137M100137M005849k00:00:240:00:24--:--:--6597k [root@VM_234_23_centosapp]#tar-zxvflogstash-6.3.2.tar.gz
修改配置文件
vim/etc/logstash.conf
conf文件,指定要使用的插件,和配置对应的elasticsearch的hosts。
input{stdin{}} output{ elasticsearch{hosts=>["localhost:9200"]} stdout{codec=>rubydebug} }
运行
bin/logstash-flogstash.conf
访问http://localhost:9600/
{ "host":"=-=", "version":"6.2.4", "http_address":"127.0.0.1:9600", "id":"5b47e81f-bdf8-48fc-9537-400107a13bd2", "name":"=-=", "build_date":"2018-04-12T22:29:17Z", "build_sha":"a425a422e03087ac34ad6949f7c95ec6d27faf14", "build_snapshot":false }
在Elasticsearch日志中,也能看到Logstash正常加入的日志。
[2018-08-16T14:08:36,436][INFO][o.e.c.m.MetaDataIndexTemplateService][f2s1SD8]addingtemplate[logstash]forindexpatterns[logstash-*]
看到这种返回值,表示已经成功安装和启动。
踩坑
在运行的那一步,有可能遇到内存分配错误:
JavaHotSpot(TM)64-BitServerVMwarning:INFO:os::commit_memory(0x00000000c5330000,986513408,0)failed;error='Cannotallocatememory'(errno=12)
这个错误很明显就是内存不足,由于个人购买的是腾讯云1G内存的服务器(如果是壕,请随意购买更高的配置=-=),已经运行了Elasticsearch,导致Logstash分配不到足够的内存,所以最后要修改一下JVM配置。
[root@VM_234_23_centoslogstash-6.3.2]#cdconfig/ [root@VM_234_23_centosconfig]#ll total28 -rw-r--r--1rootroot1846Jul2014:19jvm.options -rw-r--r--1rootroot4466Jul2014:19log4j2.properties -rw-r--r--1rootroot8097Jul2014:19logstash.yml -rw-r--r--1rootroot3244Jul2014:19pipelines.yml -rw-r--r--1rootroot1696Jul2014:19startup.options [root@VM_234_23_centosconfig]#vimjvm.options
将-Xms1g-Xmx1g修改为:
-Xms256m
-Xmx256m
然后就能正常启动了~~
Kibana
软件安装
Kibana让您能够可视化Elasticsearch中的数据并操作ElasticStack,因此您可以在这里解开任何疑问:例如,为何会在凌晨2:00被传呼,雨水会对季度数据造成怎样的影响。(而且展示的图标十分酷炫)
Mac安装:
brewinstallkibana
Linux安装,官方下载地址:https://www.elastic.co/downloads/kibana
[root@VM_234_23_centosapp]#curl-L-Ohttps://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-linux-x86_64.tar.gz %Total%Received%XferdAverageSpeedTimeTimeTimeCurrent DloadUploadTotalSpentLeftSpeed 0195M0271k001923502:57:540:00:142:57:4026393
在这一步,有可能下载速度奇慢,所以我本地下载好之后,通过rz命令传输到服务器。
[root@VM_234_23_centosapp]#rz rzwaitingtoreceive. Startingzmodemtransfer.PressCtrl+Ctocancel. Transferringkibana-6.3.2-linux-x86_64.tar.gz... 100%200519KB751KB/sec00:04:270Errors [root@VM_234_23_centosapp]#tar-zxvfkibana-6.3.2-linux-x86_64.tar.gz
修改配置
修改config/kibana.yml配置文件,设置elasticsearch.url指向Elasticsearch实例。
如果跟我一样使用默认的配置,可以不需要修改该文件。
启动
[root@VM_234_23_centoskibana]#./bin/kibana
访问http://localhost:5601/app/kibana#/home?_g=()
界面显示了这么多功能,下面通过整合SLF4J+LogBack。
整合Spring+Logstash
修改logstash.conf后,重新启动Logstash
input{ #stdin{} tcp{ #host:port就是上面appender中的destination, #这里其实把Logstash作为服务,开启9250端口接收logback发出的消息 host=>"127.0.0.1"port=>9250mode=>"server"tags=>["tags"]codec=>json_lines } } output{ elasticsearch{hosts=>["localhost:9200"]} stdout{codec=>rubydebug} }
在Java应用中引用依赖
net.logstash.logback logstash-logback-encoder 5.2
在logback.xml中配置日志输出
localhost:9250 {"appname":"ye_test"}
由于我在第一步骤中,没有指定对应的index,所以在服务启动的时候,日志采集器Logstash帮我自动创建了logstash-timestamp的index。
在Kibana中添加index索引
在左边discover中查看索引信息
添加可视化图表Visualize
还有更多功能还在探索中,首先环境搭起来才会用动力继续去学习~
踩坑记录启动报错
uncaughtexceptioninthread[main]org.elasticsearch.bootstrap.StartupException:java.lang.RuntimeException:cannotrunelasticsearchasroot
原因:不能使用Root权限登录
解决方案:切换用户
[root@VM_234_23_centos~]#groupaddes [root@VM_234_23_centos~]#useraddes-ges-pes [root@VM_234_23_centos~]#chownes:es/home/app/elasticsearch/ #切换用户,记得su-,这样才能获得环境变量 [root@VM_234_23_centos~]#sudosu-es Exceptioninthread“main”java.nio.file.AccessDeniedException:
错误原因:使用非root用户启动ES,而该用户的文件权限不足而被拒绝执行。
解决方法:chown-R用户名:用户名文件(目录)名
例如:chown-Rabc:abcsearchengine,再启动ES就正常了
Elasticsearch启动后报Killed
[2018-07-13T10:19:44,775][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[aggs-matrix-stats]
[2018-07-13T10:19:44,779][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[analysis-common]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[ingest-common]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[lang-expression]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[lang-mustache]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[lang-painless]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[mapper-extras]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[parent-join]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[percolator]
[2018-07-13T10:19:44,780][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[rank-eval]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[reindex]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[repository-url]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[transport-netty4]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[tribe]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-core]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-deprecation]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-graph]
[2018-07-13T10:19:44,781][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-logstash]
[2018-07-13T10:19:44,782][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-ml]
[2018-07-13T10:19:44,782][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-monitoring]
[2018-07-13T10:19:44,782][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-rollup]
[2018-07-13T10:19:44,782][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-security]
[2018-07-13T10:19:44,782][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-sql]
[2018-07-13T10:19:44,782][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-upgrade]
[2018-07-13T10:19:44,782][INFO][o.e.p.PluginsService ][f2s1SD8]loadedmodule[x-pack-watcher]
[2018-07-13T10:19:44,783][INFO][o.e.p.PluginsService ][f2s1SD8]nopluginsloaded
Killed
修改config目录下的jvm.options,将堆的大小设置小一点。
#Xmsrepresentstheinitialsizeoftotalheapspace #Xmxrepresentsthemaximumsizeoftotalheapspace -Xms512m -Xmx512m
虚拟内存不足
maxvirtualmemoryareasvm.max_map_count[65530]istoolow,increasetoatleast[262144]
需要修改虚拟内存的大小(在root权限下)
[2018-07-13T14:02:06,749][DEBUG][o.e.a.ActionModule ]UsingRESTwrapperfrompluginorg.elasticsearch.xpack.security.Security
[2018-07-13T14:02:07,249][INFO][o.e.d.DiscoveryModule ][f2s1SD8]usingdiscoverytype[zen]
[2018-07-13T14:02:09,173][INFO][o.e.n.Node ][f2s1SD8]initialized
[2018-07-13T14:02:09,174][INFO][o.e.n.Node ][f2s1SD8]starting...
[2018-07-13T14:02:09,539][INFO][o.e.t.TransportService ][f2s1SD8]publish_address{10.105.234.23:9300},bound_addresses{0.0.0.0:9300}
[2018-07-13T14:02:09,575][INFO][o.e.b.BootstrapChecks ][f2s1SD8]boundorpublishingtoanon-loopbackaddress,enforcingbootstrapchecks
ERROR:[1]bootstrapchecksfailed
[1]:maxvirtualmemoryareasvm.max_map_count[65530]istoolow,increasetoatleast[262144]
[2018-07-13T14:02:09,621][INFO][o.e.n.Node ][f2s1SD8]stopping...
[2018-07-13T14:02:09,726][INFO][o.e.n.Node ][f2s1SD8]stopped
[2018-07-13T14:02:09,726][INFO][o.e.n.Node ][f2s1SD8]closing...
[2018-07-13T14:02:09,744][INFO][o.e.n.Node ][f2s1SD8]closed
到此这篇关于SpringBoot搭建ELK正确看日志的配置流程的文章就介绍到这了,更多相关SpringBoot搭建ELK内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。