在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显
skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
官网:http://skywalking.apache.org/
下载:http://skywalking.apache.org/downloads/
Github:https://github.com/apache/skywalking
文档:https://skywalking.apache.org/docs/main/v9.1.0/readme/
中文文档: https://skyapm.github.io/document-cn-translation-of-skywalking/
版本: v9.2.0
采集数据——》传输数据——》存储数据——》分析数据——》监控报警
接受探针发送过来的数据,进行度量分析,调用链分析和存储。后端主要分为两部分:
SkyWalking APM
Java Agent
1)先使用默认的H2数据库存储,不用修改配置
config/application.yml
2)启动脚本bin/startup.sh
➜ apache-skywalking-apm-bin ./bin/startup.sh
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!
日志信息存储在logs目录
启动成功后会启动 skywalking-oap-server 和 skywalking-web-ui
skywalking-oap-server服务启动后会暴露端口,修改端口可以修改config/applicaiton.yml
skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml
#!/bin/sh
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot-skywalking-demo #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=-javaagent:/root/skywalking-agent/skywalking-agent.jar
java $JAVA_AGENT -jar springboot-skywalking-demo-0.0.1-SNAPSHOT.jar #jar启动
java -javaagent:/root/skywalking-agent/skywalking-agent.jar
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
-DSW_AGENT_NAME=springboot-skywalking-demo -jar springboot-skywalking-demo-0.0.1-SNAPSHOT.jar
-javaagent:/root/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.service_name=springboot-skywalking-demo
-Dskywalking.collector.backend_service=127.0.0.1:11800
使用skywalking.+配置文件中的配置名作为系统配置项来进行覆盖。 javaagent参数配置方式优先级更高
-javaagent:/root/skywalking-agent/skywalking-agent.jar
-DSW_AGENT_NAME=springboot-skywalking-demo
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
解决方案:拷贝agent/optional-plugins目录下的gateway插件和webflux插件到agent/plugins目录
https://skywalking.apache.org/docs/skywalking-java/latest/en/setup/service-agent/java-agent/application-toolkit-logback-1.x/
引入依赖
org.apache.skywalking apm-toolkit-logback-1.x 8.11.0
微服务添加logback-spring.xml文件,并配置 %tid 占位符
%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n %d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n
Skywalking通过grpc上报日志 (需要v8.4.0以上)
gRPC报告程序可以将收集到的日志转发到SkyWalking OAP服务器上
兼容ELK 配置 Logstash
skywalking告警的核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中,告警规则的定义分为三部分:
为了方便,skywalking发行版中提供了默认的alarm-setting.yml文件,包括一些规则,每个规则有英文注释,可以根据注释得知每个规则的作用:
只要我们的服务请求符合alarm-setting.yml文件中的某一条规则就会触发告警。
比如service_resp_time_rule规则:
该规则表示服务{name}的响应时间在最近10分钟的3分钟内超过1000ms
demo
@RequestMapping("/notify")public String notify(@RequestBody Object obj) {//TODO 告警信息,给技术负责人发短信,钉钉消息,邮件,微信通知等System.err.println(obj.toString());return "notify successfully";}
storage:#选择使用mysql 默认使用h2,不会持久化,重启skyWalking之前的数据会丢失selector: ${SW_STORAGE:mysql}#使用mysql作为持久化存储的仓库mysql:properties:#数据库连接地址 创建swtest数据库jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://1ocalhost:3306/swtest"}#用户名dataSource.user: ${SW_DATA_SOURCE_USER:root}#密码dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
➜ apache-skywalking-apm-bin ls oap-libs/mysql-connector-java-8.0.19.jar
oap-libs/mysql-connector-java-8.0.19.jar
注意:需要添加mysql数据驱动包,因为在lib目录下是没有mysql数据驱动包的,所以修改完配置启动是会报错,启动失败的。
4. 启动Skywalking 查看swtest库生成的表
org.apache.skywalking apm-toolkit-trace 8.11.0
@RequestMapping("/list")
public List list(){//TraceContext可以绑定key-valueTraceContext.putCorrelation("name", "fox");Optional op = TraceContext.getCorrelation("name");log.info("name = {} ", op.get());//获取追踪的traceIdString traceId = TraceContext.traceId();log.info("traceId = {} ", traceId);return userService.list();
}
如果一个业务方法想在ui界面的追踪链路上显示出来,只需要在业务方法上加上@Trace注解即可
加入@Tags或@Tag为追踪链路增加其他额外的信息,比如记录参数和返回信息
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Trace@Tag(key = "list", value = "returnedObj")@Overridepublic List list() {return userMapper.list();}@Trace@Tags({@Tag(key = "param", value = "arg[0]"),@Tag(key = "user", value = "returnedObj")})@Overridepublic User getById(Integer id) {return userMapper.getById(id);}
}
Skywalking集群是将skywalking oap作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就能进行追踪。
搭建一个skywalking oap集群需要:
(1)至少一个Nacos(也可以是nacos集群)
(2)至少一个ElasticSearch(也可以是es集群)
(3)至少2个skywalking oap服务;
(4)至少1个UI(UI也可以集群多个,用Nginx代理统一入口)
cluster:selector: ${SW_CLUSTER:nacos}nacos:serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}# Nacos Configuration namespacenamespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}# Nacos auth usernameusername: ${SW_CLUSTER_NACOS_USERNAME:""}password: ${SW_CLUSTER_NACOS_PASSWORD:""}# Nacos auth accessKeyaccessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}internalComHost: ${SW_CLUSTER_INTERNAL_COM_HOST:""}internalComPort: ${SW_CLUSTER_INTERNAL_COM_PORT:-1}
-Dskywalking.collector.backend_service=ip1:11800,ip2:11800
上一篇:汉字风格迁移篇----EasyFont:一个基于风格学习的系统,可以轻松构建大规模手写字体
下一篇:相似度系列-6:单维度方法:Evaluating Coherence in Dialogue Systems using Entailment