概述
公司需要做日志集中管理和检索,所以采用了Logback + ELK方案。由于是第一次接触ELK,遇到不少坑,整整花了一天才彻底搞通。本文elk的版本是6.3.2。
根据其它网上文章,一一安装和配置各组件。
1. 下载并启动elasticsearch,es不用修改配置,直接运行即可:./bin/elasticsearch。
运行成功后,在浏览器打开网址:http://127.0.0.1:9200,如果看到如下信息,说明启动成功
{
"name" : "uAPjUu9",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "tSq1s58NQdCBfJ2Aoo_LtA",
"version" : {
"number" : "6.3.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "053779d",
"build_date" : "2018-07-20T05:20:23.451332Z",
"build_snapshot" : false,
"lucene_version" : "7.3.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
2. 下载logstash,logstash是要新建配置文件:touch config/my-logstash.conf, 由于要接入logback,因此可做如下配置:
input {
tcp {
port => 4567
codec => "json_lines"
}
}
output {
stdout {
codec => "rubydebug"
}
elasticsearch {
hosts => "127.0.0.1"
index => "logback-%{+YYYY.MM.dd}"
}
}
配置完后启动logstash:./bin/logstash -f ./config/my-logstash.conf
3. 下载kibana,修改配置文件:vi config/kibana.yml, 在文件最后,添加
elasticsearch.url: "http://localhost:9200"
server.host: 0.0.0.0
修改完成后运行kinana:./bin/kibana
4. 在浏览器打开kibana系统:http://localhost:5601
好了,上面所有的安装配置都超级简单,到这里,大家一定暗喜如此简单就搞定了elk。对于像我这样对es从来没接触过的人,一定会遇到大坑。
kibana 此时会提示需要首先创建 index patern。好吧,我门老老实实去添加。如果大家细心的话,旁边会有一句提示:You'll need to index some data into Elasticsearch before you can create an index pattern。所以,会有这几种情况:
a。没有看提示,直接就去创建index patern。会发现无论输什么,next step按钮始终是灰色的。上网一搜,才发现index pattern中的index必须是在es中存在的index。所以接下来就会想办法在es中创建index,最后找到2种方法,在终端采用cur命令调用es提供的rest接口去操作,或者简单地在kibana的dev tools中输入命令去操作。index创建成功后,回到index pattern创建的页面,发现,仍然不行!!!奔溃!!!而且而且,由于es中已经创建了index,你将永远无法再看到You'll need to index some data into Elasticsearch before you can create an index pattern 这句提示。问题是,这句提示太太太太太太重要了,它的意思是,必须先存入一部分带有索引的数据到es中,才能创建index pattern。
b。假如看到了那句提示,也会蒙圈,老子什么都不懂,你就让我输入带有索引的数据,我怎么知道数据格式是什么。然后在网上找到一篇官方教程:Loading Simple Data,点击进去也很蒙圈,为什么要导入这样的数据,这样的数据我们根本不需要。没办法,既然什么都不懂,那么照猫画虎先搞吧。果然,数据弄进去后发现,真的可以创建index parrern了。这时才搞清楚,导入数据时,es会自动创建好多index。那么为什么手动创建index就不行呢呢呢呢呢呢呢????
总算有点感觉了,这时,我们开始配置logback:
a。配置maven
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
<!-- Logstash encoder -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
b。配置logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"
debug="false" scan="true" scanPeriod="30 second">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyyMMdd'T'HH:mm:ss.SSS} [%thread] %-5level %logger{36}- %msg%n</pattern>
</encoder>
</appender>
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:4567</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
</encoder>
</appender>
<root level="trace">
<appender-ref ref="STDOUT"/>
<appender-ref ref="stash"/>
</root>
</configuration>
c。写logback的代码,输出日志,发现怎么样都无法输出到logstash,但是控制台却能正常打印日志。绝望!!!终于,在网上找到替代方法,不要用net.logstash.logback.encoder.LogstashEncoder, 改成用logback原生的Encoder:
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:4567</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp/>
<version/>
<message/>
<loggerName/>
<threadName/>
<logLevel/>
<callerData/>
</providers>
</encoder>
</appender>
d。这时,在logstash控制台发现会有这样的打印:
{
"message" => "test trace1",
"port" => 56480,
"@timestamp" => 2018-08-09T13:04:08.213Z,
"logger_name" => "com.yingzi.lib.logging.TestLogging",
"@version" => "1",
"thread_name" => "main",
"host" => "localhost",
"level" => "TRACE"
}
e。在es控制台有这样的打印:
[2018-08-09T19:49:17,892][INFO ][o.e.c.m.MetaDataIndexTemplateService] [uAPjUu9] adding template [kibana_index_template:.kibana] for index patterns [.kibana]
f。回到kibana,可以创建index pattern:logback-*,这时因为logstash中index我们配置index成这样:logback-%{+YYYY.MM.dd}
g。配置index pattern后,我们可以在 Discover中查询我们刚才在logback那里输出的日志了。
总结:其实不需要Loading Sample Data,elk配置好之后,直接配置logback工程,直接输出日志即可。elk必须要先有数据,才能建index pattern,才能根据index pattern搜索日志。但是,只要有数据即可,什么数据无所谓,所以 loading sample data是完全没有必要的。
好了,坑暂时填到现在,继续研究elk吧。
最后
以上就是听话镜子为你收集整理的Logback + Logstash + Elasticsearch + Kibana 日志检索平台填坑记的全部内容,希望文章能够帮你解决Logback + Logstash + Elasticsearch + Kibana 日志检索平台填坑记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复