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

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

http://www.cnblogs.com/ASPNET2008/p/5594479.html

 

时间: 2025-01-29 19:21:15

spring mvc+ELK从头开始搭建日志平台的相关文章

spring mvc + hibernate框架怎么搭建

问题描述 spring mvc + hibernate框架怎么搭建 最近做个java方面的项目,需要搭建spring mvc+hibernate框架,找了很多天,没弄好, 希望有大神不吝赐教,本人联系方式QQ 805447821 解决方案 参考:http://blog.csdn.net/shan9liang/article/details/9117233

Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目

原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring+Hibernate的架构搭建一个java web项目 Spring MVC+Spring+Hibernate结构介绍如下: Spring MVCSpring MVC的职责是作为web层框架,实现了我们常见的MVC模式 SpringSpring 作为服务层,利用自身特性IOC.AOP,提供数据从DA

使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数.执行时间.成功率等 异常数据自动触发消息通知 基于日志的数据挖掘 很多团队在日志方面可能遇到的一些问题有: 开发人员不能登录线上服务器查看详细日志,经过运维周转费时费力 日志数据分散在多个系统,难以查找 日志数据量大,查询速度慢 一个调用会涉及多个系统,难以在这些系统的日志中快速定位数据 数据不够实时 常见的一些重量级的开源

Spring Mvc 入门之环境搭建与页面数据传递

SpringMVC(1)入门之环境搭建与页面数据传递 http://blog.163.com/zhangmihuo_2007/blog/static/27011075201452811058561/

mvc-求 STS 中 Spring MVC 的 Demo

问题描述 求 STS 中 Spring MVC 的 Demo 10C 以STS作为工具,用 Spring MVC 框架开发,搭建工作我参考红尘不到写的文章<STS(Spring Tool Suite)建立默认的spring mvc项目 >链接见这里 但参考该文仅能解决最初步的搭建工作,如何在该项目基础上做一个小的DEMO ,还望大家指教. 解决方案 可能会不断出现许多与 JPA 有关的非常有用的工具.,那么 STS 与 JPA 的关系是什么 ?

基于Spring Mvc实现的Excel文件上传下载

最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring mvc的项目如何搭建,传送门在这里. 这次就基于这个工程,继续实现上传下载的小例子.需要做下面的事情: 1 增加index.html,添加form提交文件 2 引入commons-fileupload.commons-io.jxl等工具包 3 创建upload download接口 4 注入mul

linux下利用elk+redis 搭建日志分析平台教程

这个是最新的elk+redis搭建日志分析平台,今年时间是2015年9月11日. Elk分别为 elasticsearch,logstash, kibana 官网为:https://www.elastic.co/products Elasticsearch: https://www.elastic.co/downloads/elasticsearch https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7

《精通Spring MVC 4》——第1章 快速搭建Spring Web应用 1.1Spring Tool Suite简介

第1章 快速搭建Spring Web应用 在本章中,我们将会直接接触代码并搭建一个Web应用,本书的其他章节将会基于该应用进行讲解. 在这里,我们将会使用Spring Boot的自动配置功能来构建应用,这样的话,就能完全避免使用样板式的配置文件. 本书中将会使用Gradle和Java 8,但是也不必为此感到担心.如果你还在使用Maven和更早版本的Java的话,相信你会发现这些技术也是很易于使用的. 很多官方的Spring教程同时提供了Gradle构建和Maven构建,因此,如果你决定继续使用M

spring mvc-在Eclipse中使用Maven+Spring mvc +cxf搭建Web Service

问题描述 在Eclipse中使用Maven+Spring mvc +cxf搭建Web Service 请各路大神给出详细步骤,包括项目怎么建.各种配置文件怎么配.Java类里面怎么写(可以是一个简单的hello world)等等,最好有截图,非常感谢!