springboot集合efk搭建日誌平臺

来源:https://www.cnblogs.com/zero-2020/archive/2022/11/27/16929529.html
-Advertisement-
Play Games

springboot繼承efk實現日誌收集 1.安裝es和kibana 我使用的雲伺服器centos7,2核+4G記憶體,跑起來記憶體使用率50%左右 建議使用最低配置和我一樣,1+2的配置kibana應該跑不起來,安裝過程使用了尚矽谷的springcloud的課程資料,也**!!!!!!!!可以不用, ...


springboot繼承efk實現日誌收集

1.安裝es和kibana

我使用的雲伺服器centos7,2核+4G記憶體,跑起來記憶體使用率50%左右

建議使用最低配置和我一樣,1+2的配置kibana應該跑不起來,安裝過程使用了尚矽谷的springcloud的課程資料,也!!!!!!!!可以不用,自己pull,我附了pull的方法

資料包:鏈接:https://pan.baidu.com/s/1GW1qUUwya6mUAacFokpZUw?pwd=eses
提取碼:eses
參考資料:https://blog.csdn.net/liurui_wuhan/article/details/115480511

1.1安裝es
  • 使用的版本都是7.12.1

  • 使用的安裝方式是docker

1.創建互聯網路

創建kibana和es可以在docker中互聯的網路

docker network create es-net
2.載入鏡像

將資料包中的es.tar上傳到伺服器

image-20221127122555990

 # 導入數據2
 docker load -i es.tar

ps:也可以自己pull ,只要最後的docker里有鏡像就好了

#pull的方法
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.12.1
docker pull kibana:7.12.1
3.運行
docker run -d \
	--name es \
	 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "http.host=0.0.0.0"\
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

命令解釋:

  • --name es :給啟動的容器別名,查看的時候可以直接使用es代替所有需要填寫容器名稱的地方,比如docker logs -f es

  • -e "cluster.name=es-docker-cluster":設置集群名稱

  • -e "http.host=0.0.0.0":監聽的地址,可以外網訪問

  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":記憶體大小

  • -e "discovery.type=single-node":非集群模式

  • -v es-data:/usr/share/elasticsearch/data:掛載邏輯捲,綁定es的數據目錄

  • -v es-logs:/usr/share/elasticsearch/logs:掛載邏輯捲,綁定es的日誌目錄

  • -v es-plugins:/usr/share/elasticsearch/plugins:掛載邏輯捲,綁定es的插件目錄

  • --privileged:授予邏輯捲訪問權

  • --network es-net :加入一個名為es-net的網路中

  • -p 9200:9200:埠映射配置

在瀏覽器中輸入:http://伺服器地址:9200 即可看到elasticsearch的響應結果:

image-20221127122952620

1.2安裝kibana

kibana提供了可視化的界面

1.載入鏡像

跟es一樣,上傳到伺服器,再載入

2.運行
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
  • --network es-net :加入一個名為es-net的網路中,與elasticsearch在同一個網路中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":設置elasticsearch的地址,因為kibana已經與elasticsearch在一個網路,因此可以用容器名直接訪問elasticsearch
  • -p 5601:5601:埠映射配置

kibana啟動一般比較慢,需要多等待一會,可以通過命令:

docker logs -f kibana

查看運行日誌,當查看到下麵的日誌,說明成功:

image-20221127123437440

此時,在瀏覽器輸入地址訪問:http://伺服器地址:5601,即可看到結果

image-20221127123414589

2.安裝filebeat

filebeat要安裝在你需要採集數據的電腦上,不一定要和es安裝在一臺機器上

比如我的項目是在本地跑,filebeat就要安在我的本機也就是windows下

1.下載filebeat

https://www.elastic.co/cn/downloads/past-releases/filebeat-7-12-1

image-20221127130426431

2.編寫filebeat.yml

image-20221127130549192

 
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
  enabled: true
  encoding: UTF-8
  paths:
  #你需要採集數據的地址,比如這個是我的項目生成log文件的地址
    - D:\socialManeger\test1\logs\oper\*.log
# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
# es 地址
  hosts: ["1.14.120.65:9200"]
  

ps:這是最簡單的yml,如果要實現過濾或者其他的功能,可以去看看他的配置文件詳解

3.運行

進入filebeat的安裝目錄

filebeat.exe -e -c filebeat.yml

image-20221127131428552

3.整合springboot

1.pom.xml 新增logstash-logback-encoder依賴,logstash-logback-encoder可以將日誌以json的方式輸出,也不用我們單獨處理多行記錄問題

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

2.配置logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration >
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <contextName>logback</contextName>
    <property name="log.path" value="logs/" />
    <!--輸出到控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 設置字元集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--輸出到文件-->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/oper/oper.log</file>
        <encoder>
            <pattern>%msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/oper/oper -%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" >
            <providers>
                <timestamp>
                    <timeZone>Asia/Shanghai</timeZone>
                </timestamp>
                <pattern>
                    <pattern>{"message": "%message"}</pattern>
                </pattern>
            </providers>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 時間滾動輸出 level為 ERROR 日誌 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error/error.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此處設置字元集 -->
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>

    <!--name:用來指定受此loger約束的某一個包或者具體的某一個類。-->
    <!--addtivity:是否向上級loger傳遞列印信息。預設是true。-->
    <logger name="com.netflix" level="ERROR" />
    <logger name="net.sf.json" level="ERROR" />
    <logger name="org.springframework" level="ERROR" />
    <logger name="springfox" level="ERROR" />


</configuration>

啟動springboot服務,生成的日誌會自動被filebeat採集並推送到es,可以查詢

image-20221127132118786
如果想定製fielbeat.yml和logback.xml,可以去找參考資料

logback.xml詳解:

logback中文文檔:https://www.docs4dev.com/docs/zh/logback/1.3.0-alpha4/reference/architecture.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 初始化 Date date = new Date(); 輸出時間字元串 System.out.println(date.toString()); 字母 描述 示例G 紀元標記 ADy 四位年份 2001M 月份 July or 07d 一個月的日期 10h A.M./P.M. (1~12)格式小時 ...
  • 如果只是想簡單地對整個程式做計算統計,通常使用UNIX下的time命令就足夠了。由於我用的是Mac系統,和Linux系統的輸出可能有不同,不過關鍵都是這三個時間:user: 運行用戶態代碼所花費的時間,也即CPU實際用於執行該進程的時間,其他進程和進程阻塞的時間不計入此數字;system: 在內核中... ...
  • 本文author:@愷龍 報錯情況 在一次使用JSP的jstl時候按照正常引入jstl和使用for each標簽出現瞭如下報錯: 分析原因 經過一番調查研究發現原因如下: JavaEE被Oracle捐獻給Apache了。目前最高版本是 JavaEE8; Apache把JavaEE換名了,以後不叫Ja ...
  • 一、概念辨析:網路延遲與網路波動 (1) 網路延遲 網路延遲是指各式各樣的數據在網路介質中通過網路協議(如TCP/IP)進行傳輸,如果信息量過大不加以限制,超額的網路流量就會導致設備反應緩慢,造成網路延遲。受限於光速,網路延遲總是有一個下限,是無法超越物理極限的。 (2) 網路波動(丟包率) 網路波 ...
  • MyBatis簡單介紹 【1】MyBatis是一個持久層的ORM框架【Object Relational Mapping,對象關係映射】,使用簡單,學習成本較低。可以執行自己手寫的SQL語句,比較靈活。但是MyBatis的自動化程度不高,移植性也不高,有時從一個資料庫遷移到另外一個資料庫的時候需要自 ...
  • VH6501硬體結構 1.式樣 1.正向有5個燈,用來指示干擾的觸髮狀態,干擾類型(數字或模擬),通道通信以及設備狀態。 2.兩個DB9介面(公頭male和母頭female),這是CAN或CANFD通道,單節點干擾,或多節點干擾, ,以及一個Extend觸發介面。 3.兩個DB9介面內部互聯,且PI ...
  • Spring 的核心功能就是提供一個 IoC 容器,用於管理應用程式中的 bean,在容器中配置元數據來管理 Bean 之間的依賴關係,Java 程式中的類都可以交由 Spring 容器管理。 ...
  • 以下為本人的學習筆記 第1章:JDBC概述 1.1 數據的持久化 持久化(persistence):把數據保存到可掉電式存儲設備中以供之後使用。大多數情況下,特別是企業級應用,數據持久化意味著將記憶體中的數據保存到硬碟上加以”固化”,而持久化的實現過程大多通過各種關係資料庫來完成。 持久化的主要應用是 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...