Fork me on GitHub

调用链总体介绍及skywalking相关内容总结

微服务调用链介绍

在微服务架构下,调用链跟踪包括前端到后端的调用链、单个服务内部方法之间的调用链、微服务之间的调用链、应用服务和数据库之间的调用链、应用服务和第三方服务中间的调用链,例如Redis,MQ。
调用链跟踪的作用有:定位多个微服务调用故障时哪个是故障点、性能分析、SQL分析、方法或服务调用合理性分析、调用逻辑和数据流分析。

常用调用链选型:
Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

类别 Zipkin Pinpoint SkyWalking CAT
实现方式 拦截请求,发送(HTTP,mq)数据至zipkin服务 java探针,字节码增强 java探针,字节码增强 代码埋点(拦截器,注解,过滤器等
接入方式 基于linkerd或者sleuth方式,引入配置即可 javaagent字节码 javaagent字节码 代码侵入
agent到collector的协议 http,MQ thrift gRPC http/tcp
OpenTracing × ×
颗粒度 接口级 方法级 方法级 代码级
全局调用统计 ×
traceid查询 × ×
报警 ×
JVM监控 × ×
健壮度 ** ***** **** *****
数据存储 ES,mysql,Cassandra,内存 Hbase ES,H2等 mysql,hdfs

参考文档:https://blog.csdn.net/u011177064/article/details/104383133

https://blog.csdn.net/weixin_45490875/article/details/98473180

本文主要介绍skywalking。

参考文档:https://www.cnblogs.com/cjsblog/p/14075486.html

一. skywalking安装

  1. 下载地址:https://skywalking.apache.org/downloads/

    注意选择合适版本,本文用的是v8.7.0 for es6.tar

  2. 更改配置

    将存储方式由默认的“h2”改为“elasticsearch6(skywalking的安装包必须是for es6,否则会有报错)。SW_NAMESPACE必须与es的cluster_name相对应;SW_STORAGE_ES_CLUSTER_NODES中可以用逗号隔开多个地址。如下图所示:

  3. 启动

    通过bin/oapService.sh启动Backend后端服务

    通过bin/webappService.sh启动UI程序(可以通过修改webapp/webapp.yml,更改端口)

    也可以通过bin/startup.sh可以同时启动backend和ui。通过http://ip:port访问Skywalking的可视化页面

二. agent的使用

java的agent技术会通过虚拟机(VM)接口在运行期更改代码,从而在不修改代码的情况下,对java应用上使用到的组件进行动态监控,获取运行数据发送到OAP上进行统计和存储。

Agent探针所有的文件在Skywalking的agent文件夹下。

  1. 修改探针中的应用名等配置项

    • 修改配置文件./agent/config/agent.config中的agent.service_name=$

    • 通过系统配置 -Dskywalking.agent.service_name、-Dskywalking.collector.backend_service

      java -jar -javaagent:./agent/skywalking-agent.jar -Dskywalking.agent.service_name=my_service -Dskywalking.collector.backend_service=127.0.0.1:11800 -Duser.timezone=Asia/Shanghai -Xms1024M -Xmx1024M -XX:PermSize=512M -XX:MaxPermSize=1024M -XX:+HeapDumpOnOutOfMemoryError -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC my_service.jar
      
    • 通过探针配置

      -javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]
      ##如下:
      -javaagent:/path/to/skywalking-agent.jar=agent.service_name=my_service
      #如果配置中包含分隔符( , 或者 = ) , 就必须使用引号包裹起来
      -javaagent:/path/to/skywalking-agent.jar=agent.ignore_suffix='.jpg,.jpeg'
      
    • 通过系统环境变量

      由于agent.service_name配置项如下所示:

      # The service name in UI 
      agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
      

      可以在环境变量中设置SW_AGENT_NAME的值来指定服务名。

    注:探针配置 > 系统配置 >系统环境变量 > 配置文件中的值

  2. 使用Tomcat启动应用服务,则需要修改/apache-tomcat-8.5.47/bin/catalina.sh文件,在文件顶部添加:

    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/skywalking/apache- skywalking-apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS
    
  3. 对于springboot项目,如果是直接使用java -jar启动的话:

    java -javaagent:/usr/local/skywalking/apache-skywalking-apm- bin/agent_boot/skywalking-agent.jar -Dserver.port=8082 -jar skywalking_springboot.jar &
    

三. 追踪相关

  1. 获取追踪id

    添加maven依赖:

    <dependency>
    			<groupId>org.apache.skywalking</groupId>
    			<artifactId>apm-toolkit-trace</artifactId>
    			<version>8.7.0</version>
    </dependency>
    

    具体方法为TraceContext.traceId();

    public String getTraceId(){ 
        //使当前链路报错,并且提示报错信息 
        ActiveSpan.error(new RuntimeException("Test-Error-Throwable")); 
        //打印info信息 
        ActiveSpan.info("Test-Info-Msg"); 
        //打印debug信息 
        ActiveSpan.debug("Test-debug-Msg"); 
        return TraceContext.traceId(); 
    }
    

四. 过滤指定端点

  1. 将可选插件移动到插件包下:将agent中的 /agent/optional-plugins/apm-trace-ignore-plugin-8.7.0.jar 插件拷贝到

    plugins目录中。

  2. 启动时添加参数:

    ##/exclude为要过滤掉的方法
    #支持AntPath表达式:
    #/path/* , /path/** , /path/?
    #? 匹配任何单字符
    #* 匹配0或者任意数量的字符
    #** 匹配0或者更多的目录
    -Dskywalking.trace.ignore_path=/exclude
    

五. 告警功能

  1. 默认的告警规则配置文件位于./config/alarm-settings.yml

    规则中的参数属性如下:

    属性 含义
    metrics-name oal脚本中的度量名称
    threshold 阈值,与metrics-name和下面的比较符号相匹配
    op 比较操作符,可以设定>,<,=
    period 多久检查一次当前的指标数据是否符合告警规则,单位分钟
    count 达到多少次后,发送告警消息
    silence-period 在多久之内,忽略相同的告警消息
    message 告警消息内容
    include-names 本规则告警生效的服务列表
  2. 文件中webhooks可以配置告警产生时的调用地址。产生告警时会调用webhook接口,该接口必须是Post类型,同时接口参数使用RequestBody。

六. 日志功能

  1. 添加maven依赖:

    <dependency>
    			<groupId>org.apache.skywalking</groupId>
    			<artifactId>apm-toolkit-logback-1.x</artifactId>
    			<version>8.7.0</version>
    </dependency>
    
  2. 在日志的配置文件logback-spring.xml中加入输出日志到skywalking的配置。其中的[%tid]表示追踪id

    <appender name="skywalkinglog" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
    		<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符
    			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern>-->
    			<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
    				<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
    			</layout>
    		</encoder>
    	</appender>
    
    <!-- 日志输出级别 -->
    	<root level="INFO">
    		<appender-ref ref="STDOUT" />
    		<appender-ref ref="skywalkinglog"/>
    	</root>
    
  3. 在./agent/config/agent.config文件中添加如下内容:

    #skywalking服务器IP
    plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
    plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
    plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
    plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
    

通过以上步骤则可将日志输出到是skywalking ui界面的日志模块。

参考文章:https://skywalking.apache.org/docs/main/v8.7.0/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/

https://www.jianshu.com/p/b5c41fa33264;https://blog.csdn.net/IUNIQUE/article/details/120844190

posted @ 2021-11-05 17:40  ayueC  阅读(737)  评论(0)    收藏  举报