SkyWalking8.1.0使用及安装记录

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-31 08:25   11   0

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脚本中的度量名,目前只支持longdoubleint类型。详见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,

这是我最近收集的所有资料,其中说的不对的请留言,不懂的也可以进行留言,我看到会进行回复

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP