如何優雅的管理 Spring Boot 日誌?松哥手把手教你上 ELK!

松哥原創的 Spring Boot 視頻教程已經殺青,感興趣的小夥伴戳這裏-->Spring Boot+Vue+微人事視頻教程


Spring Boot 如何攀上高大上的 ELK?今天松哥手把手教你將 Spring Boot 日誌實時輸入到 Es 中!

以下是視頻筆記:

注意,筆記只是視頻內容的一個簡要記錄,因此筆記內容比較簡單,完整的內容可以查看視頻。

30.1 Logstash

一個具備實時數據傳輸能力的管道。它可以將數據從輸入端(Spring Boot 日誌)傳送到輸出端(Es)。數據在 Logstash 中傳輸的過程中,可以加入過濾器 Filter,對數據進行過濾。

30.2 安裝

  1. 可以使用 Docker 安裝(不推薦)。

  2. 直接安裝

2.1 下載 Logstash:https://www.elastic.co/cn/downloads/logstash

2.2 解壓下載後的文件。

2.3 在 config 目錄下,添加 logstash-springboot.conf 文件,內容如下:

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
filter {

}
output {
  elasticsearch {
    hosts => ["127.0.0.1:9200","127.0.0.1:9201","127.0.0.1:9202"]
    index => "log-javaboy-dev-%{+yyyy.MM.dd}" 
  }
}

2.4 在 config/pipelines.yml 文件中,加載 logstash-springboot.conf 配置文件:

- pipeline.id: log_dev
  path.config: "/Users/sang/workspace/elasticsearch/logstash-7.10.2/config/logstash-springboot.conf"

2.5 啓動 Logstash

進入到 bin 目錄下,執行 ./logstash 命令啓動即可(啓動之前確保 Es 已經啓動)。看到如下內容表示啓動成功:

image-20210127194524405

30.3 Spring Boot 日誌

首先創建一個 Spring  Boot 工程,引入 web 依賴 和 logstash 相關的依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.6</version>
</dependency>

然後在 resources 目錄下創建 logback-spring.xml 文件(具體參考:Spring Boot 日誌各種用法),將日誌輸出到 logstash 中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <!--應用名稱-->
    <property name="APP_NAME" value="logstash"/>
    <!--日誌文件保存路徑-->
    <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
    <contextName>${APP_NAME}</contextName>
    <!--每天記錄日誌到文件appender-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!--輸出到logstash的appender-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--可以訪問的logstash日誌收集端口-->
        <destination>127.0.0.1:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>

最後再創建一個 HelloController 用來測試:

@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @GetMapping("/hello")
    public void hello() {
        logger.info("hello logstash!");
    }
}

接下來啓動 Spring Boot 工程。

30.4 Kibana

在 Kibana 中,點擊創建一個索引規則:

image-20210127200303006

接下來創建一個索引規則:

image-20210127200345728

輸入索引名稱規則:

image-20210127200431491

然後點擊下一步,選擇 @timestamp。

最後,在 discover 中可以查看日誌信息。

image-20210127200538746

ElasticSearch 系列其他文章:

  1. 打算出一個 ElasticSearch 教程,誰贊成,誰反對?
  2. ElasticSearch 從安裝開始
  3. ElasticSearch 第三彈,核心概念介紹
  4. ElasticSearch 中的中文分詞器該怎麼玩?
  5. ElasticSearch 索引基本操作
  6. ElasticSearch 文檔的添加、獲取以及更新
  7. ElasticSearch 文檔的刪除和批量操作
  8. ElasticSearch 文檔路由,你的數據到底存在哪一個分片上?
  9. ElasticSearch 併發的處理方式:鎖和版本控制
  10. ElasticSearch 中的倒排索引到底是什麼?
  11. ElasticSearch 動態映射與靜態映射
  12. ElasticSearch 四種字段類型詳解
  13. ElasticSearch 中的地理類型和特殊類型
  14. ElasticSearch 23 種映射參數詳解
  15. ElasticSearch 如何配置某個字段的權重?
  16. ElasticSearch 23 種映射參數詳解【3】
  17. ElasticSearch 映射模版
  18. ElasticSearch 搜索入門
  19. ElasticSearch 全文搜索怎麼玩?
  20. ElasticSearch 打錯字還能搜索到?試試 fuzzy query!
  21. ElasticSearch 複合查詢,理解 Es 中的文檔評分策略!
  22. 想搜索附近評分較高的餐廳,ElasticSearch 大顯身手!
  23. ElasticSearch 如何像 MySQL 一樣做多表聯合查詢?
  24. ElasticSearch 地理位置查詢與特殊查詢
  25. ElasticSearch 搜索高亮與排序
  26. ElasticSearch 指標聚合
  27. ElasticSearch 桶聚合
  28. ElasticSearch 管道聚合
  29. Java 操作 ElasticSearch,so easy!
  30. ElasticSearch Java 高級客戶端索引操作~
  31. ElasticSearch Java 高級客戶端如何操作索引?
  32. 使用 Java 客戶端添加 ElasticSearch 文檔
  33. 使用 Java 客戶端對 ElasticSearch 文檔進行刪改查

本文分享自微信公衆號 - 江南一點雨(a_javaboy)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章