日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

解決SpringCloud 分布式日志采集的完整流程!

 昵稱10087950 2022-06-16 發(fā)布于江蘇

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

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

一、sleuth

第一步:sleuth管理端

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

<dependency>  
        <groupId>io.zipkin.java</groupId>  
        <artifactId>zipkin-autoconfigure-ui</artifactId>  
        <scope>runtime</scope>  
    </dependency> 
      
    <dependency>  
        <groupId>io.zipkin.java</groupId>  
        <artifactId>zipkin-server</artifactId>  
    </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.classargs);  
    }  
 
}

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

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

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

引入依賴

<dependency>  
         <groupId>org.springframework.cloud</groupId>  
         <artifactId>spring-cloud-starter-sleuth</artifactId>  
     </dependency>  
     
     <dependency>  
         <groupId>org.springframework.cloud</groupId>  
         <artifactId>spring-cloud-sleuth-zipkin</artifactId>  
     </dependency>

加入如下配置

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

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

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

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

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

圖片

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

圖片

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

圖片

二、搭建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的,因此需要為微服務配置好相應的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的例子

<?xml version="1.0" encoding="UTF-8"?>
<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>true</withJansi>
  <encoder>
           <pattern>${CONSOLE_LOG_PATTERN}</pattern>
     <charset>utf8</charset>
     </encoder>
    </appender>      
    
    <appender name="logstash"
     class="net.logstash.logback.appender.LogstashTcpSocketAppender">

     <destination>192.168.160.66:4560</destination> 
     <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
      <providers>
       <timestamp>
        <timeZone>UTC</timeZone>
       </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.log</File>
   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
     <FileNamePattern>main.%d{yyyy-MM-dd}.log</FileNamePattern>
     <maxHistory>30</maxHistory>         
   </rollingPolicy>
   <encoder>
     <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
   </encoder>        
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
     <level>DEBUG</level>
   </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)罩?/h3>

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

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

圖片

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

圖片

eclipse控制臺輸出日志

圖片

在kibana中搜索日志

圖片

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

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

ps:如果您覺文章有用,動動小手點個在看,點個再走吧

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多