|
1 SkyWalking是什么
SkyWalking是一个对微服务之间调用链路的追踪,
现在由于微服务的发展,服务之间的划分越来越细化,导致服务之间的调用层级越来越多,当感知到服务的某个接口调用失败时,由于相关服务分布在多台服务器上,无法及时有效的定位问题出现在哪里,这时就是APM系统的勇武之地了,
2:为什么选用SkyWalking
当然APM系统并不只有SkyWalking一个框架,相关的框架还有Zipkin,PinPoint,CAT等,别的框架不做过多叙述,我选择这个框架的最主要原因有以下几点
(1)对项目影响较小,下面时网友对几个框架做的压测实验

(2)追踪面广,项目之间的追踪要求项目启动时加入SkyWalking的监控,而对于相关的Dubbo,KafKa,ES,Redis,Mongodb,Postgresql,Mysql等等都可以监听到,这些可以从agent文件夹下的plugins中可以看到
(3)支持自己调用API插入SkyWalking的调用链中用作额外的记录
(4)支持自动预警
3:SkyWalking怎么用
在从官网下载SkyWalking安装包后进行解压后,目录结构是这样的

需要注意的是,SkyWalking分为Binary Distribution和Binary Distribution for ElasticSearch 7两种,里面有个坑就是如果想连上ES7就必须下载Binary Distribution for ElasticSearch 7,不然会出现 org.apache.skywalking.oap.server.starter.OAPServerBootstrap - 57 [main] ERROR [] - storage module no provider exists. org.apache.skywalking.oap.server.library.module.ProviderNotFoundException: storage module no provider exists.
这个的原因就是因为你下载的安装包不对,
SkyWalking分为三个部分,
agent其实会对每个服务的请求进行拦截,所以所有服务所在的服务器上都需要一份agent文件夹,放在服务器的哪个位置就比较随意了,放在哪里都行,其中需要修改的配置在config目录下的agent.config,其中最重要的修改是
collector.backend_service,将它的地址配置成collector所在的服务器ip,端口号尽量不要变(注:多个服务之间以,分割)

其余的配置我并没有进行改变,
Linux使用时在项目的启动脚本里加上
-javaagent:/data/service/agent/skywalking-agent.jar -Dskywalking.agent.service_name=applicationname
-javaagent:后面跟的是agent在服务器上所在的地址,
-Dskywalking.agent.service_name后面跟的是项目的名称
本地的话在IDEA里配置项上加上
-javaagent:F:/git/apache-skywalking-apm-bin/agent/skywalking-agent.jar=agent.service_name=applicationname

然后是webapp是SkyWalking的可视化界面,一般我习惯放SkyWalking文件夹里不动,collector一份他就一份,同样他也有一个配置文件叫webapp.yml,其中最重要的修改是
listOfServers,将他的配置也改成collector所在的服务器ip和端口号(注:多个服务之间以,分割)
port,可改可不改,修改它的最主要原因是因为它默认8080会和服务器的tomcat端口号冲突,访问地址是放置服务器的ip和端口

然后就是最重要的collector,collector处于负载均衡考虑可以布置多份,是一个独立的服务,与项目无关,可以放在单独的服务器中,他的主要配置文件是config下的application.yml
主要修改的有一下几个配置
(1)cluster注册中心,支持很多种,我这里由于公司项目有现成的,所以选择的是nacos

(2)core核心参数,
gRPCHost和gRPCPort是供agent请求的接口,需要与agent配置的一致,一般写collector所在服务的ip
restHost和restPort是供webapp请求的接口,需要与webapp配置的一致,一般写collector所在服务的ip
其余的就按需调整吧!

(3)storage(存储),skywalking支持多种存储,但是从官网上的安装包也看得出来比较推荐es,在框架Demo阶段尝试初期,我先选用的是mysql,但是skywalking对mysql版本有要求,版本过低时会报skywalking创建表时索引的长度超长

(4)agent-analyzer(请求拦截设置)
sampleRate采样率,想百分百收集则配置10000,
slowDBAccessThreshold数据库慢查询,单位时ms

都配置完毕后项目的bin文件夹下有startup批量脚本,可以对collector和webop进行启动
3 skywalking预警, 配置文件是config的alarm-settings.yml,目前SkyWalking支持的预警类型包括
(1):service_resp_time(服务响应时间)
(2):service_sla(服务响应成功率)
(3):service_percentile(服务top95)
(4):service_instance_resp_time(服务具体实例响应时间)
(5):database_access_resp_time(服务连接数据库响应时间)
(6):endpoint_relation_resp_time(服务间响应时间)
其中每个预警都可以设置监听的服务和不想监听的服务,甚至是不想监听的路由,但是提醒只能是英文的,参数的解释是
- Rule name:规则名称,也是在告警信息中显示的唯一名称。必须以
_rule结尾,前缀可自定义 - Metrics name:度量名称,取值为oal脚本中的度量名,目前只支持
long、double和int类型。详见Official OAL script - Include names:该规则作用于哪些实体名称,比如服务名,终端名(可选,默认为全部)
- Exclude names:该规则作不用于哪些实体名称,比如服务名,终端名(可选,默认为空)
- Threshold:阈值
- OP: 操作符,目前支持
>、<、= - Period:多久告警规则需要被核实一下。这是一个时间窗口,与后端部署环境时间相匹配
- Count:在一个Period窗口中,如果values超过Threshold值(按op),达到Count值,需要发送警报
- Silence period:在时间N中触发报警后,在TN -> TN + period这个阶段不告警。 默认情况下,它和Period一样,这意味着相同的告警(在同一个Metrics name拥有相同的Id)在同一个Period内只会触发一次
- message:告警消息
通过设置webhooks:参数来设置报警时的回调地址,调用方式为POST,接口参数需要加上注解@RequestBody,实体类是
/**
* @author fanluhao
* @description:
* @date 2020/9/1420:20
*/
@Data
public class SwAlarmDTO {
private String scopeId;
private String scope;
//服务名称
private String name;
private String id0;
private String id1;
//触发的预警名称
private String ruleName;
//预警消息
private String alarmMessage;
//触发时间
private Long startTime;
}
这里与其他博客不同的是,我这里把除了startTime外的所有参数都设置为了String,只因为有时id0回调时传过来的参数并不是int值,所以改为了Sting,
这是我最近收集的所有资料,其中说的不对的请留言,不懂的也可以进行留言,我看到会进行回复
|