Skywalking(9.7.0) 告警配置
图片被吞,来这里看吧:https://juejin.cn/post/7344567669893021736
过年前一天发版,大家高高兴兴准备回家过年去了。这时候老板说了一句,记得带上电脑,关注用户反馈。有紧急问题在高速上都得给我找个服务区改好。
但是机智如我,怎么能让老板知道服务出问题了呢?毕竟我还奢望过完年有年终奖。那正确的方式当然服务出问题了,我们开发瞒着老板偷偷给他改了,当做什么都没发生过。
平时当然Bug多点无所谓,毕竟软件嘛,有点bug也正常。但现在是决定年终的重要时刻,我们要让老板相信我们的服务是稳定的。
1. 首先你要有个Skywalking
有条件玩K8S的同学看这个:在K8S集群中部署SkyWalking-CSDN博客
没条件就本地玩玩吧:SkyWalking 本地启动以及闪退问题-CSDN博客
告警相关配置文件路径:
打开后有一些默认的规则,这些规则的作用看这个:Alerting | Apache SkyWalking
rules:service_resp_time_rule:expression: sum(service_resp_time > 1000) >= 3period: 10silence-period: 5message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.service_sla_rule:expression: sum(service_sla < 8000) >= 2period: 10silence-period: 3message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutesservice_resp_time_percentile_rule:expression: sum(service_percentile{_='0,1,2,3,4'} > 1000) >= 3period: 10silence-period: 5message: Percentile response time of service {name} alarm in 3 minutes of last 10 minutes, due to more than one condition of p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000service_instance_resp_time_rule:expression: sum(service_instance_resp_time > 1000) >= 2period: 10silence-period: 5message: Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutesdatabase_access_resp_time_rule:expression: sum(database_access_resp_time > 1000) >= 2period: 10message: Response time of database access {name} is more than 1000ms in 2 minutes of last 10 minutesendpoint_relation_resp_time_rule:expression: sum(endpoint_relation_resp_time > 1000) >= 2period: 10message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes
2. 告警规则参数
Alerting | Apache SkyWalking
Rule name:规则名称。需要保证唯一,必须以 _rule 结尾
Expression:告警表达式。
Include names:告警规则生效包含的实体名列表。在 Skywalking中,实例有多种类型 Alerting | Apache SkyWalking
实体名称这里要注意一下,我们在集成 Agent 的时候,一般都会设置 Namespace 和 Service group。举个栗子:
SW_AGENT_NAMESPACE:"dev"SW_AGENT_NAME:"dev::example-name"
当我这样定义时,service name 应该写成dev::example-name|dev|,参考:Table of Agent Configuration Properties | Apache SkyWalking
Exclude names:告警规则不生效包含的实体名列表
Include names regex:和 Include names 一样。只不过是正则表达式字符串
Exclude names regex:和 Exclude names 一样。只不过是正则表达式字符串
Tags:自定义的 k-v 对
Period:表达式计算结果的缓存时间
Silence Period:推送最低间隔时间。例如我有一个规则,1分钟会触发一次,当我把Silence Period配置为 3 时。那就是每3分钟发送一次请求到 hook
Hooks:向外界发送通知的方式 ,本质上都是 WebHook。
3. 表达式解析
service_sla_custom_rule:# service_sla 是一个在 `alarm-config.yaml` 中默认定义的指标,当然可以覆盖它。# sum((service_sla / 100) < 90) 就是字面意思,服务SLA低于90% 的次数# >= 4 是关键,表达式每分钟算一次(这是我看了文档后猜的,应该没问题), 那这里就表示最近4分钟服务SLA都低于90%expression: sum((service_sla / 100) < 90) >= 4# 字符串匹配写法include-names:- 'dev::example|dev|'# 正则写法:所有dev组的include-names-regex: '^dev::.*' # 表达式计算结果缓存时长,表达式每一分钟计算一次,我表达式中设置了>=4# 所以period 应该设置一个大于4的值,这样能避免重复计算period: 10# 通知静默时长,如果服务有10分钟SLA是低于90的,那么m4的时候会提醒。# 下一次本来是m5提醒的,我设置了2,所以等到m6再次计算表达式的时候才会在提醒silence-period: 2# 自定义 tags,key-value形式tags:level: ERROR# 提醒文本,可以通过格式化插入参数message: '服务 SLA 低于 90%'# 使用的通知方式,如果不填则选择默认hookshooks:- '{hookType}.{hookName}'
4. 表达式定义实例
4.1 所有服务SLA在最近3分钟内小于100
service_success_rule:expression: sum((service_success / 100) < 100) >= 3period: 5silence-period: 5message: '服务 SLA 低于 100%'
4.2 单接口SLA在最近3分钟内小于100
endpoint_sla_rule:expression: sum((endpoint_sla / 100) < 100) >= 3include-names: - 'GET:/test/custom1 in dev::example|dev|'period: 5message: '此接口 SLA 低于 100%'
4.3 所有DB SLA 最近1分钟内小于100
database_access_sla_rule:expression: sum((database_access_sla / 100) < 100) >= 1period: 3message: 'DB SLA 低于 100%'
5. 定义配置 Hooks
实际测试下来,直接配置飞书会出现只有首次才会通知的情况。自己提供个Webhook在透传到飞书正常。猜测是Skywalking中集成飞书通知的模块有问题,这个待验证。
5.1 Webhook
Alerting | Apache SkyWalking
自定义的接口
@RestController
@RequestMapping("/alerting")
public class AlertingController { // 我用的是lark,用飞书得改下hostprivate final static String WEBHOOK_URL = "https://open.larksuite.com/open-apis/bot/v2/hook/<token>"; @Resource private RestTemplate restTemplate; @PostMapping("skywalking") public void alert(@RequestBody List<AlarmMessage> alarmMessageList) { alarmMessageList.parallelStream().forEach(alarmMessage -> { String text = "Apache SkyWalking Alarm:\n\n" + alarmMessage.getScope() + ": " + alarmMessage.getName() + "\n\n" + alarmMessage.getAlarmMessage(); ImmutableMap<String, Object> body = ImmutableMap.of( "msg_type", "text", "content", ImmutableMap.of("text", text) ); restTemplate.postForEntity(WEBHOOK_URL, body, String.class); }); } // https://github.com/apache/skywalking/blob/master/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java @Getter @Setter @JsonNaming(PropertyNamingStrategy.LowerCaseStrategy.class) public static class AlarmMessage { private int scopeId; private String scope; private String name; private String id0; private String id1; @JsonAlias("ruleName") private String ruleName; @JsonAlias("alarmMessage") private String alarmMessage; private List<Tag> tags; @JsonAlias("startTime") private long startTime; private transient int period; } @Getter @Setter public static class Tag { private String key; private String value; }
}
在 alarm-config.yaml 中配置
hooks:webhook:default:# 定义这是默认的hookis-default: trueurls:- http://localhost:8080/alerting/skywalking
5.2 飞书
创建机器人很简单的,基本上有手就行。
Alerting | Apache SkyWalking
自定义机器人使用指南 - 开发指南 - 开发文档 - Lark 开放平台 (larksuite.com)
飞书群机器人通知配置
hooks:feishu:default:text-template: |-{"msg_type": "text","content": {"text": "Apache SkyWalking Alarm: \n\n%s"}}webhooks:- url: https://open.larksuite.com/open-apis/bot/v2/hook/<token>- secret: <secret>
Ref
Alerting | Apache SkyWalking
https://skywalking.apache.org/docs/main/v9.7.0/en/api/metrics-query-expression
Analysis Native Streaming Traces and Service Mesh Traffic | Apache SkyWalking
skywalking/docs/en/setup/backend/backend-alarm.md at master · apache/skywalking (github.com)
skywalking/docs/en/api/metrics-query-expression.md at master · apache/skywalking (github.com)
自定义机器人使用指南 - 开发指南 - 开发文档 - Lark 开放平台 (larksuite.com)
Table of Agent Configuration Properties | Apache SkyWalking
相关文章:
Skywalking(9.7.0) 告警配置
图片被吞,来这里看吧:https://juejin.cn/post/7344567669893021736 过年前一天发版,大家高高兴兴准备回家过年去了。这时候老板说了一句,记得带上电脑,关注用户反馈。有紧急问题在高速上都得给我找个服务区改好。 但是…...
删除、创建、验证Kafka安装自带的__consumer_offsets topic
删除Kafka自带Topic 一般情况下,你删除Kafka自带的__consumer_offsets topic,会报错提示不能删除。 倔强的你直接找到zookeeper删掉了它,list查看确实没有这个topic了,但是这会导致消费者和偏移量无法记录。 创建Kafka自带的Topi…...
在文件夹下快速创建vue项目搭建vue框架详细步骤
一、首先在你的电脑目录下新建一个文件夹 进入该文件夹并打开控制台(输入cmd指令) 进入控制台后输入 vue create springboot_vue (自己指定名称) 如果出现这类报错如:npm install 的报错npm ERR! network request to http://registry.cnp…...
蓝桥杯倒计时 36天-DFS练习
文章目录 飞机降落仙境诅咒小怂爱水洼串变换 飞机降落 思路:贪心暴搜。 #include<bits/stdc.h>using namespace std; const int N 10; int t,n; //这题 N 比较小,可以用暴力搜搜复杂度是 TN*N! struct plane{int t,d,l; }p[N]; bool vis[N];//用…...
ctfshow web入门 php特性总结
1.web89 intval函数的利用,intval函数获取变量的整数值,失败时返回0,空的数组返回,非空数组返回1 num[]1 intval ( mixed $var [, int $base 10 ] ) : int Note: 如果 base 是 0,通过检测 var 的格式来决定使用的进…...
Media Encoder 2024:未来媒体编码的新纪元 mac/win版
随着科技的飞速发展,媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求,Media Encoder 2024应运而生,它凭借卓越的技术和创新的特性,重塑了媒体编码的未来。 Media Encoder 2024 mac/w…...
2024年AI辅助研发趋势:数智时代革新新引擎
随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面,而在软件开发领域,AI辅助研发正成为一股不可忽视的力量。本文将探讨2024年AI辅助研发的趋势,以及它如何成为数智时代革新的新引擎。 AI辅助研…...
2024年家政预约上门服务小程序【用户端+商家端+师傅端】源码
024最新家政预约上门服务小程序源码 主要功能:商家入住,师傅入住,缴纳保正金 支持师傅,抢单派单 支持多城市多门下单,支持预约上门服务到店核销 支持补差价义价,支持区域服务限制 基于thinkphp和原生小程序开发...
数据结构:静态链表(编程技巧)
链表的元素用数组存储, 用数组的下标模拟指针。 一、理解 如果有些程序设计语言没有指针类型,如何实现链表? 在使用指针类型实现链表时,我们很容易就可以直接在内存中新建一块地址用于创建下一个结点,在逻辑上&#x…...
python中的**可以表示什么??
在Python中,** 有两个主要的用途: 作为幂运算符:a ** b 表示a的b次方。例如,2 ** 3 会返回 8,因为2的3次方等于8。 在函数调用或定义时作为关键字参数的解包: 当你有一个字典,并且你想将这个字…...
使用 Git 跟踪项目文件
本章内容为:用Django 写学习笔记程序第三章.2部署程序摘录,详情内容查看请跳转下方链接: 用Django 写学习笔记程序第三章.2部署程序 文章目录 使用 Git 跟踪项目文件虚拟环境中安装 gitgit 是什么git 安装完成后的简单配置创建项目忽略文件初…...
C++从零开始(day47)——set,map学习使用
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于set和map的知识点 1.关联式容器 在前面&#…...
手机和电脑同步的好用记事本软件有哪些
我常常需要随手记录各种信息,以便随时查阅和使用。比如,在下班路上,我会用手机记录明天要处理的工作事项、购物清单,或是某个突然迸发的创意想法;而在办公室,我则需要在电脑上整理会议纪要、项目计划&#…...
使用CSS制作动态的环形图/饼图
使用纯 CSS Animation conic-gradient 实现一个环形图。 饼图的实现思路和环形图一样,去掉中间的圆形遮盖 after 伪类元素即可。 一、构建基础样式 构建圆形节点和中间的遮盖元素。 <style>body {background-color: rgb(130, 226, 255);}.circle {top: 16…...
掌握React中的useEffect:函数组件中的魔法钩子
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
WPF 窗口添加投影效果Effect
BlurRadius:阴影半径 Color:颜色 Direction:投影方向 ShadowDepth:投影的深度 <Window.Effect><DropShadowEffect BlurRadius"10" Color"#FF858484" Direction"300" ShadowDepth&quo…...
Gitlab CICD 下载artifacts文件并用allure打开,或bat文件打开
allure命令行打开aritfacts报告 首先下载allure.zip,并解压 配置环境变量 使用命令行打开allure文件夹 allure open 2024-03-11-14-54-40 2024-03-11-14-54-40 包含index.html Bat文件打开artifacts There are 2 html reports in the download artifacts.zip S…...
鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:NavRouter)
导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 必须包含两个子组件,其中第二个子组…...
Django环境下使用Ajax
Django环境下使用Ajax 目录 Django环境下使用Ajax介绍前情提要示例JS实现Ajax实现 传递JSON格式数据传递文件数据Django自带的序列化组件基于jsonresponse序列化数据基于Django自带的serializers 注册示例 介绍 AJAX 的主要目标是在不刷新整个页面的情况下,通过后台…...
官方安装配置要求服务器最低2核4G
官方安装配置要求服务器至少2核、4G。 如果服务器低于这个要求,就没有必要安装,因为用户体验超级差。 对于服务器CPU来说,建议2到4核就完全足够了,太多就浪费了,但是内存越大越好,最好是4G以上。 如果服务器…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
