最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

功能強大的TraceId?搭配?ELK使用詳解

 更新時間:2022年09月21日 12:02:29   作者:一條coding  
這篇文章主要為大家介紹了功能強大的TraceId?搭配?ELK使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

之前寫了一篇關(guān)于 TraceId 的文章:為全局請求添加 TraceId ,看日志再也不懵逼

今天就接著 TraceId 做一些優(yōu)化,如果想快速的定位到問題,就要實現(xiàn)對日志的快速搜索,所以本文就引入 ELK 技術(shù)棧。

ELK 是 ES、Logstash、Kibana 的總稱,其核心功能就是實現(xiàn)數(shù)據(jù)的收集、搜索、可視化。具體功能和使用在本文都會提到。

需求分析

先分析一下,我們想實現(xiàn)的核心功能是搜索,必然是用 ES 實現(xiàn),那問題就轉(zhuǎn)換成如何將日志收集并存儲到 ES

日志大家都不陌生了,可以在控制臺打印,也可以存入文件,那能不能直接輸入 ES 呢,好像沒聽說過。

這里就要用到 Logstash 來收集日志,Spring 默認的日志框架 Logback 已經(jīng)對其提供了支持,我們要做的只是編寫配置文件。

Logstash 有個問題就是非常占用內(nèi)存,所以本文后面會介紹另一個比較輕量級的日志收集工具 FileBeat ,由 Go 語言編寫。

同時對于真實的線上環(huán)境為了保證吞吐量和可靠性,都會引入 Kafka 進行解耦,本文不做演示。

下面就進入實戰(zhàn)部分,搭建一套日志收集與搜索系統(tǒng)。

ES

推薦大家去 elastic 的中文社區(qū)下載 ELK ,速度會比較快,官網(wǎng)當(dāng)然也是可以的。目前最新版本是8.+,推薦還是下 7.+ 比較穩(wěn)妥,具體版本隨意,但 ELK 的版本要一致。

本文使用 7.14.2 版本。下載下來解壓就行,不廢話。

修改配置文件

進入 config 目錄:

# elasticsearch.yml
path.data: /Users/li/programs/elasticsearch-7.14.2/data
path.logs: /Users/li/programs/elasticsearch-7.14.2/logs
ingest.geoip.downloader.enabled: false
# jvm.options
# 如果內(nèi)存夠用也可以不修改
-Xms1g
-Xmx1g

啟動

./bin/elasticsearch
[2022-09-13T10:54:10,015][INFO ][o.e.n.Node               ] [LdeMacBook-Pro.mshome.net] started
[2022-09-13T10:54:10,730][INFO ][o.e.l.LicenseService     ] [LdeMacBook-Pro.mshome.net] license [b7a596e6-1b61-4e6d-af2f-7eab70fe693b] mode [basic] - valid

測試

瀏覽器訪問:http://localhost:9200/

kibana

下面再安裝 ES 的可視化工具,下載地址同上,版本號同上。

修改配置文件

# kibana.yml
server.port: 5601
server.host: "localhost"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN" # 中文

啟動

./bin/kibana
[10:56:42.001] [info][status] Kibana is now degraded
[10:56:44.784] [info][status] Kibana is now available (was degraded)

測試

瀏覽器訪問:http://localhost:5601/

新增數(shù)據(jù)并查詢

PUT /ecommerce/product/1
 {
     "name" : "gaolujie yagao",
     "desc" :  "gaoxiao meibai",
     "price" :  30,
     "producer" :  "gaolujie producer",
     "tags": [ "meibai", "fangzhu" ]
 }
GET /ecommerce/product/1

Logstash

下載地址同上,版本號同上。

拷貝配置文件 logstash-sample.conf

# logstash-log-boot.conf
input {
  tcp {
    mode => "server"
    host => "127.0.0.1"
    # 通過監(jiān)聽9001端口進行采集日志
    port => 9001
    codec => json_lines
  }
}
output {
  elasticsearch {
    # ES的地址
    hosts => ["http://127.0.0.1:9200"]
    # 索引的名稱
    index => "boot-log-collection-%{+YYYY.MM.dd}"
  }
  stdout {
    codec => rubydebug
  }
}

啟動

./bin/logstash -f ./config/logstash-log-boot.conf

Logback

OK,到此 ELK 就搭建完了,接下來就是配置 boot 應(yīng)用的日志輸出。logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_PATTERN"
              value="%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} [%highlight(%-5level)] [%boldYellow(%X{traceId})] [%boldYellow(%thread)] %boldGreen(%logger{36} %F.%L) %msg%n">
    </property>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <!-- 控制臺打印INFO及以上級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    <!--    LOGSTASH 日志收集-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- 在logstash啟動文件logstash-log-boot.conf中配置的IP地址和端口 -->
        <destination>127.0.0.1:9001</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    <root>
        <appender-ref ref="STDOUT"/>
        <!-- 引入LOGSTASH-->
        <appender-ref ref="LOGSTASH" />
    </root>
</configuration>

如果報LogstashTcpSocketAppender這個類找不到,需要添加一個依賴:

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

其實這個依賴就是用來網(wǎng)絡(luò)通信的,來傳輸日志。

測試

這時啟動應(yīng)用,觀看 Logstash 的控制臺,會跟著打印日志,再打開 ES ,創(chuàng)建我們配置好的查詢索引,神奇的事情發(fā)生了,日志一條一條的展示出來。

再結(jié)合 TraceId 進行搜索,簡直逆天!

Filebeat

同樣是下載 FileBeat 。

修改配置文件

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /Users/li/IdeaProjects/cloud-alibaba/cloud-service-commerce/commerce-user/log/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 2
setup.kibana:
  host: "localhost:5601"
output.elasticsearch:
  hosts: ["localhost:9200"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

因為 Filebeat 是基于監(jiān)控日志文件有沒有新增來同步數(shù)據(jù)的,所以需要配置日志文件的目錄。

可以直接輸出到 ES ,也可以輸出到 Logstash 。二選一!

再配置 logback.xml

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件輸出位置-->
        <File>/Users/li/IdeaProjects/cloud-alibaba/cloud-service-commerce/commerce-user/log/user.log</File>
        <encoder>
            <!--[%X{requestId}] 線程id,方便排查日志-->
            <pattern>%date %level [%thread] [%X{requestId}] [%logger{36}.%method\(\):%line] %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 添加.gz 歷史日志會啟用壓縮 大大縮小日志文件所占空間 -->
            <!--<fileNamePattern>/home/log/stdout.log.%d{yyyy-MM-dd}.log</fileNamePattern>-->
            <fileNamePattern>
                /Users/li/IdeaProjects/cloud-alibaba/cloud-service-commerce/commerce-user/log/user-%d{yyyy-MM-dd}.log
            </fileNamePattern>
            <maxHistory>3</maxHistory><!-- 保留 3 天日志 -->
        </rollingPolicy>
    </appender>
		<root>
        <appender-ref ref="FILE"/>
    </root>

再次啟動項目,發(fā)現(xiàn)日志已寫入文件

進入 ES 查詢,同樣查詢到日志。

經(jīng)過測試,F(xiàn)ileBeat 的日志收集延遲時間要比 Logstash 長,畢竟基于文件進行同步,可以理解,而且本身業(yè)務(wù)實時性要求不高。

最后

內(nèi)容看著比較多,實際很容易實現(xiàn),但真正生產(chǎn)環(huán)境要復(fù)雜的多,還需不斷思考。

以上就是功能強大的TraceId 搭配 ELK使用詳解的詳細內(nèi)容,更多關(guān)于TraceId 搭配 ELK的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 進制轉(zhuǎn)換的方法

    Java 進制轉(zhuǎn)換的方法

    這篇文章介紹了Java 進制轉(zhuǎn)換的方法,有需要的朋友可以參考一下
    2013-09-09
  • java中處理socket通信過程中粘包的情況

    java中處理socket通信過程中粘包的情況

    本篇文章主要介紹了java中處理socket通信過程中粘包的情況,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Spring中的底層架構(gòu)核心概念類型轉(zhuǎn)換器詳解

    Spring中的底層架構(gòu)核心概念類型轉(zhuǎn)換器詳解

    這篇文章主要介紹了Spring中的底層架構(gòu)核心概念類型轉(zhuǎn)換器詳解,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • springboot整合shiro的過程詳解

    springboot整合shiro的過程詳解

    Shiro 是一個強大的簡單易用的 Java 安全框架,主要用來更便捷的 認證,授權(quán),加密,會話管理,這篇文章給大家詳細介紹Shiro 工作原理及架構(gòu)圖,通過實例圖文相結(jié)合給大家介紹的非常詳細,需要的朋友參考下吧
    2021-10-10
  • Java?Redisson多策略注解限流

    Java?Redisson多策略注解限流

    這篇文章主要介紹了Java?Redisson多策略注解限流,文章使用Redisson的RRateLimiter進行限流,詳細介紹,感興趣的小伙伴可以參考下面文章內(nèi)容
    2022-09-09
  • Java實現(xiàn)將圖片上傳到webapp路徑下 路徑獲取方式

    Java實現(xiàn)將圖片上傳到webapp路徑下 路徑獲取方式

    這篇文章主要介紹了Java實現(xiàn)將圖片上傳到webapp路徑下 路徑獲取方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java 微信公眾號開發(fā)相關(guān)總結(jié)

    Java 微信公眾號開發(fā)相關(guān)總結(jié)

    公眾號作為主流的自媒體平臺,有著不少人使用。這次以文本回復(fù)作為案例來講解Java相關(guān)的微信公眾號開發(fā)
    2021-05-05
  • Java之SpringBoot-Thymeleaf詳情

    Java之SpringBoot-Thymeleaf詳情

    聊Thymeleaf,需要知道為什么到了SpringBoot中就不用JSP了?這跟SpringBoot打包方式有點關(guān)系,SpringBoot項目打包是jar包,下面文章小編就對此做一個詳細介紹,需要的朋友可以參考一下
    2021-09-09
  • jstl EL表達式遍歷Map的方法

    jstl EL表達式遍歷Map的方法

    這篇文章主要介紹了jstl EL表達式遍歷Map的方法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Spring源碼解析 Bean的實例化

    Spring源碼解析 Bean的實例化

    這篇文章主要介紹了Spring源碼解析 Bean的實例化,文章圍繞主題展開詳細的內(nèi)容介紹沒具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07

最新評論

岑巩县| 故城县| 都昌县| 东乌| 通河县| 枝江市| 柳江县| 湛江市| 嘉祥县| 松阳县| 云和县| 永嘉县| 菏泽市| 佛学| 南皮县| 伊吾县| 京山县| 虎林市| 滨海县| 台北市| 连南| 邻水| 东光县| 永安市| 大邑县| 抚松县| 常熟市| 家居| 余江县| 双牌县| 且末县| 榆树市| 临海市| 沙坪坝区| 海门市| 抚顺市| 松溪县| 灵璧县| 松滋市| 沅陵县| 固始县|