spring mvc+ELK從頭開始搭建日誌平臺

從頭搭建分佈式日誌系統,主要是在spring mvc上結合ELK套件實現(以前有些工做因爲分工不一樣由不一樣的同事來完成,我只是在已經配置好的環境下作開發而已),包含以下這些技術點:node

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

  來看下總體的架構圖,這類架構很是容易解決當下分佈式系統下的日誌記錄,查詢以及分析困難的問題。git

       


  操做系統,IDE環境:github

  •   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在建立時的菜單會有不一樣,我目前的菜單位於:web

    首先要選中spring標籤:redis

     

    而後在File菜單下找:spring

    
    建立好以後,咱們就能夠直接在tomcat下運行了,不須要任何的其它操做,相對建立的dynamic web project要方便的多,不過經過這種模板建立的項目也有缺點:若是你喜歡新的一些依賴包,那麼你須要手工去pom文件中去更新版本號爲你想要的,還有可能會引入部分你暫時可能用不上的一些第三方包。下圖是稍加修改的項目完成圖,是一個標準的maven結構的spring mvc。
json

    


  2:redis安裝
     因爲個人是windows環境,因此相應的須要下載windows版本的redis:
     windows版:https://github.com/mythz/redis-windows
     下載下來解壓,而後選擇一個版本:windows

    

     配置文件我只修改了一個:bind,它是用來綁定一個固定IP的,爲何要顯示的去綁定一個IP呢?後面會介紹我遇到的問題。
     啓動服務端:在redis/bin目錄下執行:redis-server.exe redis.windows.conf便可啓動
api

     啓動客戶端:在redis/bin目錄下執行:redis-cli.exe -h 127.0.0.1 -p 6379,在這個窗口能夠經過一些redis命令再測試redis是否正常,好比get,set ,keys *等等。tomcat


  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中了。


     

相關文章
相關標籤/搜索