SpringBoot非官方教程 | 第二十六篇: sprinboot整合elk,搭建实时日志平台

这篇文章主要介绍springboot整合elk.

elk 简介

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
  • Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

elk下载安装

elk下载地址:https://www.elastic.co/downloads/

建议在 linux上运行,elk在windows上支持得不好,另外需要jdk1.8 的支持,需要提前安装好jdk.

下载完之后: 安装,以logstash为栗子:

cd /usr/local/ mkdir logstash tar -zxvf logstash-5.3.2.tar.gz mv logstash-5.3.2 /usr/local/logstash

配置、启动 Elasticsearch

打开Elasticsearch的配置文件:

vim config/elasticsearch.yml

修改配置:

network.host=localhost
network.port=9200

它默认就是这个配置,没有特殊要求,在本地不需要修改。

启动Elasticsearch

./bin/elasticsearch

启动成功,访问localhost:9200,网页显示:

{
  "name" : "56IrTCM",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "e4ja7vS2TIKI1BsggEAa6Q",
  "version" : {
    "number" : "5.2.2",
    "build_hash" : "f9d9b74",
    "build_date" : "2017-02-24T17:26:45.835Z",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

配置、启动 logstash

在 logstash的主目录下:

vim config/log4j_to_es.conf 

修改 log4j_to_es.conf 如下:

input {
  log4j {
    mode => "server"
    host => "localhost"
    port => 4560
  }
}
filter {
  #Only matched data are send to output.
}
output {
    elasticsearch {
    action => "index"          #The operation on ES
    hosts  => "localhost:9200"   #ElasticSearch host, can be array.
    index  => "applog"         #The index to write data to.
  }
}

修改完配置后启动:

./bin/logstash -f config/log4j_to_es.conf 

终端显示如下:

访问localhost:9600

{"host":"Pc-20130412.local","version":"5.3.2","http_address":"127.0.0.1:9600","id":"e6bb985c-c688-49a4-
a55b-4d362bb4136f","name":"Pc-20130412.local","build_date":
"2017-04-24T16:32:22Z","build_sha":"242159a5eea55fe213fe5c8
52d36455e24252c82","build_snapshot":false}

证明logstash启动成功。

配置、启动kibana

到kibana的安装目录:

./bin/kibana 

默认配置即可。

访问localhost:5601,网页显示:

证明启动成功。

创建springboot工程

起步依赖如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


    </dependencies>

log4j的配置,/src/resources/log4j.properties如下:

log4j.rootLogger=INFO,console

# for package com.demo.elk, log would be sent to socket appender.
log4j.logger.com.forezp=DEBUG, socket

# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4560
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000

# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n

打印log测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootElkApplicationTests {

    @Test
    public void contextLoads() {
    }

    private Logger logger = Logger.getLogger(getClass());

    @Test
    public void test() throws Exception {

        for(int i=0;i<100;i++) {
            logger.info("输出info  ");
            logger.debug("输出debug+skkkw嗡嗡嗡kw");
            logger.error("输出error  嗡嗡嗡我");
        }
    }


}

在kibana 实时监控日志

打开localhost:5601:

Management=>index pattrns=>add new:

点击discovery:

参考资料

https://my.oschina.net/itblog/blog/547250

源码下载

https://github.com/forezp/SpringBootLearning

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青枫的专栏

log4j WARN 的解决办法

Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、U...

812
来自专栏Python

linux目录结构详细介绍

1843
来自专栏weixuqin 的专栏

win10 + Lubuntu 双系统安装

最近重装了系统,索性直接安装win10 + Lubuntu 双系统,便于在物理机下进行 Linux开发. 这里我选择的 Linux 发行版是 Lubuntu ....

1702
来自专栏林德熙的博客

C# 使用相同权限调用 cmd 传入命令

如果想要用相同的权限运行一个程序,可以使用 ProcessStartInfo 的方法

503
来自专栏我和PYTHON有个约会

莱茨狗-Go语言第二弹:环境搭建

两种环境包,根据需要下载 如果你是windows江湖新手,那么下载msi安装包吧,界面图形化鼠标傻瓜式操作,全程安装辅助基本没有问题!

521
来自专栏linux驱动个人学习

自动登录脚本

脚本的作用不明而喻,在无数次的启动开发板过程中,不断登录确确实实占用了我大量的时间及精力; 于是上网根据自己的实际编写了一个脚本: 1 #!/usr/bin/...

3406
来自专栏魏艾斯博客www.vpsss.net

不安装 ftp 如何用 windows 服务器上传下载文件

现在有很多新手仍然在使用 Windows 服务器,为了方便上传下载文件,我们都会在 windows 服务器上安装 ftp 服务器端,然后在本地电脑用 ftp 软...

2876
来自专栏pangguoming

Ubuntu 14.04 分区方案

我磁盘大概还有70多G的空间吧,我全部拿来使用的。真实的双系统哦。 一般来讲,linux系统分区最少要包括/和/swap两个。这样据说会影响性能,没有这样安装过...

3366
来自专栏逸鹏说道

关于全局ID,雪花(snowflake)算法的说明

上次简单的说一下:http://www.cnblogs.com/dunitian/p/6041745.html#uid C#版本的国外朋友已经封装了,大家可以去...

2968
来自专栏草根专栏

要用Identity Server 4 -- OAuth 2.0 超级简介

1553

扫码关注云+社区