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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...