• spring mvc+ELK从头开始搭建日志平台


    从头搭建分布式日志系统,主要是在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中了。


         

  • 相关阅读:
    C# 字典 Dictionary 转 JSON 格式遍历
    jquery-easyui-tree异步树
    android 开发环境搭建
    解决android sdk 无法更新
    043——VUE中组件之使用.sync修饰符与computed计算属性实现购物车原理
    laravel中数据库迁移的使用:
    002PHP文件处理——文件处理 is_dir mkdir getcwd chdir rmdir
    001PHP文件处理——文件处理disk_total_space disk_free_space basename dirname file_exists filetype
    042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能
    041——VUE中组件之pros数据的多种验证机制实例详解
  • 原文地址:https://www.cnblogs.com/sessionbest/p/9074934.html
Copyright © 2020-2023  润新知