上篇文章:

Spring Cloud系列—SkyWalking链路追踪https://blog.csdn.net/sniper_fandc/article/details/149948321?fromshare=blogdetail&sharetype=blogdetail&sharerId=149948321&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

1 告警规则

1.1 告警规则配置项

1.2 Webhook邮箱告警

1.2.1 引入依赖

1.2.2 添加配置项

1.2.3 接口开发

1.2.4 配置Webhook

1.2.5 重启服务和SkyWalking

2 Webhook接入飞书


1 告警规则

1.1 告警规则配置项

        当发生异常信息时,比如接口访问非常慢或超时,请求成功率很低,就需要SkyWalking来通知开发人员和运维人员来及时排查问题:

        在SkyWalking安装目录apache-skywalking-apm-bin\config的alarm-settings.yml文件中,存在默认的告警规则:

# Sample alarm rules.rules:# Rule unique name, must be ended with `_rule`.service_resp_time_rule:# A MQE expression, the result type must be `SINGLE_VALUE` and the root operation of the expression must be a Compare Operation# which provides `1`(true) or `0`(false) result. When the result is `1`(true), the alarm will be triggered.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_resp_time_rule:#    expression: avg(service_resp_time) > 1000#    period: 10#    silence-period: 5#    message: Avg response time of service {name} is more than 1000ms in last 10 minutes.service_sla_rule:expression: sum(service_sla < 8000) >= 2# The length of time to evaluate the metricsperiod: 10# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.silence-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{p='50,75,90,95,99'} > 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#  Active endpoint related metrics alarm will cost more memory than service and service instance metrics alarm.#  Because the number of endpoint is much more than service and instance.##  endpoint_resp_time_rule:#    expression: sum(endpoint_resp_time > 1000) >= 2#    period: 10#    silence-period: 5#    message: Response time of endpoint {name} is more than 1000ms in 2 minutes of last 10 minutes#hooks:#  webhook:#    default:#      is-default: true#      urls:#        - http://127.0.0.1/notify/#        - http://127.0.0.1/go-wechat/

        告警规则的定义必须以`_rule`结尾,其中:

        expression是告警表达式,结果为1时触发告警;

        period是告警周期(minute),在该时间范围内满足expression的触发高级;

        silence-period是静默时间(minute),触发告警后,静默时间内不再触发;

        message是告警信息。

        比如service_resp_time_rule规则,表示某个服务的响应时间在最近10分钟的3分钟内持续超过1000毫秒时触发告警。

1.2 Webhook邮箱告警

        Webhook是一种允许应用程序向外部系统实时推送事件或数据的机制,通常通过HTTP回调实现,从而实现跨系统自动化的信息传递。核心特性:

        事件驱动:当预设条件触发时(如告警触发、数据更新),主动向目标URL发送HTTP请求(通常为POST)。

        轻量级集成:接收方只需提供一个可访问的HTTP端点即可接收数据,无需轮询查询。

        灵活扩展:适用于告警通知、流程触发、数据同步等场景。

1.2.1 引入依赖

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency></dependencies>

        spring-boot-starter-mail是主要进行邮件的依赖。

1.2.2 添加配置项

server:port: 8084logging:pattern:dateformat: HH:mm:ss:SSSspring:mail:# 指定邮件服务器地址host: smtp.qq.com# 登录账户username: "发件人邮箱账号"# 授权码password: "授权码"# 端口port: 465# 默认编码default-encoding: UTF-8# 使用的协议protocol: smtps# 其他的属性properties:# 默认属性"mail.smtp.connectiontimeout": 5000"mail.smtp.timeout": 3000"mail.smtp.writetimeout": 5000"mail.smtp.auth": true"mail.smtp.starttls.enable": true"mail.smtp.starttls.required": true# 自定义属性"personal": "告警系统""subject": "订单系统告警"

        需要在QQ邮箱设置中开启SMTP服务,并且记得把配置文件中的spring.mail.username和password替换为自己的邮箱账号和授权码。

        授权码开启方式可以查看QQ邮箱官网的帮助文档:https://service.mail.qq.com/detail/0/75

1.2.3 接口开发

        SkyWalking告警消息接收实体类:

@Datapublic class AlarmMessage {private int scopeId;private String scope;private String name;private String id0;private String id1;private String ruleName;private String alarmMessage;private List<Tag> tags;private long startTime;private transient int period;private Set<String> hooks = new HashSet<>();private String expression;@Datapublic static class Tag {private String key;private String value;}}

        邮件发送配置类:

@Slf4j@Configurationpublic class Mail {@Autowired//读取spring.mail配置并注册成MailProperties对象private MailProperties mailProperties;@Autowiredprivate JavaMailSender javaMailSender;public void send(String to,String content) {try {// 创建一个邮件消息MimeMessage message = javaMailSender.createMimeMessage();// 创建MimeMessageHelperMimeMessageHelper helper = new MimeMessageHelper(message, false);// 发件人邮箱和名称String personal = Optional.ofNullable(mailProperties.getProperties().get("personal")).orElse(mailProperties.getUsername());helper.setFrom(mailProperties.getUsername(), personal);// 收件人邮箱helper.setTo(to);// 邮件标题helper.setSubject(mailProperties.getProperties().getOrDefault("subject","告警通知"));// 邮件正文,第二个参数表示是否是HTML正文helper.setText(content, true);// 发送javaMailSender.send(message);} catch (Exception e) {log.error("邮件发送失败, e:" + e);}}}

        控制层接口:

@Slf4j@RequestMapping("/alarm")@RestControllerpublic class AlarmController {@Autowiredprivate Mail mail;@RequestMapping("/handler")public String handler(@RequestBody List<AlarmMessage> alarmMessages) {log.info("收到报警, alarmMessages:{}", alarmMessages);mail.send("收件人邮箱",buildMessage(alarmMessages));return "接收报警成功";}private String buildMessage(List<AlarmMessage> alarmMessages) {StringBuilder builder = new StringBuilder();builder.append("系统告警: <br/>");for (AlarmMessage alarmMessage : alarmMessages) {builder.append("scopeId: ").append(alarmMessage.getScopeId()).append("<br/> scope: ").append(alarmMessage.getScope()).append("<br/> 目标 Scope 的实体名称: ").append(alarmMessage.getName()).append("<br/> Scope 实体的 ID: ").append(alarmMessage.getId0()).append("<br/> 告警规则名称: ").append(alarmMessage.getRuleName()).append("<br/> 告警消息内容: ").append(alarmMessage.getAlarmMessage()).append("<br/>告警时间: ").append(alarmMessage.getStartTime()).append("<br/><br/>---------------");}return builder.toString();}}

1.2.4 配置Webhook

        主要是配置apache-skywalking-apm-bin\config的alarm-settings.yml文件,配置告警向URL进行通知,这里就是配置向alarm-service服务进行通知,然后由alarm-service服务将告警信息处理并发送邮箱:

hooks:webhook:default:is-default: trueurls:- http://127.0.0.1:8084/alarm/handler

1.2.5 重启服务和SkyWalking

        由于开启分布式事务,因此创建订单操作比较慢,在邮件中就会出现告警信息。

        注意:该信息出现可能比较慢,因为告警规则统计周期默认是10分钟,加上信息处理等就更慢了。

2 Webhook接入飞书

        Webhook还可以接入企业微信、飞书、钉钉等应用,从而让开发和运维人员更及时接收告警信息。在飞书任意一个群组,点击右上角,添加机器人:

        点击自定义机器人,然后配置机器人信息,点击添加:

        在打开的界面复制Webhook地址和签名校验码(如果开启设置),修改SkyWalking的配置文件:

hooks:feishu:default:is-default: truetext-template: |{"msg_type":"text","content": {"text": "Apache SkyWalking Alarm: \n %s."}}webhooks:- url: 飞书获取secret: 飞书获取

        然后重启SkyWalking,测试观察飞书机器人推送告警消息:

        可以发现,告警信息被成功推送到飞书。其它应用接入也同理,具体可看应用的开发者文档。

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

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

相关文章

【问题】解决docker的方式安装n8n,找不到docker.n8n.io/n8nio/n8n:latest镜像的问题

问题概览 用docker方式安装n8n&#xff0c;遇到错误&#xff0c;安装不了的问题&#xff1a; Unable to find image docker.n8n.io/n8nio/n8n:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request can…

机器人控制基础:串级PID控制算法的参数如何整定?

目录 一、整定前的准备 二、内环(副环)参数整定(核心步骤) 1. 断开主环,单独测试内环 2. 内环参数整定(按 “比例→积分→微分” 顺序) (1)比例系数(kp)整定 (2)积分系数(ki)整定 (3)微分系数(kd)整定(可选) 3. 验证内环抗扰动能力 三、外环(主…

HTTP性能优化实战指南(含代码/图表/案例)

HTTP性能优化实战指南&#xff08;含代码/图表/案例&#xff09;一、性能优化关键指标TTFB&#xff08;Time To First Byte&#xff09;: 服务器响应时间FCP&#xff08;First Contentful Paint&#xff09;: 首内容渲染时间LCP&#xff08;Largest Contentful Paint&#xff0…

QT代码框架小案例:一个简单的时间类(Time)及其实例化程序,模拟了时间的设置、显示和自动流逝功能,类似一个简易电子时钟。

一、代码框架二、运行终端显示三、代码详细注释test.pro# 指定项目类型为应用程序&#xff08;而非库或其他类型&#xff09; TEMPLATE app# 配置项目&#xff1a;启用控制台输出&#xff0c;使用C11标准 CONFIG console c11# 移除配置&#xff1a;不生成应用程序捆绑包&…

Nacos-11--Nacos热更新的原理

在Nacos中&#xff0c;当监听到配置变化后&#xff0c;Nacos提供了相关机制&#xff08;长轮询或gRPC&#xff09;让客户端能够监听到配置的变化&#xff0c;并触发相应的监听器&#xff08;Listener&#xff09;&#xff0c;但具体的处理逻辑需要根据实际需求来实现。 1、热更…

fastapi 的BackgroundTasks

什么是 BackgroundTasks&#xff1f;BackgroundTasks 是 FastAPI 提供的一个强大工具&#xff0c;它允许你将一些非紧急的、耗时的操作&#xff08;例如发送邮件、处理数据、调用第三方 API 等&#xff09;放到“后台”去执行&#xff0c;而不是让用户一直等待这些操作完成。它…

Python 十进制转二进制

在 Python 中&#xff0c;将十进制整数转换为二进制有多种方法。以下是几种常见的方式&#xff1a;1. 使用 bin() 函数bin() 是 Python 内置函数&#xff0c;可以将十进制整数转换为二进制字符串。语法bin(n)示例n 13 binary_str bin(n) print(binary_str) # 输出: 0b1101说…

合并工作表,忽略手动隐藏行超简单-Excel易用宝

同事小丽有一个工作簿&#xff0c;文件中有多个工作表&#xff0c;每个工作表中有多行数据&#xff0c;这些表格中数据是有手动隐藏行的&#xff0c;她想把这些表格的数据忽略隐藏行合并到一个工作表中&#xff0c;但是使劲浑身解数&#xff0c;各种折腾&#xff0c;都会把隐藏…

我从零开始学习C语言(14)- 基本类型 PART1

今天学习第7章-基本类型&#xff0c;主要内容如下&#xff1a;7.1 整数类型这里的整数的整数值就是数学意义上的整数。C语言支持两种本质上&#xff08;存储形式&#xff09;不同的数值类型&#xff1a;整数类型&#xff08;简称整型&#xff09;和浮点类型&#xff08;简称浮点…

Flutter - UI布局

一、容器Widget1. ScaffoldScaffold 作为页面的脚手架&#xff0c;基础区域包含顶部导航栏 appBar、主体内容区 body、侧边抽屉 drawer、悬浮按钮 floatingActionButton、底部导航栏 bottomNavigationBar。Scaffold(appBar: AppBar( // 顶部导航栏title: Text(首页),),body: Ce…

UNIKGQA论文笔记

UNIKGQA: UNIFIED RETRIEVAL AND REASONING FOR SOLVING MULTI-HOP QUESTION ANSWERING OVER KNOWLEDGE GRAPH(ICLR 2023)Introduction知识图上的多跳问题回答&#xff08;KGQA&#xff09;的目的是在大规模知识图谱&#xff08;KG&#xff09;上找到自然语言问题中提到的主题实…

MySQL 8.0.17 “Too Many Connections” 排查指南

MySQL 8.0.17 “Too Many Connections” 排查与优化指南 在 MySQL 8.0.17 中&#xff0c;当出现“Too many connections”错误时&#xff0c;通常意味着数据库连接数已达上限。这不仅会影响应用性能&#xff0c;还可能导致连接池&#xff08;如 Druid&#xff09;无法获取新连接…

GEO优化服务:智能时代营销新赛道的中国引领者——全球行业格局与发展趋势观察

随着全球人工智能技术的迅猛发展&#xff0c;以GPT-5、Claude Opus以及我国的DeepSeek Divine、豆包等为代表的新一代生成式AI搜索引擎&#xff0c;正深刻改变着信息获取与商业决策模式。用户通过直接向AI提问获取整合答案的行为日益普遍&#xff0c;传统搜索引擎的流量入口地位…

全面解析主流AI模型:功能对比与应用推荐

全面解析主流AI模型&#xff1a;功能对比与应用推荐 在当前人工智能技术飞速发展的背景下&#xff0c;市面上涌现了多种具备不同能力的AI模型。本文将系统梳理主流模型的特性、对比其核心能力&#xff0c;并结合实际场景推荐高效、稳定的API服务&#xff08;如https://api.aaa…

【Nacos知识】Nacos 作为注册中心的客户端配置详解

Nacos 作为注册中心的客户端配置详解Nacos 作为注册中心的客户端配置详解一、核心配置项全景图二、基础连接配置1. 服务端地址配置2. 命名空间配置3. 服务分组配置三、服务注册配置1. 服务元数据配置2. 网络位置配置3. 集群与权重配置四、健康检查配置1. 心跳参数配置2. 健康检…

TypeReference 泛型的使用场景及具体使用流程

简介 在 Java 中&#xff0c;泛型类型在运行时会被擦除。这意味着当我们使用泛型时&#xff0c;运行时无法直接获取到泛型的具体类型信息。例如&#xff0c;我们无法直接通过 Class 对象来获取一个泛型类型的类型参数。这在某些情况下可能会导致问题&#xff0c;特别是在我们需…

商超场景徘徊识别误报率↓79%!陌讯多模态时序融合算法落地优化

原创声明本文为原创技术解析文章&#xff0c;核心技术参数与架构设计引用自 “陌讯技术白皮书&#xff08;2024 版&#xff09;”&#xff0c;所有技术描述均经过重写转换&#xff0c;无复制官网文案行为&#xff0c;严禁未经授权转载。一、行业痛点&#xff1a;徘徊识别的场景…

KubeBlocks AI:AI时代的云原生数据库运维探索

KubeBlocks AI&#xff1a;AI时代的云原生数据库运维探索 REF Auto-detect-failure 架构Auto-bug-detect测试 引言 传统的自动化运维诊断主要依赖基于规则的方法——无论是Ansible Playbooks的预定义脚本&#xff0c;还是Kubernetes Operator的固化逻辑&#xff0c;这些方法…

如何编译botan加密库?

Botan加密库支持2.x版本和3.x版本&#xff0c;其中3.x版本需要支持C20。0、下载源码git clone https://github.com/randombit/botan.gitcd botan切换分支到2.19.5版本git checkout 2.19.51、Windows编译Botan加密库1.1 配置生成MakefileRelease模式python configure.py --ccmsv…

Linux问答题:分析和存储日志

目录 1. RHEL 日志文件保存在哪个目录中&#xff1f; 2.什么是 syslog 消息和非 syslog 消息&#xff1f; 3.哪两个服务处理 RHEL 中的 syslog 消息&#xff1f; 4. 列举常用的系统日志文件并说明其存储的消息类型。 5. 简单说下日志文件轮转的作用 6.systemd-journald 服…