成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Cloud構(gòu)建微服務(wù)架構(gòu):分布式服務(wù)跟蹤(整合logstash)

開發(fā) 開發(fā)工具 分布式
引入基于日志的分析系統(tǒng)是一個不錯的選擇,比如:ELK平臺,它可以輕松的幫助我們來收集和存儲這些跟蹤日志,同時在需要的時候我們也可以根據(jù)Trace ID來輕松地搜索出對應(yīng)請求鏈路相關(guān)的明細(xì)日志。

通過之前的入門示例,我們已經(jīng)為trace-1和trace-2引入了Spring Cloud Sleuth的基礎(chǔ)模塊spring-cloud-starter-sleuth,實(shí)現(xiàn)了為各微服務(wù)的日志信息中添加跟蹤信息的功能。但是,由于日志文件都離散的存儲在各個服務(wù)實(shí)例的文件系統(tǒng)之上,僅僅通過查看日志文件來分析我們的請求鏈路依然是一件相當(dāng)麻煩的差事,所以我們還需要一些工具來幫助我們集中的收集、存儲和搜索這些跟蹤信息。引入基于日志的分析系統(tǒng)是一個不錯的選擇,比如:ELK平臺,它可以輕松的幫助我們來收集和存儲這些跟蹤日志,同時在需要的時候我們也可以根據(jù)Trace ID來輕松地搜索出對應(yīng)請求鏈路相關(guān)的明細(xì)日志。

[[224659]]

ELK平臺主要有由ElasticSearch、Logstash和Kiabana三個開源免費(fèi)工具組成:

  • Elasticsearch是個開源分布式搜索引擎,它的特點(diǎn)有:分布式,零配置,自動發(fā)現(xiàn),索引自動分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動搜索負(fù)載等。
  • Logstash是一個完全開源的工具,他可以對你的日志進(jìn)行收集、過濾,并將其存儲供以后使用。
  • Kibana 也是一個開源和免費(fèi)的工具,它Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志。

Spring Cloud Sleuth在與ELK平臺整合使用時,實(shí)際上我們只要實(shí)現(xiàn)與負(fù)責(zé)日志收集的Logstash完成數(shù)據(jù)對接即可,所以我們需要為Logstash準(zhǔn)備json格式的日志輸出。由于Spring Boot應(yīng)用默認(rèn)使用了logback來記錄日志,而Logstash自身也有對logback日志工具的支持工具,所以我們可以直接通過在logback的配置中增加對logstash的appender,就能非常方便的將日志轉(zhuǎn)換成以json的格式存儲和輸出了。

下面我們來詳細(xì)介紹一下在快速入門示例的基礎(chǔ)上,如何實(shí)現(xiàn)面向Logstash的日志輸出配置:

  • 在pom.xml依賴中引入logstash-logback-encoder依賴,具體如下:
  1. <dependency> 
  2.   <groupId>net.logstash.logback</groupId> 
  3.   <artifactId>logstash-logback-encoder</artifactId> 
  4.   <version>4.6</version> 
  5. </dependency> 
  • 在工程/resource目錄下創(chuàng)建bootstrap.properties配置文件,將spring.application.name=trace-1配置移動到該文件中去。由于logback-spring.xml的加載在application.properties之前,所以之前的配置logback-spring.xml無法獲取到spring.application.name屬性,因此這里將該屬性移動到***加載的bootstrap.properties配置文件中。
  • 在工程/resource目錄下創(chuàng)建logback配置文件logback-spring.xml,具體內(nèi)容如下:
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <configuration> 
  3.     <include resource="org/springframework/boot/logging/logback/defaults.xml"/> 
  4.        
  5.     <springProperty scope="context" name="springAppName" source="spring.application.name"/> 
  6.     <!-- 日志在工程中的輸出位置 --> 
  7.     <property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${springAppName}"/> 
  8.     <!-- 控制臺的日志輸出樣式 --> 
  9.     <property name="CONSOLE_LOG_PATTERN" 
  10.               value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]){yellow} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/> 
  11.  
  12.     <!-- 控制臺Appender --> 
  13.     <appender name="console" class="ch.qos.logback.core.ConsoleAppender"
  14.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">            
  15.             <level>INFO</level
  16.         </filter> 
  17.          <encoder> 
  18.             <pattern>${CONSOLE_LOG_PATTERN}</pattern> 
  19.             <charset>utf8</charset> 
  20.        </encoder> 
  21.     </appender> 
  22.  
  23.     <!-- 為logstash輸出的json格式的Appender --> 
  24.     <appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender"
  25.         <file>${LOG_FILE}.json</file> 
  26.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
  27.             <fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePattern> 
  28.             <maxHistory>7</maxHistory> 
  29.         </rollingPolicy> 
  30.         <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"
  31.             <providers> 
  32.                 <timestamp
  33.                     <timeZone>UTC</timeZone> 
  34.                 </timestamp
  35.                 <pattern> 
  36.                     <pattern> 
  37.                         { 
  38.                           "severity""%level"
  39.                           "service""${springAppName:-}"
  40.                           "trace""%X{X-B3-TraceId:-}"
  41.                           "span""%X{X-B3-SpanId:-}"
  42.                           "exportable""%X{X-Span-Export:-}"
  43.                           "pid""${PID:-}"
  44.                           "thread""%thread"
  45.                           "class""%logger{40}"
  46.                           "rest""%message" 
  47.                         } 
  48.                     </pattern> 
  49.                 </pattern> 
  50.             </providers> 
  51.         </encoder> 
  52.     </appender> 
  53.        
  54.     <root level="INFO"
  55.         <appender-ref ref="console"/> 
  56.         <appender-ref ref="logstash"/> 
  57.     </root> 
  58. </configuration> 

對logstash支持主要通過名為logstash的appender實(shí)現(xiàn),內(nèi)容并不復(fù)雜,主要是對日志信息的格式化處理,上面為了方便調(diào)試查看我們先將json日志輸出到文件中。

完成上面的改造之后,我們再將快速入門的示例運(yùn)行起來,并發(fā)起對trace-1的接口訪問。此時我們可以在trace-1和trace-2的工程目錄下發(fā)現(xiàn)有一個build目錄,下面分別創(chuàng)建了以各自應(yīng)用名稱命名的json文件,該文件就是在logback-spring.xml中配置的名為logstash的appender輸出的日志文件,其中記錄了類似下面格式的json日志:

  1. {"@timestamp":"2016-12-04T06:57:58.970+00:00","severity":"INFO","service":"trace-1","trace":"589ee5f7b860132f","span":"a9e891273affb7fc","exportable":"false","pid":"19756","thread":"http-nio-9101-exec-1","class":"c.d.TraceApplication$$EnhancerBySpringCGLIB$$a9604da6","rest":"===<call trace-1>==="
  2. {"@timestamp":"2016-12-04T06:57:59.061+00:00","severity":"INFO","service":"trace-1","trace":"589ee5f7b860132f","span":"2df8511ddf3d79a2","exportable":"false","pid":"19756","thread":"http-nio-9101-exec-1","class":"o.s.c.a.AnnotationConfigApplicationContext","rest":"Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@64951f38: startup date [Sun Dec 04 14:57:59 CST 2016]; parent: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4b8c8f15"

我們除了可以通過上面的方式生成json文件之外,也可以使用LogstashTcpSocketAppender將日志內(nèi)容直接通過Tcp Socket輸出到logstash服務(wù)端,比如:

  1. <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"
  2.   <destination>127.0.0.1:9250</destination> 
  3.   ... 
  4. </appender> 

本文完整示例:

讀者可以根據(jù)喜好選擇下面的兩個倉庫中查看trace-1和trace-2兩個項(xiàng)目:

【本文為51CTO專欄作者“翟永超”的原創(chuàng)稿件,轉(zhuǎn)載請通過51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

 

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2018-04-09 13:56:13

微服務(wù)架構(gòu)分布式

2018-03-13 16:42:26

分布式服務(wù)跟蹤

2018-03-02 16:11:29

Spring Clou分布式服務(wù)跟蹤

2018-04-16 14:56:56

微服務(wù)架構(gòu)分布式服務(wù)

2018-04-18 16:07:49

Spring Clou微服務(wù)分布式

2017-07-28 16:41:53

Spring Clou微服務(wù)架構(gòu)

2018-05-23 15:58:27

Spring Clou微服務(wù)架構(gòu)

2018-07-19 14:58:14

Spring Clou微服務(wù)架構(gòu)

2021-06-09 09:00:00

微服務(wù)架構(gòu)技術(shù)

2017-06-26 09:06:10

Spring Clou微服務(wù)架構(gòu)

2017-09-04 16:15:44

服務(wù)網(wǎng)關(guān)架構(gòu)

2017-07-03 09:50:07

Spring Clou微服務(wù)架構(gòu)

2020-05-26 11:59:30

日志鏈路微服務(wù)架構(gòu)

2017-08-10 11:15:05

Spring Clou微服務(wù)架構(gòu)

2017-08-09 15:50:47

Spring Clou微服務(wù)架構(gòu)

2023-09-12 22:58:51

分布式架構(gòu)微服務(wù)

2023-08-25 16:26:49

微服務(wù)架構(gòu)

2017-06-25 13:33:25

Spring Clou微服務(wù)架構(gòu)

2017-07-04 17:35:46

微服務(wù)架構(gòu)Spring Clou

2017-01-16 14:51:26

京東分布式服務(wù)CallGraph
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产午夜精品一区二区三区四区 | 亚洲精品在线免费播放 | 国产精品视频网 | 91在线精品视频 | 亚洲精品乱码久久久久久按摩观 | 亚洲午夜视频 | 天天操综合网 | 亚洲一区二区三区在线视频 | 久久精品亚洲一区二区三区浴池 | 国产精品视频一区二区三区 | 天天综合操 | 久久久久久蜜桃一区二区 | 亚洲人成在线播放 | 国产高清视频在线观看 | 看真人视频一级毛片 | 91免费看片 | 欧美国产一区二区三区 | 伊人精品国产 | 久久青青 | 国产日韩免费视频 | 欧美自拍视频 | 国产成人啪免费观看软件 | 99久久精品免费看国产四区 | 日韩欧美一区二区三区四区 | 99精品在线| 免费在线播放黄色 | 欧洲亚洲一区二区三区 | 日本超碰| 亚洲三级在线观看 | 国产精品视频网址 | 日韩一区二区免费视频 | 久久av一区二区 | 久久免费高清 | 日韩精品一区二区三区中文在线 | 国产精品一区视频 | 久久久久久国产精品久久 | 操视频网站| 久久精品国产一区二区电影 | 国产精品久久久久久久久久了 | 国产亚洲精品久久午夜玫瑰园 | 国产精品美女视频 |