<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringCloud 分布式日志采集方案

          共 4193字,需瀏覽 9分鐘

           ·

          2021-12-01 18:39

          點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”

          優(yōu)質(zhì)文章,第一時間送達(dá)

          由于微服務(wù)架構(gòu)中每個服務(wù)可能分散在不同的服務(wù)器上,因此需要一套分布式日志的解決方案。spring-cloud提供了一個用來trace服務(wù)的組件sleuth。它可以通過日志獲得服務(wù)的依賴關(guān)系?;趕leuth,可以通過現(xiàn)有的日志工具實現(xiàn)分布式日志的采集。

          這里使用的是ELK,也就是elasticsearch、logstash、kibana。

          一、sleuth

          第一步:sleuth管理端

          sleuth一般單獨放在一個工程中。需要添加如下依賴

          <dependency>??
          ????????<groupId>io.zipkin.javagroupId>??
          ????????<artifactId>zipkin-autoconfigure-uiartifactId>??
          ????????<scope>runtimescope>??
          ????dependency>?
          ??????
          ????<dependency>??
          ????????<groupId>io.zipkin.javagroupId>??
          ????????<artifactId>zipkin-serverartifactId>??
          ????dependency>??

          配置服務(wù)注冊中心的地址

          eureka:?
          ??client:?
          ????serviceUrl:?
          ??????defaultZone:?http://localhost:1111/eureka/

          啟動類加入服務(wù)發(fā)現(xiàn)的注解和zipkin的注解,如下

          package?com.wlf.demo;
          ?
          import?org.springframework.boot.SpringApplication;
          import?org.springframework.boot.autoconfigure.SpringBootApplication;
          import?org.springframework.cloud.client.discovery.EnableDiscoveryClient;
          ?
          import?zipkin.server.EnableZipkinServer;
          ?
          @EnableDiscoveryClient?
          @EnableZipkinServer??
          @SpringBootApplication??
          public?class?Application?{
          ???
          ????public?static?void?main(String[]?args)?{??
          ????????SpringApplication.run(Application.class,?args);??
          ????}??
          ?
          }

          這個時候啟動并訪問該微服務(wù)的地址,可以看到zipkin的管理頁面了

          第二步:被管理的微服務(wù)端

          在我們的其他微服務(wù)端需要簡單的配置,納入到zipkin的管理之中

          引入依賴

          <dependency>??
          ?????????<groupId>org.springframework.cloudgroupId>??
          ?????????<artifactId>spring-cloud-starter-sleuthartifactId>??
          ?????dependency>??
          ?????
          ?????<dependency>??
          ?????????<groupId>org.springframework.cloudgroupId>??
          ?????????<artifactId>spring-cloud-sleuth-zipkinartifactId>??
          ?????dependency>

          加入如下配置

          spring:?
          ??sleuth:?
          ????sampler:?
          ???????percentage:?1
          ??zipkin:?
          ????base-url:?http://localhost:9411

          spring.sleuth.sampler.percentage:這個參數(shù)的意思是抓取100%的日志,只有通過抓取日志,才能獲知依賴關(guān)系。但是如果始終抓取日志的話對性能會有影響,因此可以自己配置。一般在開發(fā)環(huán)境,該值設(shè)置為1,生產(chǎn)環(huán)境視情況而定。

          spring.zipkin.base-url:為第一步配置的zipkin管理端微服務(wù)的地址

          現(xiàn)在分別啟動服務(wù)注冊中心,網(wǎng)關(guān),需要的微服務(wù),以及sleuth。

          隨便調(diào)用一個微服務(wù)

          然后我們可以看到相關(guān)的跟蹤日志

          同樣我們也可以看到微服務(wù)之間的依賴關(guān)系,這里是通過網(wǎng)關(guān)調(diào)用了myservice-consumer-feign微服務(wù),然后通過myservice-consumer-feign微服務(wù)調(diào)用了myservice-provider微服務(wù)

          二、搭建ELK

          1、elasticsearch的安裝與配置,由于之前的文章已經(jīng)介紹了elasticsearch的單點,集群的安裝,head插件的安裝。這里不再總結(jié)。

          2、kibana的安裝,沒什么好說的,解壓,運行就可以了

          3、logstash的安裝,解壓即可

          在config下新建配置文件

          output?{
          input?{
          ??tcp?{
          ??????port?=>?4560
          ??????codec?=>?json_lines
          ??}
          }
          ?
          output?{
          ??elasticsearch?{
          ?????hosts?=>?["192.168.160.66:9200","192.168.160.88:9200","192.168.160.166:9200"]
          ?????index?=>?"applog"
          ??}
          }

          其中port為端口號,codec表示通過json格式,elasticsearch.hosts表示elasticsearch的地址,這里是集群。index 為日志存儲的elasticsearch索引。

          啟動需要調(diào)用bin下的logstash命令,通過-f指定配置文件

          4、使用kibana

          啟動elasticsearch、head、kibana、logstash

          創(chuàng)建索引applog

          將applog配置到kibana中,在index pattern中輸入我們的applog索引

          最后點擊create即可

          點擊菜單中的discover即可查看日志

          三、logback配置

          spring-cloud、logstash都是支持logback的,因此需要為微服務(wù)配置好相應(yīng)的logback-spring.xml

          這里值得注意的是,在spring-boot中,logback-spring.xml的加載在application.yml之前。而我們需要在logback-spring.xml中使用spring.application.name。因此,我們需要把spring.application.name配置提到bootstrap.yml中。

          加載順序為bootstrap.yml,logback-spring.xml,application.yml

          相比普通的logback-spring.xml,我們主要配置這幾樣?xùn)|西spring.application.name,logstash的appender

          這里提供一個logback-spring.xml的例子


          <configuration?scan="true"?scanPeriod="10?seconds">
          ??????????????
          ????<springProperty?scope="context"?name="springAppName"?
          ????????source="spring.application.name"?/>
          ??????????
          ??????????????
          ????<property?name="CONSOLE_LOG_PATTERN"
          ??????????????value="%date?[%thread]?%-5level?%logger{36}?-?%msg%n"?/>
          ????????????????
          ????????????????????
          ????<appender?name="stdout"?class="ch.qos.logback.core.ConsoleAppender">
          ?????<withJansi>truewithJansi>
          ??<encoder>
          ???????????<pattern>${CONSOLE_LOG_PATTERN}pattern>
          ?????<charset>utf8charset>
          ?????encoder>
          ????appender>??????
          ????
          ????<appender?name="logstash"
          ?????class="net.logstash.logback.appender.LogstashTcpSocketAppender">

          ?????<destination>192.168.160.66:4560destination>?
          ?????<encoder?class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
          ??????<providers>
          ???????<timestamp>
          ????????<timeZone>UTCtimeZone>
          ???????timestamp>
          ???????<pattern>
          ????????<pattern>
          ?????????{
          ???????????"severity":"%level",
          ???????????"service":?"${springAppName:-}",??
          ??????????????????????????"trace":?"%X{X-B3-TraceId:-}",??
          ??????????????????????????"span":?"%X{X-B3-SpanId:-}",??
          ??????????????????????????"exportable":?"%X{X-Span-Export:-}",??
          ??????????????????????????"pid":?"${PID:-}",??
          ??????????????????????????"thread":?"%thread",??
          ??????????????????????????"class":?"%logger{40}",??
          ??????????????????????????"rest":?"%message"??
          ?????????}
          ????????pattern>
          ???????pattern>
          ??????providers>
          ?????encoder>
          ????appender>
          ????
          ????<appender?name="dailyRollingFileAppender"?class="ch.qos.logback.core.rolling.RollingFileAppender">
          ???<File>main.logFile>
          ???<rollingPolicy?class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          ?????<FileNamePattern>main.%d{yyyy-MM-dd}.logFileNamePattern>
          ?????<maxHistory>30maxHistory>?????????
          ???rollingPolicy>
          ???<encoder>
          ?????<Pattern>%d{HH:mm:ss.SSS}?[%thread]?%-5level?%logger{35}?-?%msg?%nPattern>
          ???encoder>????????
          ????<filter?class="ch.qos.logback.classic.filter.ThresholdFilter">
          ?????<level>DEBUGlevel>
          ???filter>
          ?appender>
          ??????????
          ????<springProfile?name="!production">?
          ????????<logger?name="com.myfee"?level="DEBUG"?/>
          ????????<logger?name="org.springframework.web"?level="INFO"/>
          ????????<root?level="info">??
          ?????????<appender-ref?ref="stdout"?/>??
          ?????????<appender-ref?ref="dailyRollingFileAppender"?/>??
          ?????????<appender-ref?ref="logstash"?/>?
          ?????root>?
          ????springProfile>
          ????
          ????<springProfile?name="production">?
          ??<logger?name="com.myfee"?level="DEBUG"?/>
          ????????<logger?name="org.springframework.web"?level="INFO"/>
          ????????<root?level="info">??
          ?????????<appender-ref?ref="stdout"?/>??
          ?????????<appender-ref?ref="dailyRollingFileAppender"?/>?
          ?????????<appender-ref?ref="logstash"?/>??
          ?????root>?
          ?springProfile>
          configuration>

          我們把message信息配置到了rest字段中。

          三、查詢?nèi)罩?span style="display: none;">

          啟動服務(wù)注冊中心,網(wǎng)關(guān),需要的微服務(wù),以及sleuth。

          啟動elasticsearch,head,kibana,logstash,隨便運行一個服務(wù),比如

          這里會輸出一行日志,內(nèi)容為myService-provider userController,通過網(wǎng)關(guān)調(diào)用

          eclipse控制臺輸出日志

          在kibana中搜索日志

          我們看到日志信息在rest字段中。另外,通過trace和span還可以跟蹤到整個微服務(wù)的調(diào)用過程。到此為止,整個日志采集就搭建完成了。系統(tǒng)上線后只需要在elasticsearch中就能搜索到各個服務(wù)器上,各個微服務(wù)的日志內(nèi)容了。

          來源:blog.csdn.net/guduyishuai/article/details/79228306

          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人电影一二三区 | 麻豆精品在线观看 | 亚洲性爱在线观看 | 最新亚洲中文字幕 | 大香蕉色视频 |