分布式日志方案

作者: 苏打柠檬水 | 来源:发表于2017-08-25 18:09 被阅读58次

    我司项目是分布式系统,但没有分布式日志系统。每次排错查看日志极其痛苦,打开N个终端,shell敲的起飞,效率极低,果断引入ELK。

    项目用的日志组件是logback(slf4j的实现),引入logstash-logback-encoder实现输出JSON格式的日志

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

    把logback的配置里的encoder替换为

    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <includeCallerData>true</includeCallerData>
    </encoder>
    

    成功的输出JSON格式的日志文件

    运维同学搭好ELK环境,把日志导入到elasticsearch中,可以愉快的使用Kibana来查看日志了。

    这时问题又来了,如何查看一次请求的日志,这样可以很好分析一次请求上下文。一直在跟踪Spring的项目,Spring Cloud 中分布式跟踪Spring Cloud Sleuth项目,仔细研究了下发现可以把zipkin系统引进来,引进zipkin.brave

            <dependency>
                <groupId>io.zipkin.brave</groupId>
                <artifactId>brave</artifactId>
                <version>4.4.0</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.brave</groupId>
                <artifactId>brave-spring-beans</artifactId>
                <version>4.4.0</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.brave</groupId>
                <artifactId>brave-context-slf4j</artifactId>
                <version>4.4.0</version>
            </dependency>
            <dependency>
                <groupId>io.zipkin.brave</groupId>
                <artifactId>brave-instrumentation-spring-webmvc</artifactId>
                <version>4.4.0</version>
            </dependency>
    

    我司是基于Dubbo构架分布式系统,brave没有对应的实现,需要基于Dubbo的Filter来实现传递TraceId

    通过过滤traceId,就很方便的实现了查看一个请求的上下文的日志,启用zipkin服务的话还可以很清晰的一个请求每次跨服务调用的耗时,还可查看调用MySQL的耗时

    相关文章

      网友评论

        本文标题:分布式日志方案

        本文链接:https://www.haomeiwen.com/subject/xoxpdxtx.html