调用链总体介绍及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安装
-
下载地址:https://skywalking.apache.org/downloads/
注意选择合适版本,本文用的是v8.7.0 for es6.tar
-
更改配置
将存储方式由默认的“h2”改为“elasticsearch6(skywalking的安装包必须是for es6,否则会有报错)。SW_NAMESPACE必须与es的cluster_name相对应;SW_STORAGE_ES_CLUSTER_NODES中可以用逗号隔开多个地址。如下图所示:
-
启动
通过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文件夹下。
-
修改探针中的应用名等配置项
-
修改配置文件./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的值来指定服务名。
注:探针配置 > 系统配置 >系统环境变量 > 配置文件中的值
-
-
使用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
-
对于springboot项目,如果是直接使用java -jar启动的话:
java -javaagent:/usr/local/skywalking/apache-skywalking-apm- bin/agent_boot/skywalking-agent.jar -Dserver.port=8082 -jar skywalking_springboot.jar &
三. 追踪相关
-
获取追踪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(); }
四. 过滤指定端点
-
将可选插件移动到插件包下:将agent中的 /agent/optional-plugins/apm-trace-ignore-plugin-8.7.0.jar 插件拷贝到
plugins目录中。
-
启动时添加参数:
##/exclude为要过滤掉的方法 #支持AntPath表达式: #/path/* , /path/** , /path/? #? 匹配任何单字符 #* 匹配0或者任意数量的字符 #** 匹配0或者更多的目录 -Dskywalking.trace.ignore_path=/exclude
五. 告警功能
-
默认的告警规则配置文件位于./config/alarm-settings.yml
规则中的参数属性如下:
属性 含义 metrics-name oal脚本中的度量名称 threshold 阈值,与metrics-name和下面的比较符号相匹配 op 比较操作符,可以设定>,<,= period 多久检查一次当前的指标数据是否符合告警规则,单位分钟 count 达到多少次后,发送告警消息 silence-period 在多久之内,忽略相同的告警消息 message 告警消息内容 include-names 本规则告警生效的服务列表 -
文件中webhooks可以配置告警产生时的调用地址。产生告警时会调用webhook接口,该接口必须是Post类型,同时接口参数使用RequestBody。
六. 日志功能
-
添加maven依赖:
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.7.0</version> </dependency>
-
在日志的配置文件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>
-
在./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://www.jianshu.com/p/b5c41fa33264;https://blog.csdn.net/IUNIQUE/article/details/120844190