1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SpringCloud 分布式日志采集方案

        共 4193字,需瀏覽 9分鐘

         ·

        2021-12-01 18:39

        點擊上方藍色字體,選擇“標星公眾號”

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

        由于微服務架構中每個服務可能分散在不同的服務器上,因此需要一套分布式日志的解決方案。spring-cloud提供了一個用來trace服務的組件sleuth。它可以通過日志獲得服務的依賴關系?;趕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>??

        配置服務注冊中心的地址

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

        啟動類加入服務發(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);??
        ????}??
        ?
        }

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

        第二步:被管理的微服務端

        在我們的其他微服務端需要簡單的配置,納入到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%的日志,只有通過抓取日志,才能獲知依賴關系。但是如果始終抓取日志的話對性能會有影響,因此可以自己配置。一般在開發(fā)環(huán)境,該值設置為1,生產環(huán)境視情況而定。

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

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

        隨便調用一個微服務

        然后我們可以看到相關的跟蹤日志

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

        二、搭建ELK

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

        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索引。

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

        4、使用kibana

        啟動elasticsearch、head、kibana、logstash

        創(chuàng)建索引applog

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

        最后點擊create即可

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

        三、logback配置

        spring-cloud、logstash都是支持logback的,因此需要為微服務配置好相應的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,我們主要配置這幾樣東西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字段中。

        三、查詢日志

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

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

        這里會輸出一行日志,內容為myService-provider userController,通過網(wǎng)關調用

        eclipse控制臺輸出日志

        在kibana中搜索日志

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

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

        瀏覽 39
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            丁香五月成人网 | 久久性生活视频 | 边打电话边被躁在线播放 | 免费在线观看黄色片 | 国产午夜精品在线观看 | 性爱在线观看视频 | 色99久久 | 国产伊人手机在线视频 | 欧美操逼一级精 | 夜玩亲女裸睡的小妍h上架感言 |