亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

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

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

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

需求分析

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

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

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

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

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

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

ES

推薦大家去 elastic 的中文社區(qū)下載 ELK ,速度會比較快,官網當然也是可以的。目前最新版本是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
# 如果內存夠用也可以不修改
-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/

新增數據并查詢

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 應用的日志輸出。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>

其實這個依賴就是用來網絡通信的,來傳輸日志。

測試

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

再結合 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)控日志文件有沒有新增來同步數據的,所以需要配置日志文件的目錄。

可以直接輸出到 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ā)現日志已寫入文件

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

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

最后

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

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

相關文章

  • 詳解Java進階知識注解

    詳解Java進階知識注解

    這篇文章主要介紹了詳解Java進階知識注解,從注解的定義、元注解、自定義注解、注解實例這幾個方面,讓同學們更加深入的了解注解
    2021-04-04
  • k8s部署springboot實現前后端分離項目

    k8s部署springboot實現前后端分離項目

    本文主要介紹了k8s部署springboot實現前后端分離項目,主要包括配置文件、鏡像構建和容器編排等方面,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Java反射與Fastjson的危險反序列化詳解

    Java反射與Fastjson的危險反序列化詳解

    在?Java?中,Computer.class是一個引用,它表示了?Computer?的字節(jié)碼對象(Class對象),這個對象被廣泛應用于反射、序列化等操作中,那么為什么?parseObject?需要這個引用呢,帶著這個問題我們一起通過本文學習下吧
    2024-07-07
  • 劍指Offer之Java算法習題精講數組與列表的查找及字符串轉換

    劍指Offer之Java算法習題精講數組與列表的查找及字符串轉換

    跟著思路走,之后從簡單題入手,反復去看,做過之后可能會忘記,之后再做一次,記不住就反復做,反復尋求思路和規(guī)律,慢慢積累就會發(fā)現質的變化
    2022-03-03
  • 基于Java回顧之I/O的使用詳解

    基于Java回顧之I/O的使用詳解

    我計劃在接下來的幾篇文章中快速回顧一下Java,主要是一些基礎的JDK相關的內容
    2013-05-05
  • java并發(fā)編程之深入理解Synchronized的使用

    java并發(fā)編程之深入理解Synchronized的使用

    文詳細講述了線程、進程的關系及在操作系統中的表現,這是多線程學習必須了解的基礎。本文將接著講一下Java線程同步中的一個重要的概念synchronized,希望能夠給你有所幫助
    2021-06-06
  • java中斷機制實例講解

    java中斷機制實例講解

    這篇文章主要介紹了java中斷機制實例講解,用了風趣幽默的講法,有對這方面不太懂的同學可以研究下
    2021-01-01
  • 通過JDK源碼分析關閉鉤子詳解

    通過JDK源碼分析關閉鉤子詳解

    一個簡單的關閉鉤子,程序被中斷或者正常退出時會顯示 hook shutdown!非常的優(yōu)雅,有效,巧妙。那么這篇文章就來給大家介紹關于通過JDK源碼分析關閉鉤子的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒。
    2017-11-11
  • springmvc不進入Controller導致404的問題

    springmvc不進入Controller導致404的問題

    這篇文章主要介紹了springmvc不進入Controller導致404的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java getParameter()獲取數據為空的問題

    Java getParameter()獲取數據為空的問題

    這篇文章主要介紹了Java getParameter()獲取數據為空的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論