欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

功能強(qiáng)大的TraceId?搭配?ELK使用詳解

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

引言

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

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

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

需求分析

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

日志大家都不陌生了,可以在控制臺(tái)打印,也可以存入文件,那能不能直接輸入 ES 呢,好像沒(méi)聽(tīng)說(shuō)過(guò)。

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

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

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

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

ES

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

本文使用 7.14.2 版本。下載下來(lái)解壓就行,不廢話。

修改配置文件

進(jìn)入 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

啟動(dòng)

./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

測(cè)試

瀏覽器訪問(wèn):http://localhost:9200/

kibana

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

修改配置文件

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

啟動(dòng)

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

測(cè)試

瀏覽器訪問(wèn):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

下載地址同上,版本號(hào)同上。

拷貝配置文件 logstash-sample.conf

# logstash-log-boot.conf
input {
  tcp {
    mode => "server"
    host => "127.0.0.1"
    # 通過(guò)監(jiān)聽(tīng)9001端口進(jìn)行采集日志
    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
  }
}

啟動(dòng)

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

Logback

OK,到此 ELK 就搭建完了,接下來(lái)就是配置 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>
        <!-- 控制臺(tái)打印INFO及以上級(jí)別的日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    <!--    LOGSTASH 日志收集-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!-- 在logstash啟動(dòng)文件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>

如果報(bào)LogstashTcpSocketAppender這個(gè)類找不到,需要添加一個(gè)依賴:

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

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

測(cè)試

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

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

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: ~

因?yàn)?Filebeat 是基于監(jiān)控日志文件有沒(méi)有新增來(lái)同步數(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 歷史日志會(huì)啟用壓縮 大大縮小日志文件所占空間 -->
            <!--<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>

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

進(jìn)入 ES 查詢,同樣查詢到日志。

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

最后

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

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

相關(guān)文章

  • 詳解Java進(jìn)階知識(shí)注解

    詳解Java進(jìn)階知識(shí)注解

    這篇文章主要介紹了詳解Java進(jìn)階知識(shí)注解,從注解的定義、元注解、自定義注解、注解實(shí)例這幾個(gè)方面,讓同學(xué)們更加深入的了解注解
    2021-04-04
  • k8s部署springboot實(shí)現(xiàn)前后端分離項(xiàng)目

    k8s部署springboot實(shí)現(xiàn)前后端分離項(xiàng)目

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

    Java反射與Fastjson的危險(xiǎn)反序列化詳解

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

    劍指Offer之Java算法習(xí)題精講數(shù)組與列表的查找及字符串轉(zhuǎn)換

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

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

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

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

    文詳細(xì)講述了線程、進(jìn)程的關(guān)系及在操作系統(tǒng)中的表現(xiàn),這是多線程學(xué)習(xí)必須了解的基礎(chǔ)。本文將接著講一下Java線程同步中的一個(gè)重要的概念synchronized,希望能夠給你有所幫助
    2021-06-06
  • java中斷機(jī)制實(shí)例講解

    java中斷機(jī)制實(shí)例講解

    這篇文章主要介紹了java中斷機(jī)制實(shí)例講解,用了風(fēng)趣幽默的講法,有對(duì)這方面不太懂的同學(xué)可以研究下
    2021-01-01
  • 通過(guò)JDK源碼分析關(guān)閉鉤子詳解

    通過(guò)JDK源碼分析關(guān)閉鉤子詳解

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

    springmvc不進(jìn)入Controller導(dǎo)致404的問(wèn)題

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

    Java getParameter()獲取數(shù)據(jù)為空的問(wèn)題

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

最新評(píng)論