我是靠谱客的博主 听话镜子,最近开发中收集的这篇文章主要介绍Logback + Logstash + Elasticsearch + Kibana 日志检索平台填坑记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

公司需要做日志集中管理和检索,所以采用了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 日志检索平台填坑记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部