skywalking日志收集

这篇具有很好参考价值的文章主要介绍了skywalking日志收集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、介绍

在上一篇文章skywalking全链路追踪中我们介绍了在微服务项目中使用skywalking进行服务调用链路的追踪。

本文在全链路追踪的基础上,我们介绍如何使用skywalking对一次调用链路上进行日志收集

skywalking日志收集方式有两种:

  • 日志文件中收集

    在微服务项目中,每一个微服务所产生的日志均会保存到本地日志文件远程文件服务器中,skywalking提供FilebeatFluentdFluent-bit三种方式通过kafkahttp读取日志文件并将其按照调用链路进行收集。

    • Filebeat

      此方式应用于本地日志文件场景。由使用kafka进行日志收集,需要在skywalking客户端的配置文件agent.conf和服务端的配置文件application.yml中对kafka-fetcher进行配置,并在skywalking客户端添加配置文件filebeat.yml

    • Fluentd

      此方式应用于本地日志文件场景。使用kafka进行日志收集,需要在skywalking客户端的配置文件agent.conf和服务端的配置文件application.yml中对kafka-fetcher进行配置,并在skywalking客户端添加配置文件fluentd.conf

    • Fluent-bit

      此方式应用于远程文件服务器场景。使用http进行日志收集,需要在skywalking服务端的配置文件application.yml中对corereceiver-sharing-serverrestHost:restPort项进行配置。并添加配置文件fluent-bit.conf

  • skywalking客户端收集

    在微服务项目中,每一个微服务都会有一个日志配置文件用于规范日志的输出格式。skywalking客户端提供了工具将输出的日志通过消息队列(如kafka)http发送到skywalking服务端。此方式只需要对日志配置文件进行修改。

    skywalking支持的日志框架有:log4jlog4j2logback

我们本次的日志收集演示采用从skywalking客户端收集的方式,并使用springboot推荐的日志框架logback

二、添加依赖

在各个微服务的pom.xml中添加以下依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.9.0</version>
</dependency>

三、修改日志配置

在我们添加的依赖apm-toolkit-logback-1.x中,包含了大量适配于logback与skywalking的AppenderEncoder以及Layout实现类。下面我们需要对日志配置文件进行修改。

在微服务系统的一次请求调用链中,可能出现多个服务之间相互调用的场景(如商品服务调用订单服务,订单服务调用支付服务)。而这些服务显然处于不同的进程甚至不同的服务器,如何确定一个请求的调用链路中调用了哪些服务呢?

1. 添加链路表示traceId

skywalking使用traceId对调用链路进行标识,traceId的格式为随机字符,如果没有请求链路,则输出日志中的traceIdN/A。如果以羊肉串类比,多个羊肉被同一个棍子串起来,羊肉就类比为链路上的多个服务,棍子就类比为traceId

修改logback.xml日志配置文件

  • 在日志的输出格式定义中添加%tid,并修改对应的Layout实现类为TraceIdPatternLogbackLayout

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <!-- 日志输出格式 -->
        <property name="log.pattern"
                  value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %boldMagenta([%tid]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
    
        <!-- 控制台输出 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                    <Pattern>${log.pattern}</Pattern>
                </layout>
            </encoder>
        </appender>
    
        <root level="info">
            <appender-ref ref="console"/>
        </root>
    </configuration>
    
  • 没有请求链路的系统日志

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

  • 当我们向接口发送请求时

    请求如下:

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

    日志如下,从输出的日志可以看到,该请求的调用链为8012端口的商品服务调用8021端口的订单服务8021端口的订单服务调用8032端口的支付服务,在该调用链上各个服务的traceId相同。

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

    进入skywalking服务端的页面,我们查看该调用链路,该链路的traceId与日志中打印的traceId一致。

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

2. 添加链路上下文

由于traceId仅表示为随机字符,可读性较差。幸运的是,skywalking也认识到这一点,于是又引入了一个新的概念:链路上下文SW_CTX,所谓链路上下文,其实与traceId的作用相同,但他的好处是可读性强,其格式为SW_CTX:[服务名, 实例名, traceId, traceSegmentId, spanId]

同样的,如果没有请求链路,则输出日志中的链路上下文SW_CTX:[服务名, 实例名, N/A, N/A, -1]

修改logback.xml日志配置文件

  • 将日志的输出格式定义中表示traceId%tid修改为%sw_ctx即可

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <!-- 日志输出格式 -->
        <property name="log.pattern"
                  value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %boldMagenta([%sw_ctx]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
    
        <!-- 控制台输出 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                    <Pattern>${log.pattern}</Pattern>
                </layout>
            </encoder>
        </appender>
    
        <root level="info">
            <appender-ref ref="console"/>
        </root>
    </configuration>
    
  • 重启项目,查看没有请求链路的系统日志

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

  • 当我们向接口发送请求时

    请求如下

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

    日志如下,由于打印出的上下文日志包含信息量过长,只截取其部分日志。

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

    进入skywalking服务端的页面,我们查看该调用链路,该调用链路同样是商品服务的8011端口服务调用订单服务的8022端口服务,且该调用链的traceId与日志中打印的traceId一致。

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

3. 异步日志

skywalking客户端还支持日志的异步打印,就是说业务代码与日志打印采用不同的线程执行,提高接口响应速度。

修改logback.xml日志配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 日志输出格式 -->
    <property name="log.pattern"
              value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %boldMagenta([%tid]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${log.pattern}</Pattern>
            </layout>
        </encoder>
    </appender>
    
    <!-- 异步输出 -->
    <appender name="console-async" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="console"/>
    </appender>

    <root level="info">
        <appender-ref ref="console-async"/>
    </root>
</configuration>

四、收集链路日志

skywalking客户端通过gRpc将输出的日志发送给skywalking服务端,skywalking服务端根据traceId去分析日志,然后通过skywalking服务端页面可以查看指定调用链路中所有服务所输出的日志。

  • 修改logback.xml日志配置文件,只需要添加GRPCLogClientAppender即可

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
        <!-- 日志输出格式 -->
        <property name="log.pattern"
                  value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %boldMagenta([%tid]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
    
        <!-- 控制台输出 -->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                    <Pattern>${log.pattern}</Pattern>
                </layout>
            </encoder>
        </appender>
    	<!-- 异步输出 -->
        <appender name="console-async" class="ch.qos.logback.classic.AsyncAppender">
            <discardingThreshold>0</discardingThreshold>
            <queueSize>1024</queueSize>
            <neverBlock>true</neverBlock>
            <appender-ref ref="console"/>
        </appender>
    	<!-- 使用gRpc将日志发送到skywalking服务端 -->
        <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
            <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                    <Pattern>${log.pattern}</Pattern>
                </layout>
            </encoder>
        </appender>
    
        <root level="info">
            <appender-ref ref="console-async"/>
            <appender-ref ref="grpc-log"/>
        </root>
    </configuration>
    
  • 重启项目,并向接口发送请求

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

  • 查看输出的日志

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

  • 进入skywalking页面查看

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java

  • 查看该调用链路上各服务的日志,我们以商品服务的日志为例,在调用链路中电击商品服务,可查看对应的实例详情,再点击相关的日志,即可查看商品服务该实例所产生的日志列表,该列表中每一行即为代码中打印的一行日志,点击可查看该行完整的日志信息。

    skywalking日志收集,skywalking,微服务,JAVA,skywalking,微服务,java


到这里,skywalking的日志收集我们就介绍完了。



纸上得来终觉浅,绝知此事要躬行。

————————我是万万岁,我们下期再见————————文章来源地址https://www.toymoban.com/news/detail-633346.html

到了这里,关于skywalking日志收集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • skywalking agent监控java服务

    一、前言 skywalking agent可以监控的服务类型有多种,python、go、java、nodejs服务等都可以监控,现在通过java服务来演示skywalking agent的使用,并且是使用容器的方式实现 二、部署skywalking agent监控 需要注意,skywalking agent服务也是需要使用java服务的,所以需要使用跟java服务对应的

    2024年02月11日
    浏览(43)
  • k8s部署服务接入skywalking之java agent使用(基于sideCar模式)

    java应用在接入skywalking的时候,需要在启动参数指定 java agent的jar包 -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent/skywalking-agent.jar 目前不打算将agent相关文件制作到java服务镜像里面 希望通过 挂载 的方式将agent包提供出来供java服务使用 决定采用 基于sideCar 模式

    2024年02月07日
    浏览(52)
  • Java 项目 服务器 日志配置

    最近 在搞一个0-1的项目 就想把 服务器日志配置 记录一下 我们使用的是 单体微服务项目 首先你需要一个xml 然后就是 pom文件里面添加上对应的依赖 然后 yml 里面 然后再服务器对应的创建 存储日志的文件 logs  

    2024年02月07日
    浏览(34)
  • 你居然还去服务器上捞日志,搭个日志收集系统难道不香么!

    经典的ELK架构或现被称为Elastic Stack。Elastic Stack架构为Elasticsearch + Logstash + Kibana + Beats的组合: Beats负责日志的采集 Logstash负责做日志的聚合和处理 ES作为日志的存储和搜索系统 Kibana作为可视化前端展示 整体架构图: 容器化场景中,尤其k8s环境,用户经常使用EFK架构。F代表

    2024年02月07日
    浏览(60)
  • SkyWalking链路追踪-Collector(收集器)

    SkyWalking的Collector(收集器)是SkyWalking链路追踪的核心组件之一。它负责接收来自各个Agent的追踪数据,并将其存储到数据存储器(如数据库)中。具体来说,Collector提供了一个统一的接口,用于接收和处理从Agent发送过来的数据。 数据接收:Collector提供接口和服务来接收来自

    2024年02月15日
    浏览(42)
  • 将Windows的系统日志自动收集并且转发到syslog服务器,百试百灵

    **使用*Evtsys工具,他会自动收集windows系统日志,然后发送到syslog服务器,并且不乱码 下载链接:百度云永久链接 链接: https://pan.baidu.com/s/1eWiK9D1IYDcKrXnLRMQQYw 提取码: 1234 安装环境:windows系统 安装步骤:C盘下新建ELK文件,将下载的文件解压到该文件夹: 使用“管理员权限

    2024年04月14日
    浏览(41)
  • Centos7 安装Graylog 5.0收集网络设备运行日志+卸载GrayLog服务

    对于日志监控业界常用的有ELK、Loki、Graylog等系统,最近在做技术选型时,对比了各个系统的情况,Graylog的一体化方案很符合现有需求。Graylog算是轻量级的ELK,也有很多企业在使用Graylog查看日志和监控业务日志。Graylog中文资料相对较少,在技术选型和开发过程中对资料进行

    2024年02月06日
    浏览(89)
  • java 分布式微服务配置统一的日志输出包括logstash

    在springcloud分布式微服务中,每个微服务都要配置一个日志输出文件,当微服务多起来的时候,日志输出有变动就要一个一个微服务去修改,这样使工作量增加,变得很麻烦,还有可能出现错误。 对日志文件进行统一的配置处理是个不错的选择。 首先在微服务中有一个基础的

    2024年02月12日
    浏览(49)
  • ubuntu服务器上java和tomcat等服务的日志时间不正确

    新生产环境部署的java和tomcat服务的日志时间不正确。与正确时间差了8个小时。影响正常的业务。 1、服务日志时间和服务器时间差了8个小时,联想到是时区的问题。 2、查看ubuntu系统的时区设置: UTC时间就是世界协调时间(Coordinated Universal Time) 时间。 1、把UTC时间改成北京时间

    2024年02月05日
    浏览(57)
  • Spring Cloud【SkyWalking日志、SkyWalking告警 、Skywalking自定义告警规则】(十五)

      目录 分布式请求链路追踪_SkyWalking日志 分布式请求链路追踪_SkyWalking告警 

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包