亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot整合ELK做日志超完整詳細教程

 更新時間:2024年01月29日 12:00:18   作者:XiaoHH?Superme  
本文詳細介紹了如何在springboot中快速接入ELK的過程,ELK可以說在實際項目中具有很好的適用價值,不管是小項目,還是中大型項目,都具備普適參考性,值得深入了解和學習,感興趣的朋友一起看看吧

SpringBoot整合ELK做日志

環(huán)境準備

提前準備一臺CentOS7,我的配置為 2c4g50g,為了方便,我會直接關閉服務器的防火墻,執(zhí)行以下代碼:

systemctl stop firewalld
systemctl disable firewalld

安裝包準備

ELK安裝包

本篇文章講解用 elasticsearch-7.17.7,kibana-7.17.7,logstash-7.17.7 和 SpringBoot 搭建日志系統(tǒng),可提前下載好安裝包,可使用以下命令下載,沒有wget可通過yum安裝:

wget \
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.7-linux-x86_64.tar.gz \
https://artifacts.elastic.co/downloads/kibana/kibana-7.17.7-linux-x86_64.tar.gz \
https://artifacts.elastic.co/downloads/logstash/logstash-7.17.7-linux-x86_64.tar.gz

下載完成后如圖:

如果需要安裝 ik 分詞器,可以使用以下命令下載:

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip

Java11安裝包

因為要登陸Oracle賬戶進行下載,所以我這里沒辦法直接提供下載鏈接,需要去到下載界面:

https://www.oracle.com/java/technologies/downloads/#java11

點擊這個進行下載:

點擊下載JDK11

點擊同意協(xié)議:

登陸賬戶即可下載:

軟件安裝

安裝java11

我準備將java11安裝在 /opt/environment 目錄下,所以我們執(zhí)行以下命令創(chuàng)建目錄:

mkdir -p /opt/environment

然后將 jdk-11.0.19_linux-x64_bin.tar.gz 解壓到 /opt/environment 目錄下,執(zhí)行以下命令:

tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz -C /opt/environment/

然后我們 /opt/environment/jdk-11.0.19/ 目錄查看(版本不同目錄可能不同):

隨后我們需要配置環(huán)境變量,將下面代碼加到 /etc/profile 文件的末尾:

# Set java environment
JAVA_HOME=/opt/environment/jdk-11.0.19
ES_JAVA_HOME=$JAVA_HOME
LS_JAVA_HOME=$JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME ES_JAVA_HOME LS_JAVA_HOME PATH

其中 ES_JAVA_HOME 變量是ElasticSearch要求的, LS_JAVA_HOME 是Logstash要求的,但是要注意 JAVA_HOME=/opt/environment/jdk-11.0.19 的目錄是jdk的更目錄,如果不同注意修改。添加成功后查看 /etc/profile 文件末尾幾行:

使用以下命令使配置生效并檢查java是否安裝成功:

source /etc/profile
java -version

看到下面結果代表安裝成功:

安裝ElasticSearch

我準備將ElasticSearch安裝在 /opt/server 文件夾下,所以我們創(chuàng)建這個文件夾:

mkdir -p /opt/server

然后我們解壓 elasticsearch-7.17.7-linux-x86_64.tar.gz 文件到這個文件夾:

tar -zxvf elasticsearch-7.17.7-linux-x86_64.tar.gz -C /opt/server/

我們來到 /opt/server 目錄可以查看到解壓的結果:

因為es要求不能以root用戶運行該應用,所以我們?yōu)閑s創(chuàng)建一個用戶 elk,并將 elasticsearch-7.17.7 目錄和下面所有文件的所有權轉到用戶elk上:

# 創(chuàng)建用戶
useradd elk
# 將所有權賦予給elk用戶
chown elk:elk -R elasticsearch-7.17.7

隨后我們需要改一些系統(tǒng)的配置文件,更詳細的說明相見我的es安裝教程,這里我們就直接執(zhí)行以下代碼配置:

echo "elk hard nofile 65536" >> /etc/security/limits.conf
echo "elk soft nofile 65536" >> /etc/security/limits.conf
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
sysctl -p

因為我們內存不多,所以還需要改一下 es 當中的 config/jvm.options 配置文件,在文件中加上以下三行代碼(參數(shù)可以根據(jù)自己的內存大小自行修改):

-Xms256m
-Xmx256m
-Xmn128m

加上后如圖:

然后我們需要修改 config/elasticsearch.yml 配置文件,需要修改的內容

# 集群的名字,根據(jù)自己愛好取一個好聽的名字(需要取消注釋)
cluster.name: test-log
# 這個節(jié)點的名稱,可以自行修改(需要取消注釋)
node.name: node-1
# 本節(jié)點的IP地址,注意修改為自己的IP地址(需要取消注釋)
network.host: 192.168.3.233
# ES的端口(需要取消注釋)
http.port: 9200
# 填寫IP地址即可(需要取消注釋)
discovery.seed_hosts: ["192.168.3.233"]
# 都有哪些node,填寫node的名字(需要取消注釋)
cluster.initial_master_nodes: ["node-1"]

然后我們就可以切換到 elk 用戶啟動elasticsearch:

# 切換到elk用戶
su elk
cd elasticsearch-7.17.7/
# 啟動elasticsearch
bin/elasticsearch

看到這個代表啟動成功:

可以嘗試訪問服務器,可以看到訪問成功:

安裝成功后我直接 Ctrl + C 退出運行,然后執(zhí)行以下命令將其后臺運行:

nohup bin/elasticsearch >> /dev/null &

安裝Kibana

我準備將Kibana安裝在 /opt/server 文件夾下,我們已經(jīng)創(chuàng)建了這個文件夾,所以直接解壓文件(注意切換到root用戶):

# 注意執(zhí)行前使用 Ctrl + D 退出 elk 用戶并使用root用戶運行
# 來到安轉包存放目錄
cd /usr/local/src/
# 解壓文件到指定文件夾
tar -zxvf kibana-7.17.7-linux-x86_64.tar.gz -C /opt/server/

同樣來到 /opt/server 文件夾下,將 kibana-7.17.7-linux-x86_64 文件夾以及下面的文件的所有權授予給 elk:

cd /opt/server/
chown elk:elk -R kibana-7.17.7-linux-x86_64/

執(zhí)行結果:

此時我們需要修改 config/kibana.yml 配置文件,修改的內容為:

# kibana地址,注意修改為自己的服務器地址(需要取消注釋)
server.host: "192.168.3.233"
# elasticsearch地址,注意修改為自己的es服務器地址(需要取消注釋)
elasticsearch.hosts: ["http://192.168.3.233:9200"]
# 國際化地址修改為中文(需要取消注釋)
i18n.locale: "zh-CN"

保存并退出后切換到elk用戶并啟動kibana

# 來到kibana目錄
cd kibana-7.17.7-linux-x86_64/
# 切換到elk用戶
su elk
# 啟動kibana
bin/kibana

看到這個代表啟動成功:

我們可以訪問一下這個地址:

訪問后我們可以點擊左上角的三條杠然后點擊開發(fā)工具,來到這個界面接下來會用到

同理我們退出運行后讓kibanna進入后臺運行

# 先使用 Ctrl + C 退出運行,然后讓kibana后臺運行
nohup bin/kibana >> /dev/null &

安裝Logstash

我準備將Logstash安裝在 /opt/server 文件夾下,我們已經(jīng)創(chuàng)建了這個文件夾,所以直接解壓文件(注意切換到root用戶):

# 注意執(zhí)行前使用 Ctrl + D 退出 elk 用戶并使用root用戶運行
# 來到安轉包存放目錄
cd /usr/local/src/
# 解壓文件到指定文件夾
tar -zxvf logstash-7.17.7-linux-x86_64.tar.gz -C /opt/server/

同樣來到 /opt/server 文件夾下,將 logstash-7.17.7 文件夾以及下面的文件的所有權授予給 elk:

cd /opt/server/
chown elk:elk -R logstash-7.17.7/

執(zhí)行結果:

同樣我們需要修改一下 config/logstash.yml 配置文件,需要修改的內容:

# 節(jié)點的名稱,取一個好聽的名字(需要取消注釋)
node.name: test-log
# pipeline 配置文件的路徑,可自行修改,最好是空文件夾(需要取消注釋)
path.config: /opt/server/logstash-7.17.7/config/conf/*.conf

同樣為了避免內存不足的問題,我們需要修改一下 config/jvm.options 配置文件,在文件中添加這幾行代碼(參數(shù)可以根據(jù)自己的內存大小自行修改):

-Xms256m
-Xmx256m
-Xmn128m

加上后如圖:

然后我們再到我們上面 path.config 后面配置的文件夾(我配置的文件夾是/opt/server/logstash-7.17.7/config/conf/)中創(chuàng)建一個 test-log.conf 文件,文件內容為:

input {
  tcp {
    mode => "server"
    port => 4560
  }
}
filter {}
output {
  elasticsearch {
    action => "index"
    hosts  => ["192.168.3.233:9200"]
    index  => "test-log"
  }
}

文件中包含了以下幾個模塊:

  • nput:日志的輸出來源,我們將暴露一個4560端口接收來自SpringBoot的日志
  • filter:日志的過濾器,暫時不配置
  • output:日志的輸出目的地,我們將日志輸出到elasticsearch中進行保存,如果有多個es可以在中括號當中填寫多個,以逗號隔開,其中index配置的test-log即為存儲日志用到的索引名稱,可自行修改

然后我們切換到elk用戶去啟動logstash:

cd logstash-7.17.7/
su elk
bin/logstash

看到這兩個輸出內容代表Logstash啟動成功:

我們可以按照上面的方法將Logstash轉換為后臺運行:

nohup bin/logstash >> /dev/null &

編寫SpringBoot項目

到現(xiàn)在為止我們已經(jīng)完成了服務端的搭建,現(xiàn)在我們開始編寫SpringBoot項目去整合到ELK當中

初始化SpringBoot項目

我們去到 https://start.spring.io/ 初始化一個SpringBoot項目,相信你們會操作這里就不再過多贅述:

修改代碼

將項目導入到idea或則其他的開發(fā)工具,并在 pom.xml 里面多添加一個 logback 整合 logstash 的依賴:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>7.3</version>
</dependency>

如圖:

然后我們來到 application.yaml 文件中添加下面幾個配置:

server:
  port: 8080
log:
  # logstash 地址和端口,注意修改
  logstash-host: 192.168.3.233:4560

接下來我們在 resources 目錄下創(chuàng)建一個 logback-spring.xml 配置文件,其中的內容為:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路徑 -->
    <property name="log.path" value="logs/test-log"/>
    <!-- 日志輸出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
    <!-- 讀取SpringBoot配置文件獲取logstash的地址和端口 -->
    <springProperty scope="context" name="logstash-host" source="log.logstash-host"/>
    <!-- 控制臺輸出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- 系統(tǒng)日志輸出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/info.log</file>
        <!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的歷史 7天 -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 過濾的級別 -->
            <level>INFO</level>
            <!-- 匹配時的操作:接收(記錄) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配時的操作:拒絕(不記錄) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的歷史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 過濾的級別 -->
            <level>ERROR</level>
            <!-- 匹配時的操作:接收(記錄) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配時的操作:拒絕(不記錄) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 將日志文件輸出到Logstash -->
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- 獲取logstash地址作為輸出的目的地 -->
        <destination>${logstash-host}</destination>
        <encoder chatset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>
    <!-- 系統(tǒng)模塊日志級別控制  -->
    <logger name="com.greateme" level="info"/>
    <!-- Spring日志級別控制  -->
    <logger name="org.springframework" level="warn"/>
    <root level="info">
        <appender-ref ref="console"/>
    </root>
    <!--系統(tǒng)操作日志-->
    <root level="info">
        <appender-ref ref="file_info"/>
        <appender-ref ref="file_error"/>
        <appender-ref ref="logstash"/>
    </root>
</configuration>

重點講講下面幾行代碼

<!-- 讀取SpringBoot配置文件獲取logstash的地址和端口 -->
<springProperty scope="context" name="logstash-host" source="log.logstash-host"/>

這一行代碼是用于讀取 application.yaml 配置文件中的 log.logstash-host 屬性,然后生成一個 logback 的屬性,用于輸出日志所用

<!-- 將日志文件輸出到Logstash -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!-- 獲取logstash地址作為輸出的目的地 -->
    <destination>${logstash-host}</destination>
    <encoder chatset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>

這幾行代碼就是配置輸出日志到logstash的代碼

編寫Controller

我們來創(chuàng)建一個Controller來測試輸出一些日志:

TestLogController.java

package com.greateme.log.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 * 測試日志的Controller
 * </p>
 *
 * @author XiaoHH
 * @version 1.0.0
 * @date 2023-04-26 22:59:13
 * @file TestLogController.java
 */
@RestController
public class TestLogController {
    /**
     * 獲取日志輸出對象
     */
    private static final Logger log = LoggerFactory.getLogger(TestLogController.class);
    /**
     * 測試輸出log的訪問方法
     */
    @GetMapping("/testLog")
    public String testLog() {
        log.error("測試輸出一個日志");
        return "success";
    }
}

編寫完成后項目的目錄結構為:

我們來啟動項目,我們可以發(fā)現(xiàn)啟動時就輸出了八條日志:

我們來到kibana查詢一下索引列表:

然后再看看里面的數(shù)據(jù),發(fā)現(xiàn)的確新增了8條內容:

我們編寫了一個Controller也會輸出日志,我們訪問試試:

上面日志輸出成功了,我們再來看看es里面的數(shù)據(jù):

同時也可以看到日志的內容可以看到我們自定義輸出的日志:

代碼倉庫地址:
https://gitcode.net/m0_51510236/test-log
好了SpringBoot整合ELK就整合完畢了,以后再也不要一臺臺服務器登陸上去查看日志了,祝你們編碼開心!

到此這篇關于SpringBoot整合ELK做日志(超完整)的文章就介紹到這了,更多相關SpringBoot ELK日志內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java如何消除太多的if else判斷示例代碼

    java如何消除太多的if else判斷示例代碼

    這篇文章主要介紹了java如何消除太多的if else判斷,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • jsp如何獲取Session中的值

    jsp如何獲取Session中的值

    這篇文章主要介紹了jsp如何獲取Session中的值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 解決Java原生壓縮組件不支持中文文件名亂碼的問題

    解決Java原生壓縮組件不支持中文文件名亂碼的問題

    本篇文章主要介紹了解決Java原生壓縮組件不支持中文文件名亂碼的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 關于ObjectUtils.isEmpty()?和?null?的區(qū)別

    關于ObjectUtils.isEmpty()?和?null?的區(qū)別

    這篇文章主要介紹了關于ObjectUtils.isEmpty()?和?null?的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 使用maven構建java9 service實例詳解

    使用maven構建java9 service實例詳解

    本篇文章主要介紹了使用maven構建java9 service實例詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Java讀寫ini文件代碼示例

    Java讀寫ini文件代碼示例

    這篇文章主要介紹了Java讀寫ini文件代碼示例,分享了相關代碼示例及相關注釋,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java中的Semaphore信號量使用方法代碼實例

    Java中的Semaphore信號量使用方法代碼實例

    這篇文章主要介紹了Java中的Semaphore信號量使用方法代碼實例,Semaphore是一種基于計數(shù)的信號量,它可以設定一個閾值,基于此,多個線程競爭獲取許可信號,做自己的申請后歸還,超過閾值后,線程申請許可信號將會被阻塞,需要的朋友可以參考下
    2023-11-11
  • Java+OpenCV實現(xiàn)人臉檢測并自動拍照

    Java+OpenCV實現(xiàn)人臉檢測并自動拍照

    這篇文章主要為大家詳細介紹了Java+OpenCV實現(xiàn)人臉檢測,并調用筆記本攝像頭實時抓拍,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java實現(xiàn)常用的三種加密算法詳解

    Java實現(xiàn)常用的三種加密算法詳解

    編程中常見的加密算法有以下幾種:信息摘要算法、對稱加密算法以及非對稱加密算法。本文將利用Java實現(xiàn)這幾種常見的加密算法,需要的可以參考一下
    2022-03-03
  • Spring Boot整合Swagger2的完整步驟詳解

    Spring Boot整合Swagger2的完整步驟詳解

    這篇文章主要給大家介紹了關于Spring Boot整合Swagger2的完整步驟,文中通過示例代碼將整合的步驟一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07

最新評論