SkyWalking有闹钟更棒转载本文请联系代码综艺圈公众号。前言对于监控系统,人们不可能一直盯着监控板,更多的是通过邮件、短信或微信推送等方式自动提醒,当达到或超过预设的报警指标时,它会自动发送消息提醒,下面说说如何配置SkyWalking闹钟。文中讲告警之前,先给大家演示一下SkyWalking跟踪数据库运行链路,监控数据库指标。支持EFCore操作数据库,可以显示对应的SQL语句和执行时间等信息。1.跟踪数据库请求对于项目来说,直接或间接访问数据库是不可避免的;对于业务数据量比较大或者高并发的场景,很多时候因为数据库操作太慢或者数据没有及时返回,整个系统的体验极差。差,所以系统运行数据库的跟踪监控是必不可少的。下面是SkyWalking对数据库操作的跟踪监控的演示。1.1环境准备SkyWalking环境的搭建这里不再赘述。可以参考之前的文章(分布式/微服务必须要装APM系统,SkyWalking让你不迷路)。1.2项目集成EFCore关于EFCore的使用,之前分享过一篇很详细的文章,可以参考(跟我一起学习NetCore的EFCore实战介绍,一看就会)。集成EFCore后,为了方便演示和查看效果,需要添加API进行访问。这个API只是简单的通过EF访问数据库,如下:注意:这里的项目需要集成SkyWalking,和上一个是一样的,不需要额外处理。1.3运行项目看效果,访问上一步写的GetUser接口,然后查看SkyWalking的记录,如下:可以切换成列表的形式,相对更直观:点击每条图层显示相应的详细信息,比如点击数据库操作相关图层显示具体的SQL语句等信息,如下:更多操作演示,留给小伙伴们自己操作吧。2.报警配置与使用自动报警基本是监控系统的标准配置,下面看看它在SkyWalking中是如何使用的。2.1告警规则配置所谓告警规则,其实就是配置告警条件和巡检周期,根据业务需要进行配置。SkyWalking中告警条件的配置是在后台服务器上进行的,即环境搭建中启动的容器skywalking-oap,见上一篇;由于演示是以Docker形式启动的容器,并没有挂载数据卷,所以我们需要进入对应的容器进行配置,如下:进入容器,在对应的配置目录下执行如下命令进入SkyWalking背景容器;如果不是随容器一起启动,直接进入配置文件目录修改对应文件即可;查看配置规则文件解释和配置规则可以通过catalarm-settings.yml查看文件内容,如下:规则常用指标解释:rulename:规则名称,必须唯一,必须以结尾_规则;metricsname:oal(ObservabilityAnalysisLanguage)script中的指标名称;名称在SkyWalking后端服务中已经定义好,进入容器skywalking-oap后,进入如下目录即可找到。如果想进一步了解oal,可以参考文档:https://github.com/apache/skywalking/blob/master/docs/en/concepts-and-designs/oal.mdincludenames:实体的名称该规则告警生效,如服务名、终端名;exclude-names:将此规则应用于不匹配的实体名称,例如服务名称、终端名称;threshold:阈值,可以是数组,即可以配置多个值;op:运算符,可以设置>、<、=;period:多久检查一次当前指标数据是否符合报警规则;分钟计数:超过阈值条件,达到计数次数,触发报警;silenceperiod:在同一时间段内,在指定的silence时间段内,忽略相同的告警信息;更详细的报警规则可以参考这个地址:https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm。md配置规则文件的简单修改这里挑一个模板规则修改,用于后续演示,如下:#告警规则名称必须唯一,以_ruleservice_sla_rule结尾:#Specifymetrics-namemetrics-name:service_sla#lessthanop:"<"#指定阈值threshold:8000#10分钟检测一个告警规则period:10#触发2条告警规则告警count:2#设置的3分钟时间段有相同告警,不重复alarm.silence-period:3#配置告警消息message:Successfulrateofservice{name}islowerthan80%in2minutesoflast10minutesRule总结:最近2分钟服务成功率低于80%规则检查,如果规则的条件满足时,会通过WebHook、gRPCHook、微信Hook、钉钉Hook等进行消息通知;收到报警数据信息后,可以自行处理该报文。为方便起见,这里使用WebHook进行演示,即报警条件触发后,SkyWalking会调用配置好的WebHook接口,传递相应的报警信息;发送的报警信息SkyWalking后台服务会以Post的形式调用WebHook接口,将报警信息以Json的形式发送到接口,如下:[{"scopeId":1,//scopeID"name":"serviceA",//实体名称//实体ID"id0":"12",//用于标识实体关系中的目标实体ID,如果没有关系则为空"id1":"",//alarm-settings.yml中配置的规则名称"ruleName":"service_resp_time_rule",//触发告警时发送的消息"alarmMessage":"alarmMessagexxxx",//告警的时间戳"startTime":1560524171000},{"scopeId":1,"name":"serviceB","id0":"23","id1":"","ruleName":"service_resp_time_rule","alarmMessage":"alarmMessageyyy","startTime":1560524171000}]知道了发送告警信息的格式后,在写API的时候就必须按照这种格式接收。写告警时调用的API如下:这只是一个普通的API。关于发送邮件的配置,之前有一篇文章分享过(来,Consul服务发现入口(一眼就能看出来的那种))。配置WebHook地址由于SkyWalking环境搭建在我的云服务器上,本地电脑没有配置外网访问,所以只能发布API到云服务器,让SkyWalking后台服务调用告警接口,所以这里就是在规则配置文件最下面配置WebHook调用的接口地址即可;步骤如下:修改alarm-settings.yml文件,在文件末尾配置多个WebHook地址,如下:配置完告警规则和WebHook地址后,重启容器,如下:dockerstopskywalking-oapdockerstartskywalking-oap2.3运行看效果启动项目,然后访问之前写好的界面。接口出现异常,所以每次都会报错。错误率必须低于设定规则的80%,过一段时间就会产生告警信息;在界面上也可以看到报警信息,如下:因为我们写的WebHook接口在触发报警的时候会被调用,而我们已经发送了报警信息的邮件,所以我们会收到相应的报警邮件demo代码:https://gitee.com/CodeZoe/microservies-demo/tree/main/SkyWalkingDemo/SkyWalkingDataDemo总结了这么多,告警的配置和使用就这么多了。如果有其他配置需求,可以参考官网,使用方法类似;一些使用心得稍后记录;
