zoukankan      html  css  js  c++  java
  • spring mvc+ELK从头开始搭建日志平台

     

    最近由于之前协助前公司做了点力所能及的事情,居然收到了一份贵重的端午礼物,是给我女儿的一个乐高积木,整个有7大包物件,我花了接近一天的时间一砖一瓦的组织起来,虽然很辛苦但是能够从过程中体验到乐趣。这次将分享从头搭建分布式日志系统,主要是在spring mvc上结合ELK套件实现(之前有些工作由于分工不同由不同的同事来完成,我只是在已经配置好的环境下做开发而已),包含如下这些技术点:

    •   spring mvc
    •   logback
    •   logstash
    •   elasticsearch
    •   kibana
    •   redis

      来看下整体的架构图,这类架构非常容易解决当下分布式系统下的日志记录,查询以及分析困难的问题。

          


      操作系统,IDE环境:

    •   eclipse
    •   windows


      1:搭建spring mvc项目
        eclipse自带创建的dynamic web project是个空结构,没有任何配置,我们要想跑起来一个hello world的项目,还需要做些配置,比如创建程序文件,比如view,controller等等。
        spring tool suite可以帮助我们解决这个问题,它提供了spring mvc的项目模板,里面自带一个hello world的可启动的应用页面,在eclipse中可以很方便的以插件形式安装spring tool suit,安装好之后就可以创建了。
        这里需要注意的是不同版本的spring tool suite在创建时的菜单会有不同,我目前的菜单位于:

        首先要选中spring标签:

        

        然后在File菜单下找:

       
        创建好之后,我们就可以直接在tomcat下运行了,不需要任何的其它操作,相对创建的dynamic web project要方便的多,不过通过这种模板创建的项目也有缺点:如果你喜欢新的一些依赖包,那么你需要手工去pom文件中去更新版本号为你想要的,还有可能会引入部分你暂时可能用不上的一些第三方包。下图是稍加修改的项目完成图,是一个标准的maven结构的spring mvc。

       


      2:redis安装
         由于我的是windows环境,所以相应的需要下载windows版本的redis:
         windows版:https://github.com/mythz/redis-windows
         下载下来解压,然后选择一个版本:

       

         配置文件我只修改了一个:bind,它是用来绑定一个固定IP的,为什么要显示的去绑定一个IP呢?后面会介绍我遇到的问题。
         启动服务端:在redis/bin目录下执行:redis-server.exe redis.windows.conf即可启动

         启动客户端:在redis/bin目录下执行:redis-cli.exe -h 127.0.0.1 -p 6379,在这个窗口可以通过一些redis命令再测试redis是否正常,比如get,set ,keys *等等。


      3:ELK安装

        在这个网站可以找到ELK最新版本:https://www.elastic.co/downloads,将elasticsearch,logstash,kibana这三个全部下载下来。

    •     配置elasticsearch

        大部分的配置都使用默认的,只是为了好标识我修改了cluster.name以及node.name,详细的参数可研究文档。然后直接在bin目录下运行elasticsearch.bat就可以启动了。

        打开http://127.0.0.1:9200/就可以,看到如下信息就说明启动正常了。

        
        还有很多插件可以安装,用来帮助我们查看监控elasticsearch,这里先安装head,命令行进入elasticsearch的目录,然后执行plugin install mobz/elasticsearch-head即可安装。

        安装成功后打开http://127.0.0.1:9200/_plugin/head/

        

    •     配置logstash

        先看下logstash的架构设计以及与其它ELK的配合,本篇的data source就是redis,不涉及到filter,最终日志输出到elasticsearch中。

       

         这里我们只配置input以及output,需要注意的是不同版本的logstash在配置上也会略有不同,大家有兴趣可以进一步做下对比。
       

    input {
    
        redis {
            data_type => "list"
            key => "logstash"
            host => "127.0.0.1"
            port => 6379
            threads => 5
            codec => "json"
        }
    }
    filter {
    
    }
    output {
    
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
            index => "logstash-%{type}-%{+YYYY.MM.dd}"
            document_type => "%{type}"
            workers => 1
            flush_size => 20
            idle_flush_time => 1
            template_overwrite => true
        }
        stdout{}
    }


        然后在logstash目录下执行logstash -f etc/logstash.d/即可启动

    •     配置kinbana
      • elasticesearch.url指向之前配置好的elasticsearch地址。
      • kinbna.index,这个是用来存储kibana自身的一些信息的。

       

    •     集成logback

           需要有一个记录日志的入口,将logback-classic引入进来,为了将日志传递给redis,需要配置一个logback-redis-appender,依赖如下:
          

    <!-- Logging -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${org.slf4j-version}</version>
            </dependency>
             <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
            </dependency>
    
    
            <!--logstash begin -->
            <dependency>
                <groupId>com.cwbase</groupId>
                <artifactId>logback-redis-appender</artifactId>
                <version>1.1.3</version>
                <exclusions>
                    <exclusion>
                        <groupId>redis.clients</groupId>
                        <artifactId>jedis</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

          配置logback.xml,key需要与logstash配置文件中配置的key相匹配。 

    <appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
            <source>logstashdemo</source>
            <type>dev</type>
            <host>127.0.0.1</host>
            <key>logstash</key>
            <tags>dev</tags>
            <mdc>true</mdc>
            <location>true</location>
            <callerStackIndex>0</callerStackIndex>
        </appender>

         在homecontroller中记录日志,slf4j由于完成了与logback完美集成,所以我们也不需要做任何转换类的配置即可实现日志记录。

        
         前文中曾经提到在配置redis时,设置了bind属性,让其指定到一个固定的IP。如果不指定,在logstash连接redis会有问题,其中的原因有待后续进一步确认。

      4:运行网站,查看日志

         当redis,elasticsearch,logstash服务运行正常后,启动spring mvc,通过logger记录的日志就可以在kibana中方便的查看了。

         测试logback是否已经将日志发送到redis,可以通过redis的命令来查看是否包含了配置的logstash这个key,还可以通过llen来判断日志是否在正常的递增。

        

         如果上面都正常,再找开kibana的页面,第一次打开会提示创建索引规则,创建好之后就可以看到日志已经被采集到elasticsearch中了。


        

       经过接近两天的研究,终于从0开始搭建成功了spring mvc+ELK的分布式日志管理平台,java平台的优势就是开源的产品多,可利用优秀插件也多,擅于去发倔还是可以很省事的做些比较优秀的项目的。虽然本篇只是一个练手入门文章,但有了开始就会有收获。

     

       本文参考:

    • http://os.51cto.com/art/201403/431103.htm
    • http://kibana.logstash.es
    • http://blog.csdn.net/kmtong/article/details/38920327
    • http://www.cnblogs.com/xing901022/p/4802822.html
    • http://blog.csdn.net/july_2/article/details/24481935
    • https://www.elastic.co/guide/en/kibana/current/getting-started.html
  • 相关阅读:
    Angular Universal 学习笔记
    SAP Spartacus 如何获得当前渲染页面的 CMS 元数据
    Angular 服务器端渲染的学习笔记(二)
    Angular 服务器端渲染的学习笔记(一)
    第三方外部 Saas提供商如何跟使用 SAP 系统的客户进行对接接口集成
    如何从 SAP Spartacus Product Detail 页面,找到其 Angular 实现 Component 的位置
    具备自动刷新功能的 SAP ABAP ALV 报表
    C++学习目录
    c--条件编译
    c--文件读写--二进制
  • 原文地址:https://www.cnblogs.com/ASPNET2008/p/5594479.html
Copyright © 2011-2022 走看看