centos7下ELK結合Redis項目搭建日志平台


 
系統:centos7

jdk:1.8

yum install java -y

Logstash:日志收集

ElasticSearch:日志存儲與搜索

Kibana:日志展示

我畫了個草圖,通常的架構圖如下:AppServer 發送日志給Logstash服務器收集,ElasticSearch服務器負責日志的查詢和存儲,Kibana負責日志的展示

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.0

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

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

解壓后是沒有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的集成到此結束。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM