公司需要做日志集中管理和检索,所以采用了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
ch.qos.logback
logback-classic
1.0.13
net.logstash.logback
logstash-logback-encoder
5.2
b。配置logback.xml
%d{yyyyMMdd'T'HH:mm:ss.SSS} [%thread] %-5level %logger{36}- %msg%n
127.0.0.1:4567
c。写logback的代码,输出日志,发现怎么样都无法输出到logstash,但是控制台却能正常打印日志。绝望!!!终于,在网上找到替代方法,不要用net.logstash.logback.encoder.LogstashEncoder, 改成用logback原生的Encoder:
127.0.0.1:4567
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吧。