SkyWalking配上告警更优秀

前言

对于监控系统来说,不可能让人一直盯着监控看板,而更多的是以自动提醒的方式,比如邮件、短信或微信推送等,当达到或超出预设的告警指标时,就自动发送消息提醒,下面就来说说如何配置SkyWalking的告警。

正文

在说告警之前呢,给小伙伴先演示一下SkyWalking跟踪数据库操作链路及监控数据库指标,支持EF Core的形式操作数据库,可以显示对应的SQL语句和执行时间等信息。

1. 跟踪数据库请求

对于项目来说,直接或间接访问数据库是避免不了的;对于业务数据量比较大或高并发场景,很多时候会因为数据库操作过慢或不及时返回数据,导致整个系统体验极差,所以对系统操作数据库的跟踪和监控少不了,以下就来演示一下SkyWalking对数据库操作的跟踪和监控。

1.1 环境准备

这里的SkyWalking环境搭建就不重复操作了,可以参考上一篇(分布式/微服务必配APM系统,SkyWalking让你不迷路

1.2 项目集成EF Core

关于EF Core的使用,之前分享过一篇很详细的文章,可参考查阅(跟我一起学.NetCore之EF Core 实战入门,一看就会

集成EF Core之后,为方便演示看效果,得增加一个API进行访问,这个API就是简单的通过EF访问数据库,如下:

a01c27e64fbfe58bd125f938ed7abbef.png

注:这里的项目需要集成SkyWalking,和上一篇一样,不需要做额外处理。

1.3 看效果

运行项目,访问上一步编写的GetUser接口,然后再看SkyWalking的记录情况,如下:

09e91b3fd08b51cba69c8bc0ec0464ad.png

可以切换成列表的形式,看着相对更直观一点:

b7fd4c2612ff394e6a165509bc66c089.png

点击对应每层可显示对应的详细信息,如点击数据库操作相关层,可显示具体的SQL语句及其他信息,如下:

25f7e7b98b7d19f14e5feba2042df299.png

更多操作演示,就留给小伙伴自己操作吧。

2. 告警配置及使用

自动告警基本上是监控系统的标配,接下来看看在SkyWalking中是如何使用的。

2.1 告警规则配置

所谓告警规则其实就是配置的告警条件及检查周期,根据业务需要进行配置。

在SkyWalking中配置告警条件是在后台服务端进行的,即环境搭建中启动的容器skywalking-oap,见上篇文章;

由于演示是采用Docker的形式启动的容器,也没有进行数据卷挂载,所以我们需要进入对应的容器进行配置,如下:

  • 进入容器,并到对应的配置目录

    执行如下命令进入到SkyWalking后台容器;如果不是以容器启动的,直接进到配置文件目录修改对应文件即可;

    docker exec -it skywalking-oap /bin/bash
    e7f5fb4e01fe7733ea43bd62c2c626f5.png
  • 查阅配置规则文件及配置规则解读

    通过cat alarm-settings.yml可以查阅文件内容,如下:

    35b874a70e827444468bfe852242768f.png

    规则常用指标解读

    rule name:规则名称,必须唯一,必须以 _rule结尾;

    metrics name:oal(Observability Analysis Language)脚本中的度量名;名称在SkyWalking后端服务中已经定义,进入容器skywalking-oap之后,进入如下目录就可以找到。

    6722a9aa3dde9ce37e422055032e1c46.png

    如果想更多了解oal,参照文档:https://github.com/apache/skywalking/blob/master/docs/en/concepts-and-designs/oal.md

    include names:本规则告警生效的实体名称,如服务名,终端名;

    exclude-names:将此规则作用于不匹配的实体名称上,如服务名,终端名;

    threshold:阈值,可以是一个数组,即可以配置多个值;

    op:操作符, 可以设定 >, <, =;

    period:多久检查一次当前的指标数据是否符合告警规则;以分钟为单位

    count:超过阈值条件,达到count次数,触发告警;

    silence period:在同一个周期,指定的silence period时间内,忽略相同的告警消息;

    更多告警规则详情,请参照这个地址:https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md

  • 配置规则文件简单修改

    这里挑一个模板规则稍微改一下,用于后续演示,如下:

    # 告警规则名称,必须唯一,以_rule结尾service_sla_rule:# 指定metrics-namemetrics-name: service_sla# 小于op: "<" # 指定阈值threshold: 8000                                                                              # 10分钟检测一次告警规则                                                 period: 10                                                                                   # 触发2次告警规则就告警                   count: 2                                                                                     # 设置的3分钟时间段有相同的告警,不重复告警.silence-period: 3 # 配置告警消息message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutes

    规则概要:服务成功率在过去2分钟内低于80%

2.2 告警API编写

有了规则之后,如何进行自动发送告警信息呢?

这个本质还是SkyWalking根据规则进行检查,如果符合规则条件,就通过WebHook、gRPCHook、WeChat Hook、Dingtalk Hook等方式进行消息通知;接收到告警数据信息之后,可以自行处理消息。这里为了方便,就采用WebHook的方式进行演示,即触发告警条件之后,SkyWalking会调用配置的WebHook 接口,并传递对应的告警信息;

  • 传递的告警信息

    SkyWalking后端服务会以Post的方式调用WebHook的接口,并以Json的形式向接口传递告警信息,如下格式:

    [{"scopeId": 1, // 范围ID"name": "serviceA", //实体名称// 实体ID"id0": "12",  // 用于标识实体关系中的目标实体ID,没有关系就为空 "id1": "",   // 规则名称  alarm-settings.yml中配置的规则名称"ruleName": "service_resp_time_rule",// 触发告警时发送的消息"alarmMessage": "alarmMessage xxxx",// 告警的时间戳"startTime": 1560524171000}, {"scopeId": 1,"name": "serviceB","id0": "23","id1": "","ruleName": "service_resp_time_rule","alarmMessage": "alarmMessage yyy","startTime": 1560524171000}]

    知道传递告警的信息的格式后,写API的时候就得以此格式接收。

  • 编写告警时调用的API,如下:

    87797352a5dfd3e87d919279ff97b896.png

    这里只是一个常规的API,关于发邮件的配置,之前在一篇文章中分享的很详细(来,Consul 服务发现入个门(一看就会的那种)

  • 配置WebHook地址

    由于SkyWalking的环境搭建在了我的云服务器,本地电脑没有配置外网访问,所以只能将API发布到云服务器上,这样SkyWalking后端服务调用告警接口就可以了,所以这里就在规则配置文件的最下面配置WebHook调用的接口地址即可;步骤如下:

    1bbe32ac1f4e6effd9aab4e117e91130.png

    修改alarm-settings.yml的文件,在文件最后配置WebHook地址,可以配置多个,如下:

    2e107d36d5350e016f49499802bcd8ab.png

    告警规则和WebHook地址配置完毕之后,重启一下容器,如下:

    docker stop skywalking-oapdocker start skywalking-oap
2.3 运行看效果

启动项目,然后访问之前写好的接口,接口中特意搞了个异常,所以每次都会报错,错误率肯定是低于设置的规则80%,稍等一会就会产生告警信息;

42e1d36da1624c2d70e79a1e8625f8cc.png

界面上也可以看到告警信息,如下:

f050236b638da5dbe3fdf8de99c89662.png

因为触发告警时会调用我们编写的WebHook接口,我们针对告警信息发送了邮件,所以同时会收到对应的告警邮件

7057e3dfba9f5c74902d29ea252ba4b6.png

演示代码:https://gitee.com/CodeZoe/microservies-demo/tree/main/SkyWalkingDemo/SkyWalkingDataDemo

总结

好了,关于告警的配置和使用就简单说这么多吧,如果有其他配置需求,可以参照官网,使用方式大同小异;后续会记录一些使用经验,关注“Code综艺圈”,和我一起学习吧;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python sqllite远程_Python实现Sqlite将字段当做索引进行查询的方法

本文实例讲述了Python实现Sqlite将字段当做索引进行查询的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;默认从sqlite中获取到的数据是数字索引的, 在开发阶段经常有修改数据库所以显得不太方便, 其实在python源码里就有解决方案, 直接读sqlite3的源码, 摸索了一…

神抓拍!2020搞笑野生动物摄影大赛,哈哈哈哈哈笑到头掉

全世界只有3.14 % 的人关注了爆炸吧知识图片来自CWPAs 2020小动物们到底能有多好玩让我们来看看今年的搞笑野生动物摄影大赛吧保准叫你从头笑到尾&#xff08;以下是入围作品&#xff09;“飚自行车的”猴看起来像个酷猴▲摄影&#xff1a;Yevhen Samuchenko真情实感演绎“我太…

【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate

ESFramewor使用技巧&#xff08;2&#xff09;&#xff0d;&#xff0d; 在插件中使用NHibernate 我们来讨论一下这种情景&#xff0c;你采用基于ESFramework的4层架构进行应用开发&#xff0c;你分析用户的需求&#xff0c;并将其分类整理为几大块&#xff0c;考虑每一块使用…

如何在ashx页面获取Session值(未将对象引用设置到对象的实例) (转)

如何在ashx页面获取Session值(未将对象引用设置到对象的实例) 分类&#xff1a; .Net学习笔记 Session 2011-11-30 10:25 902人阅读 评论(1) 收藏 举报在一般事务处理页面&#xff0c;可以轻松的得到 Request,Response对象&#xff0c;从而进行相应的操作&#xff0c;如下&am…

java字符串从后截取_java 字符串截取的几种方式(转)

众所周知,java提供了很多字符串截取的方式。下面就来看看大致有几种。 1.split()+正则表达式来进行截取。 将正则传入split()。返回的是一个字符串数组类型。不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时。 String str = "abc,12,3yy98,0"; Strin…

REST 深度进阶

最近团队人数在扩大&#xff0c;才发现&#xff0c;REST 这个出来很多年头的东西&#xff0c;居然还有人用不好。说起来&#xff0c;REST 出现已经很久了。从早期的三层架构&#xff0c;到现在的多层、微服务&#xff0c;核心内容之一就是 API --- 从非常简单的 API&#xff0c…

绝不翻车珍珠奶茶做法

1 如何在家自制珍珠奶茶▼2 儿子&#xff0c;妈妈给你烤小饼干哦▼3 放假太久了连自己哪个班都忘了▼4 想问下&#xff0c;鸟是在哪都能起窝吗&#xff1f;▼5 不到万不得已&#xff0c;绝不去做▼6 这个店名太童年阴影了▼7 小鸡做错了什么&#xff1f;▼你点的每个赞&…

margin三个值

http://www.cnblogs.com/wangkongming/p/3204734.html margin标记可以带一个、二个、三个、四个参数&#xff0c;各有不同的含义。 margin: 20px;&#xff08;上、下、左、右各20px。&#xff09;margin: 20px 40px;&#xff08;上、下20px&#xff1b;左、右40px。&#xff09…

循环控制for

<?php/***燕十八 公益PHP培训课堂地址:YY频道88354001 学习社区:www.zixue.it **/ /***for(初始条件1;判断条件2;4:钱减少) {执行语句3; }***/for($i10; $i >1; $i--) {echo $i,<br />; }/** 扩展一下for循环,同时循环两个数 打印 5 1 4 2 3 3 2 4 1 5 **/f…

常用JS代码大全

事件源对象 event.srcElement.tagName event.srcElement.type捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey事件返回值 event.returnValue鼠标位置 event.x event.y窗体活…

施一公:“中国式科研”误国误民!表面上一片繁荣,实则深藏危机

全世界只有3.14 % 的人关注了爆炸吧知识论文和科技实力是两回事在全国政协十三届一次会议上&#xff0c;中国科学院院士、清华大学原副校长施一公曾说道&#xff1a;“我以前曾经预测&#xff0c;中国会在2020年论文数超过美国&#xff0c;没想到我们提前完成了。”但面对这项数…

正确使用和理解C#中的闭包

定义 我们把在Lambda表达式(或匿名方法)中所引用的外部变量称为捕获变量。而捕获变量的表达式就称为闭包。捕获变量 捕获的变量会在真正调用委托时“赋值”&#xff0c;而不是在捕获时“赋值”&#xff0c;即总是使用捕获变量的最新的值。如下代码所示&#xff0c;调用委托时&a…

java merge css_一句命令快速合并 JS、CSS

在项目开发环境下&#xff0c;我们会把 JS 代码尽可能模块化&#xff0c;方便管理和修改&#xff0c;这就避免不了会出现一个项目自身 JS 文件数量达到 10 个或者更多。而项目上线后&#xff0c;会要求将所有 JS 文件合并为 1 个或者几个&#xff0c;手动的操作虽然也不是问题&…

tomcat对于web.xml的security-constraint使用的处理机制

知识点 web.xml中<security-constraint> 的子元素 <http-method> 是可选的&#xff0c;如果没有 <http-method> 元素&#xff0c;这表示将禁止所有 HTTP 方法访问相应的资源。子元素 <auth-constraint> 需要和 <login-config> 相配合使用&#x…

重磅公开!36个高考数学破题大招

前段时间&#xff0c;超模君发了关于极值点偏移问题的总结资料&#xff0c;朋友们都觉得内容整合得十分详细。同时&#xff0c;也有不少很多朋友留言说希望有其他高考数学常考问题的解题总结。确实&#xff0c;毕竟高考涉及的内容非常多&#xff0c;比如说参数范围问题、数列求…

Linux服务器数据备份

2019独角兽企业重金招聘Python工程师标准>>> 服务器上的数据是如此重要&#xff0c;以至于我们定期要对其进行备份&#xff01;这里讲一下mysql的备份和使用rsync同步服务器上的文件&#xff0c;从而实现多台linux服务器之间的文件的备份。 一 Mysql备份 mysql的备份…

Serilog 日志框架如何自动删除超过 N 天的日志 ?

咨询区 JohnB&#xff1a;我的程序使用的日志框架是 Serilog&#xff0c;我是按天分割日志文件的&#xff0c;由于每日文件都比较大&#xff0c;我经常手工删除&#xff0c;但这样做很傻&#xff0c;请问日志框架有没有自动帮我删除 N 天之间的日志呢&#xff1f;回答区 someth…

linux进程通讯-纯文本文件

三)强制性加锁的实现1)对文件加锁有两种方式:劝告性锁和强制性锁.2)劝告性锁工作时,每个进程都要对文件进行读或写之前调用lockf对文件加锁,如果一个进程忘记调用lockf,那么锁协议将会被忽视3)强制性锁工作时,它将使任何一个想要访问已被加锁的文件的进程都堵塞在读或写队列上.…

java 数组长度 可变_java基础之集合长度可变的实现原理

首先我们要明白java中的集合Collection,List,ArrayList之间的关系:ArrayList是具体的实现类,实现了List接口List是接口,继承了Collection接口List继承了Collection接口 但是List是可以重复的并且有序的集合 Collection是不可重复且无序的这里我们先讲一下List集合:List接口不…

与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......

全世界只有3.14 % 的人关注了爆炸吧知识从武汉新冠疫情爆发到如今&#xff0c;陈薇没有一天休息。短短半年间&#xff0c;54岁的她头发从黑到白&#xff0c;也哭了好几次。刚去武汉-现在陈薇的母亲也在电视上看到了女儿的变化&#xff1a;“她变老了&#xff0c;都有白头发了。…