1. 程式人生 > >dubbo2.5-spring4-mybastis3.2-springmvc4-logback-ELK整合(十三) logback+ELK日誌收集伺服器搭建

dubbo2.5-spring4-mybastis3.2-springmvc4-logback-ELK整合(十三) logback+ELK日誌收集伺服器搭建

好久沒有更新部落格文章了,今天給大家帶來的是logback+ELK+SpringMVC 日誌收集伺服器搭建。接下來我會介紹ELK是什麼?logback是什麼?以及搭建的流程。

1.ELK是什麼?

ELK是由Elasticsearch、Logstash、Kibana這3個軟體的縮寫。

  • Elasticsearch是一個分散式搜尋分析引擎,穩定、可水平擴充套件、易於管理是它的主要設計初衷
  • Logstash是一個靈活的資料收集、加工和傳輸的管道軟體
  • Kibana是一個數據視覺化平臺,可以通過將資料轉化為酷炫而強大的影象而實現與資料的互動將三者的收集加工,儲存分析和可視轉化整合在一起就形成了 ELK 。

2.ELK流程

ELK的流程應該是這樣的:Logback->Logstash->(Elasticsearch<->Kibana)

  1. 應用程式產生出日誌,由logback日誌框架進行處理。
  2. 將日誌資料輸出到Logstash中
  3. Logstash再將資料輸出到Elasticsearch中
  4. Elasticsearch再與Kibana相結合展示給使用者

3.ELK官網

4. 環境配置

4.1 基礎環境

  • jdk 1.8
  • Centos 7.0 X86-64
    注意:ELK服務不能在root使用者開啟。需要重新建立使用者。
    下載ELK相關服務壓縮包
    建立ELK使用者和目錄並賦予許可權,方便統一管理。
[root@localhost /]# mkdir elsearch
[root@localhost /]# groupadd  elsearch
[root@localhost /]# useradd -g elsearch elsearch
[root@localhost /]# chown -R elsearch:elsearch /elsearch
[root@localhost /]# su elsearch
[elk@localhost /]$ cd elsearch

4.2 下載,然你也可以去官網找最新版的

我這裡是以5.2.2為例來實現。

這裡寫圖片描述

4.3 配置Elasticsearch

Elasticsearch是可以搭建叢集,我這邊只是解壓後直接修改配置檔案

elasticsearch.yml

cluster.name: es_cluster_1
node.name: node-1
path.data: /usr/local/services/elasticsearch-5.2.2/data              
path.logs:/usr/local/services/elasticsearch-5.2.2/logs
network.host: 192.168.10.200 
http.port: 9200

這裡寫圖片描述

看到如上的介面就代表啟動成功。

4.4 配置logstash

解壓

tar -zxvf /usr/local/services/logstash-5.2.2.tar.gz

測試配置,只是測試服務是否啟動。還有這個檔案是沒有的,啟動時加上這個路徑就是以這個配置啟動
vi /usr/local/services/logstash-5.2.2/config/logstash.conf

input {
 stdin { }
}
output {
 stdout {
 codec => rubydebug {}
 }
}

logstash以配置檔案方式啟動有兩種:

  1. 列表內容 logstash -f logstash-test.conf //普通方式啟動
  2. logstash agent -f logstash-test.conf –debug//開啟debug模式
./bin/logstash -f config/logstash.conf --debug

啟動成功會看到如下的結果:
這裡寫圖片描述

這是時候,我們在控制檯隨便輸入都可以被收集

n"=>"1", "host"=>"localhost", "message"=>"我們都是好好"}}
{
    "@timestamp" => 2017-08-18T05:45:25.340Z,
      "@version" => "1",
          "host" => "localhost",
       "message" => "我們都是好好"
}
[2017-08-18T13:45:26,933][DEBUG][logstash.pipeline        ] Pushing flush onto pipeline
[2017-08-18T13:45:31,934][DEBUG][logstash.pipeline        ] Pushing flush onto pipeline

4.5 配置logstash

配置kibana
+ 解壓

[[email protected] root]$ tar -zxvf /usr/local/services/kibana-5.2.2-linux-x86_64.tar.gz

開啟配置
[[email protected] root]$ vim /usr/local/services/kibana-5.2.2-linux-x86_64/config/kibana.yml

修改配置,最後最加

server.port: 8888
server.host: "192.168.10.200"
elasticsearch.url: "http://192.168.10.200:9200"

啟動

[elsearch@localhost root]$ /usr/local/services/kibana-5.2.2-linux-x86_64/bin/kibana &

這裡寫圖片描述

基本ELK的環境的搭建就ok了,我們接下來學習logback-ELK整合來收集JavaEE中的日誌。

4.6 logback-ELK整合

4.6.1 本案列採用maven管理

pom.xml

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.11</version>
</dependency>
        <!--實現slf4j介面並整合-->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
    <dependency>
<groupId>net.logstash.log4j</groupId>
<artifactId>jsonevent-layout</artifactId>
<version>1.7</version>
</dependency>

4.6.2配置logaback的配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="E:/logs" />
    <!-- 控制檯輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日誌檔案 -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌檔案輸出的檔名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log_%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日誌檔案保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日誌檔案最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- show parameters for hibernate sql 專為 Hibernate 定製 -->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.10.200:8082</destination>
        <!-- encoder is required -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>
    <!-- 日誌輸出級別 -->
    <root level="INFO">
         <!-- 只有新增stash關聯才會被收集-->
        <appender-ref ref="stash" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

注意:logstash接收日誌的地址 192.168.10.200:8082

4.6.3配置logstash-test.conf

vi logstash-test.conf

input {
 tcp {
        host => "192.168.10.200"
        port => 8082
        mode => "server"
        ssl_enable => false
        codec => json {
            charset => "UTF-8"
        }
    }
}
output {
    elasticsearch {
    hosts => "192.168.10.200:9200"
    index => "logstash-test"
    }
  stdout { codec => rubydebug {} }
}

啟動收集

./bin/logstash -f config/logstash-test.conf –debug

4.6.4配置Controller新增日誌輸出

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestEndpoints {
    private final static Logger logger = LoggerFactory.getLogger(TestEndpoints.class);

    @GetMapping("/product/{id}")
    public String getProduct(@PathVariable String id) {
        String data = "{\"name\":\"李東\"}";
        logger.info(data);
        return "product id : " + id;
    }

    @GetMapping("/order/{id}")
    public String getOrder(@PathVariable String id) {

        return "order id : " + id;

    }
}

請求呼叫之後控制檯的log

這裡寫圖片描述

之後Kibana中就可以收集到log

{
  "_index": "logstash-test",
  "_type": "logs",
  "_id": "AV3zu4jiJKLF9tWSjmZj",
  "_score": null,
  "_source": {
    "@timestamp": "2017-08-18T05:04:51.698Z",
    "level": "INFO",
    "port": 56525,
    "thread_name": "http-nio-8081-exec-10",
    "level_value": 20000,
    "@version": 1,
    "host": "192.168.10.165",
    "logger_name": "com.example.demo.TestEndpoints",
    "message": "{\"name\":\"李東\"}"
  },
  "fields": {
    "@timestamp": [
      1503032691698
    ]
  },
  "sort": [
    1503032691698
  ]
}

這裡寫圖片描述

基本上就這些步驟,希望看完之後,動手實踐一下,謝謝閱讀。

相關推薦

dubbo2.5-spring4-mybastis3.2-springmvc4-logback-ELK整合十三 logback+ELK日誌收集伺服器搭建

好久沒有更新部落格文章了,今天給大家帶來的是logback+ELK+SpringMVC 日誌收集伺服器搭建。接下來我會介紹ELK是什麼?logback是什麼?以及搭建的流程。 1.ELK是什麼? ELK是由Elasticsearch、Logstash、K

dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3(十)之Spring MVC中使用 Swagger2 構建Restful API

1、Swagger2是什麼? Swagger 是一款RESTFUL介面的文件線上自動生成+功能測試功能軟體。 Swagger 是一個規範和完整的框架,用於生成、描述、呼叫和視覺化 RESTful 風格的 Web 服務。總體目標是使客戶端和檔案系統作為伺服器以

dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合Spring中Redis的快取的使用

前面已經寫了四篇關於dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb3.4-redis3.2整合的文章: 快取(Caching)可以儲存經常會用到的資訊,這樣每次需要的時候,這些資訊都可以立即可用的。儘管Spr

【Elasticsearch 5.6.12 原始碼】——【2】啟動過程分析

版權宣告:本文為博主原創,轉載請註明出處! 簡介 本文主要解決以下問題: 1、啟動ES的入口類及入口方法是哪個?2、分析梳理ES服務啟動的主要流程? 入口類 ES的入口類為org.elasticsearch.bootstrap.Elasticsearch,啟動方法為: public

整型陣列處理演算法十三求出用1,25這三個數不同個數組合的和為100的組合個數華為校園招聘題

寫一個程式, 要求功能:求出用1,2,5這三個數不同個數組合的和為100的組合個數。 如:100個1是一個組合,5個1加19個5是一個組合。。。。 請用C++語言寫。        下面用2中方法來

給一個不多於5位的正整數,要求: 1求出它是幾位數 2分別輸出每一位數字 3按逆序輸出各位數字,例如原數為321,應輸出123

4.9給一個不多於5位的正整數,要求: (1)求出它是幾位數 (2)分別輸出每一位數字 (3)按逆序輸出各位數字,例如原數為321,應輸出123 程式碼: #include “stdio.h” #include “math.h” int count(int n)

[Codeforces Round #261 (Div. 2) E]Pashmak and GraphDp

solution and other main ems scanf homework max urn Description Pashmak‘s homework is a problem about graphs. Although he always tries

5章 IP地址和子網劃分4_超網合並網段

8.0 str ges 分析 需求 由於 子類 log spa 7. 超網合並網段 7.1 合並網段 (1)子網劃分是將一個網絡的主機位當網絡位,來劃分出多個子網。而多個網段合並成一個大網段,合並後的網段稱為超網。 (2)需求分析   某企業有一個網段,該網段有200臺計算

Spark入門實戰系列--2.Spark編譯與部署--Hadoop編譯安裝

二進制包 1.10 不能 mapr 修復 att 機器 mave end 【註】該系列文章以及使用到安裝包/測試數據 能夠在《[傾情大奉送–Spark入門實戰系列] (http://blog.csdn.net/yirenboy/article/deta

使用MyEclipse開發Java EE應用:用XDoclet創建EJB 2 Session Bean項目

str 文件存儲 字段 des 管理 新版 enter ecif class MyEclipse限時秒殺!活動火熱開啟中>> 【MyEclipse最新版下載】 三、配置XDoclet支持的項目 默認情況下,MyEclipse EJB項目未配置使用XDocle

Python3.5十三叠代器&生成器

什麽 結束 環比 第一個元素 amp 訪問 事先 這也 一個 叠代器是訪問集合元素的一種方式。叠代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。叠代器只能往前不會後退,不過這也沒什麽,因為人們很少在叠代途中往後退。另外,叠代器的一大優點是不要求事先準備好整個

MySQL 8.0.2復制新特性翻譯

ogl 防止 將不 地址 arc -- 等待 download 日誌 譯者:知數堂星耀隊 MySQL 8.0.2復制新特性 MySQL 8 正在變得原來越好,而且這也在我們MySQL復制研發團隊引起了一陣熱潮。我們一直致力於全面提升MySQL復制,通過引入新的和一些有趣

spring boot 1.5.4 定時任務和異步調用

springboot springboot1.5.4 springboot之web開發 springboot定時任務 springboot異步回調 上一篇:spring boot1.5.4 統一異常處理(九) 1 Spring Boot定時任務和異步調用我們在編寫Spring B

JXLS 2.4.0系列教程——循環導出一個鏈表的數據

教程 super 最簡 com arraylist port 至少 ron mod 請務必先看上一篇文章,本文在上一篇文章的代碼基礎上修改而成。 JXLS 2.4.0系列教程(一)——最簡單的模板導出 上一篇文章我們介紹了JXLS和模板導出最簡單的應用,現在我們要更進一

JXLS 2.4.0系列教程——多sheet是怎麽做到的

while director write 教程 == 模板 phy sheet ack 註:本文代碼在第一篇文章基礎上修改而成,請務必先閱讀第一篇文章。 http://www.cnblogs.com/foxlee1024/p/7616987.html 本文也不會過多的講解模

JXLS 2.4.0系列教程——拾遺 如何做頁面小計

進行 line http spa shee shel nes 默認 閱讀   註:閱讀本文前,請先閱讀第四篇文章。   http://www.cnblogs.com/foxlee1024/p/7619845.html   前面寫了第四篇教程,發現有些東西忘了講了,這裏補

JXLS 2.4.0系列教程——更進一步的應用和bug修復

erl dir 問題 create sna 過程 idl es2017 cal 註:本文代碼建立於前面寫的代碼。不過不看也不要緊。   前面的文章把JXLS 2.4.0 的基本使用寫了一遍,現在講講一些更進一步的使用方法。我只寫一些我用到過的方法,更多的高級使用方法請參

編程題#2:奇偶排序

ios -- cout 如果 cin art 數組 n) bool 描述 輸入十個整數,將十個整數按升序排列輸出,並且奇數在前,偶數在後。 輸入 輸入十個整數 輸出 按照奇偶排序好的十個整數 #include <iostream> using name

python 基礎 2.1 if 流程控制

字符串 ace 冒號 rip inpu root 類型 真的 use 一.if else 1.if 語句 if expression: //註意if後有冒號,必須有 statement(s) //相對於if縮進4個空格 註:python

pause、jobs、setitimer(2)、system v ipcday12

ssa 周期 types.h ros system signed job 功能 chl 一、pause(2)的使用 #include <unistd.h> int pause(void); 功能:等待信號的到來 返回值: -1 錯誤 errno被設置 只