centos7下ELK結合Redis項目搭建日誌平臺

 
系統:centos7

jdk:1.8java

yum install java -ylinux

Logstash:日誌收集web

ElasticSearch:日誌存儲與搜索redis

Kibana:日誌展現spring

我畫了個草圖,一般的架構圖以下:AppServer 發送日誌給Logstash服務器收集,ElasticSearch服務器負責日誌的查詢和存儲,Kibana負責日誌的展現apache

centos7下ELK + Redis結合項目搭建日誌平臺

1. Logstash的安裝,官網連接:https://www.elastic.co/downloads/logstash#ga-release,也能夠直接執行:wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz,目前最新版本6.0.0json

(1)wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz下載安裝包centos

(2)tar -xzvf logstash-6.0.0.tar.gz解壓api

解壓後是沒有logstash的配置文件的,須要手動建立一個,上面截圖的logstash.conf就是我手動建立的,爲了測試,只是配置了簡單的標準輸入和標準輸出,內容以下:瀏覽器

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

(3) 嘗試啓動logstash並驗證是否配置成功,在logstash的解壓目錄下執行命令:./bin/logstash -f logstash.conf,出現以下截圖代表配置成功,從啓動信息中也能看出日誌路徑,端口等信息

centos7下ELK + Redis結合項目搭建日誌平臺

在交互裏隨便輸入測試hello world,看看輸出吧

2.ElasticSearch安裝,官網連接:https://www.elastic.co/downloads/elasticsearch,截止目前最新版本5.6.3

(1) wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz

(2) tar -xzvfelasticsearch-5.6.3.tar.gz解壓

(3) 進入到elasticsearch的安裝目錄的config下,修改配置: vi elasticsearch.yml

path.data修改成本身本機的data路徑,自定義(這個路徑若是不存在的話須要手動去建立)

path,logs修改成本身本機的logs路徑,也是自定義吧(這個路徑若是不存在的話,啓動elasticsearch會自動建立)

network.host修改成安裝服務器地址

http.port爲http訪問端口,默認是9200,我這裏給的9201

centos7下ELK + Redis結合項目搭建日誌平臺

分別給上面設置的data和logs設置用戶權限

chown -R elsearch:elsearch data/es/

chown -R elsearch:elsearch logs/es/

(4)運行elasticsearch:./bin/elasticsearch,若是直接用root身份去運行,會報以下錯誤:

centos7下ELK + Redis結合項目搭建日誌平臺

elasticsearch默認是不能用root去啓動的,這是出於系統安全考慮設置的條件,因此爲elasticsearch建立一個用戶組和用戶吧

建立elseaerch用戶組及用戶:

groupadd elsearch

useradd elsearch -g elsearch -p elasticsearch

更改elasticsearch文件夾及內部文件的所屬用戶及組爲elsearch:elsearch:

chown -R elsearch:elsearch elasticsearch-5.6.3

切換用戶elsearch:

su elsearch

啓動elasticsearch:./bin/elasticsearch

啓動過程當中有可能報以下錯誤

centos7下ELK + Redis結合項目搭建日誌平臺

切換到root用戶編輯limit.conf文件

vi /etc/security/limits.conf

在文件末尾添加

elsearch soft nofile 65536

elsearch hard nofile 65536

注意:elsearch爲所建立的用戶名稱,建立的是什麼就寫什麼

centos7下ELK + Redis結合項目搭建日誌平臺

而後再切換到elsearch用戶啓動,看到以下信息說明啓動成功

centos7下ELK + Redis結合項目搭建日誌平臺

在瀏覽器中方位地址http://192.168.212.37:9201,192.168.212.37和9201都是上面elasticsearch.yml中配置的host和port,會出先以下界面說明啓動成功

centos7下ELK + Redis結合項目搭建日誌平臺

3.完成logstash和elasticsearch的安裝後,就該開始集成他們倆了,回到logstash的配置文件logstash.conf,修改配置以下:輸入仍是標準輸入,輸出增添一個elasticsearch,hosts配置elasticsearch的地址和端口:

input {
 stdin { }
}
output {
 elasticsearch {
 hosts => "192.168.212.37:9201"
 index => "logstash-test"
 }
 stdout {
 codec => rubydebug {}
 }
}
再次啓動logstash,並輸入測試字符串:hello world
在啓動logstash過程當中檢查並鏈接output端elasticsearch,輸入測試字符串後,訪問elasticsearch的api:http://192.168.212.37:9201/logstash-test/_search(logstash-test是logstash.conf中配置的索引index),能夠看到以下:剛纔輸入的hello已經在elasticsearch中能夠查看到了

至此,logstash和elasticsearch集成完成,不過經過elasticsearch原生api去查詢仍是不方便和直觀,ok,下面查詢工具kibana閃亮登場了。

4.下載kibana

(1)wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.3-linux-x86_64.tar.gz

(2)tar -xzvf kibana-5.6.3-linux-x86_64.tar.gz 解壓

(3)進入kibana的解壓目錄的config目錄下,編輯kibana.yml,server.port:5601放開,server.host修改成kibana的安裝服務器,配置elasticsearch的路徑端口

centos7下ELK + Redis結合項目搭建日誌平臺

(4)啓動kibana: ./bin/kibana

centos7下ELK + Redis結合項目搭建日誌平臺

瀏覽器中訪問:http://192.168.212.37:5601,出現以下界面表示啓動成功

centos7下ELK + Redis結合項目搭建日誌平臺

再在logstash的交互中輸入:Hello kaka,you are the best

centos7下ELK + Redis結合項目搭建日誌平臺

而後再kibana的discover中指定的index裏查詢kaka關鍵字,以下:日誌是否是很優雅的展現出來了

centos7下ELK + Redis結合項目搭建日誌平臺

OK,ELK的集成到此結束。

5.安裝redis

(1)安裝redis(省略,安裝很簡單)

(2)進入redis的解壓目錄,編輯reids.conf配置文件,修改以下三個地方:

bind IP:綁定安裝服務器的ip地址

protected-mode:修改成no,不然redis只有本機才能訪問

port:修改成本身的端口,默認是6379

centos7下ELK + Redis結合項目搭建日誌平臺

(3)啓動redis

執行./src/redis-server redis.conf ,若是提示須要增長文件句柄數,可使用名利ulimit -n 10032臨時增大,10032是redis建議的大小。

centos7下ELK + Redis結合項目搭建日誌平臺

6.logstash集成redis,先看架構圖

下面的架構圖中,redis至關於變成了logstash的輸入端,而不是appserver,爲何要這樣作的,是爲了防止一瞬間忽然有大量日誌到logstash端防止雪崩,至關於給APPserver和logstash間加了一個管道。

centos7下ELK + Redis結合項目搭建日誌平臺

(1)編輯logstash的logstash.conf文件,輸入端修改成redis

input {
        redis {
                data_type => "list"
                type => "redis-input"
                key => "logstash:redis"
                host => "192.168.212.37"
                port => 6379
                threads => 5
                codec => "json"
        }
}
output {
        elasticsearch {
                hosts => "192.168.212.37:9201"
                index => "logstash-test"
        }
        stdout {
                codec => rubydebug {}
        }
}

(2)從新啓動logstash,能夠看到已經鏈接上了輸入端redis

centos7下ELK + Redis結合項目搭建日誌平臺

logstash和redis的集成已經完成。

7.redis和java項目中log4j的集成

經過上面的配置,基本上已經實現了上面架構圖的大部分功能,最後須要的就是項目中的日誌如何輸入到redis中呢,且看下面配置。

爲了簡單起見,我直接在spring官網建立一個springboot的web項目,地址http://start.spring.io/,快速構建一個可運行的spring mvc框架出來(spring boot已經集成了log4j等一系列,無需再去配置),只是爲了測試日誌,項目結構很簡單,以下:

centos7下ELK + Redis結合項目搭建日誌平臺

主要代碼講解:

先看pom的配置

由於要和redis結合,添加以下dependency

貼上pom配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.a</groupId>
    <artifactId>elk_logback</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cwbase</groupId>
            <artifactId>logback-redis-appender</artifactId>
            <version>1.1.5</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

springboot默認已經集成了logback,,若是須要覆蓋,在resources下建立本身的logback.xml配置文件,以下:

其中host爲redis安裝服務器,key爲logstash.conf中配置的key

centos7下ELK + Redis結合項目搭建日誌平臺

logback,xml配置:

貼上logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <encoder>
            <pattern>[%d{HH:mm:ss}][%t][%p][%c]-%m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
    </appender>
   <appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
        <source>logstashdemo</source>
        <type>dev</type>
        <host>192.168.212.37</host>
        <key>logstash</key>
        <tags>dev</tags>
        <mdc>true</mdc>
        <location>true</location>
        <callerStackIndex>0</callerStackIndex>
    </appender>

    <root level="error">
        <appender-ref ref="Console"/>
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>
HelloController很簡單,打印測試日誌:
package com.kaka.controller;

import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAutoConfiguration
public class HelloController {
    private static org.slf4j.Logger logger = LoggerFactory.getLogger(HelloController.class);
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    @ResponseBody
    public String sayHello(){
        logger.info("The request is to sayHello");
        logger.error("This is test error log");
        return "hello,kaka";
    }
    public static void main(String[] args){
        SpringApplication.run(HelloController.class,args);
    }
}

啓動項目(上面的logstash.conf我配置了兩個輸出,一個是elasticsearch,一個是交互標準輸出),能夠在logstash的交互中看到springboot的啓動日誌,訪問HelloController,能夠看到輸出的error級別日誌

啓動項目(上面的logstash.conf我配置了兩個輸出,一個是elasticsearch,一個是交互標準輸出),能夠在logstash的交互中看到springboot的啓動日誌,訪問HelloController,能夠看到輸出的error級別日誌,以下圖:

centos7下ELK + Redis結合項目搭建日誌平臺

而後再kibana的discover中指定的index裏查詢kaka關鍵字,以下:日誌是否是很優雅的展現出來了

centos7下ELK + Redis結合項目搭建日誌平臺

OK,ELK的集成到此結束。

相關文章
相關標籤/搜索