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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...