Spring Cloud【SkyWalking网络钩子Webhooks、SkyWalking钉钉告警、SkyWalking邮件告警】(十六)

news2024/11/26 11:28:45

 

目录

分布式请求链路追踪_SkyWalking网络钩子Webhooks

分布式请求链路追踪_SkyWalking钉钉告警

分布式请求链路追踪_SkyWalking邮件告警


 

分布式请求链路追踪_SkyWalking网络钩子Webhooks

Wbhooks网络钩子 

Webhok可以简单理解为是一种Web层面的回调机制。告警就是一个事件,当事件发生时Skywalking会主动调用一个配置好的接口, 这个接口就是所谓的Webhook;

注意:

Skywalking的告警消息会通过借HTTP请求进行发送,请求方法为 POST (Content-Type 为application/json。其JSON数据实基于List进行序列化的。  

JSON数据示例 

[{
 "scopeId": 1,
 "scope": "SERVICE",
 "name": "serviceA",
 "id0": "12",  
 "id1": "",  
 "ruleName": "service_resp_time_rule",
 "alarmMessage": "alarmMessage xxxx",
 "startTime": 1560524171000
}]

创建项目cloud-alarm9090

引入依赖 

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

创建接收实体类AlarmMessageDto

 https://github.com/apache/skywalking/blob/v8.5.0/docs/en/set up/backend/backend-alarm.md

import lombok.Data;
@Data
public class AlarmMessageDto {
    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 transient boolean onlyAsCondition;
    @Data
    public static class Tag{
        private String key;
        private String value;
   }
}

 编写钩子接口

    /**
     * 订单机器人通知的
     */
    @PostMapping("dingding")
    public void sendDinding(@RequestBody List<AlarmMessageDto> alarmMessageDtoList) {
        StringBuilder builder = new StringBuilder();
        alarmMessageDtoList.forEach(info ->
      {
           builder.append("\nscopeId:").append(info.getScopeId())
                   .append("\nScope实体:").append(info.getScope())
                   .append("\n告警消息:").append(info.getAlarmMessage())
                   .append("\n告警规则:").append(info.getRuleName())
                   .append("\n\n------------------------\n\n");
       });
   }

配置网络钩子

alarm-settings.yml 增加alarm接口

回调失败

关闭windows防火墙 

搜索防火墙 

关闭防火墙 

实时效果反馈

1.Webhok可以简单理解为是一种Web层面的_____机制。

A 回调 

B 请求

C 告警

D 以上都是错误

分布式请求链路追踪_SkyWalking钉钉告警

前言 

缺点: 实际项目中,我们不会一直看着告警菜单。希望有告警信息产生时,将告警信息通过邮件或者短信发送给相关负责人。 

 

钉钉告警 

创建群聊

添加智能助手 

添加机器人 

选择机器人 

 配置加签

POM引入钉钉工具包依赖 

<!--钉钉工具包-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibaba-dingtalk-service-sdk</artifactId>
     <version>2.0.0</version>
</dependency>

创建application.yml

server:
 port: 9090
dingding:
  #地址
 webhook: https://oapi.dingtalk.com/robot/send?access_token=7915a428336dd933247d019420032bb72e920f459920cc581c42c61d46da7e46
  #密钥
 secret: SECa38500986415fc1404ad36415d8846f432db49936f9fb7f4d0ab5260e69ca82e

编写发送接口

@Slf4j
@RestController
@RequestMapping("alarm")
public class AlarmController {
    @Value("${dingding.webhook}")
    private String webhook;
    @Value("${dingding.secret}")
    private String secret;
    /**
     * 钉钉机器人通知
     * @param alarmMessageList
     */
    @PostMapping("pushData")
    public void alarm(@RequestBody
List<AlarmMessageDto> alarmMessageList) {
        log.info("alarmMessage:{}", alarmMessageList.toString());
        alarmMessageList.forEach(info -> {
            try {
                // 当前时间戳
                Long timestamp = System.currentTimeMillis();
                String stringToSign = timestamp + "\n" + secret;
                /**
                 * Mac算法是带有密钥的消息摘要算法
                 * 初始化HmacMD5摘要算法的密钥产生器
                 */
                Mac mac = Mac.getInstance("HmacSHA256");
                // 初始化mac
                mac.init(new SecretKeySpec(secret.getBytes("UTF-8"),"HmacSHA256"));
                // 执行消息摘要
                byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
                // 拼接签名
                String sign = "&timestamp=" + timestamp + "&sign=" + URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
                // 构建钉钉发送客户端工具
                DingTalkClient client = new DefaultDingTalkClient(webhook + sign);
                // 设置消息类型
                OapiRobotSendRequest request = new OapiRobotSendRequest();
                request.setMsgtype("text");
                // 设置告警信息
                OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
                text.setContent("业务告警:\n" + info.getAlarmMessage());
                request.setText(text);
                // 接受人
                OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
                at.setAtMobiles(Arrays.asList("所有人"));
                request.setAt(at);
                OapiRobotSendResponse response = client.execute(request);
           } catch (Exception e) {
                e.printStackTrace();
           }
       });
   }
}

分布式请求链路追踪_SkyWalking邮件告警

邮件发送原理 

SMTP 协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。

 

授权过程 

所以在使用springboot发送邮件之前,要开启POP3和SMTP协议, 需要获得邮件服务器的授权码,这里以qq邮箱为例,展示获取授权码的过程:

成功后会出现 

POM引入依赖 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置邮箱基本信息

spring:
 mail:
    # 配置 SMTP 服务器地址
   host: smtp.qq.com
    # 发送者邮箱
   username: 877910962@qq.com
    # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
   password: izkmheghgpvmbfeg
    # 默认的邮件编码为UTF-8
   default-encoding: UTF-8
   properties:
     mail:
       smtp:
          #需要验证用户名密码
         auth: true
       starttls:
        # 设置为配置SMTP连接的属性。要使用STARTTLS,必须设置以下属性
         enable: true
         required: true

注意:

1、126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994

2、163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994

3、yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994

4、qq邮箱SMTP服务器地址:smtp.qq.com,端口号465或587

编写接口 

@GetMapping("sendMail")
    public void sendEmail(@RequestBody List<AlarmMessage> alarmMessages) {
        alarmMessages.forEach(info->{
            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
            // 发件人
          simpleMailMessage.setFrom("877910962@qq.com");
            // 收件人
          simpleMailMessage.setTo("877910962@qq.com");
            // 邮件主题
          simpleMailMessage.setSubject(info.getScope());
            // 邮件内容
          simpleMailMessage.setText(info.getAlarmMessage());
          javaMailSender.send(simpleMailMessage);
       });
   }

实时效果反馈 1.简单的邮件协议_____。

A RPC

B HTTP

C TCP

D SMTP

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

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

相关文章

mybatisPlus进阶篇

文章目录 映射自动映射规则表映射字段映射字段失效视图属性 条件构造器条件构造器介绍 等值查询eqallEqne 范围查询gtge(>)lt(<)le(<)betweennotBetween 模糊查询likenotLikelikeLeftlikeRight 判空查询isNullisNotNull 包含查询innotIninSqlnotInSql 分组查询groupBy…

【Java基础教程】(四十七)网络编程篇:网络通讯概念,TCP、UDP协议,Socket与ServerSocket类使用实践与应用场景~

Java基础教程之网络编程 &#x1f539;本节学习目标1️⃣ 网络编程的概念&#x1f50d; TCP和 UDP协议 2️⃣ Socket 与ServerSocket 类3️⃣ 网络编程实战——Echo 程序4️⃣ 应用场景&#x1f33e; 总结 &#x1f539;本节学习目标 了解多线程与网络编程的操作关系&#xff…

JavaWeb黑马程序员——数据库相关概念

本文前提 这是黑马程序员JavaWeb视频里的笔记资源&#xff0c;我只是照搬过来以便于日后复习。 视频链接&#xff1a;https://www.bilibili.com/video/BV1Qf4y1T7Hx?p3&vd_sourced4bb8e491e28c81c780f2db9d6123a41 MySQL基础 今日目标&#xff1a; 完成MySQL的安装及登…

如何利用JMeter测试带有Token参数的POST接口

JMeter有一个很强大的功能就是可以用来做接口测试。 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系…

如何将路径字符串数组(string[])转成树结构(treeNode[])?

原文链接&#xff1a;如何将路径字符串数组(string[])转成树结构(treeNode[])&#xff1f; 需求 这里的UI使用的是Element-Plus。 将一个路径字符串数组&#xff08;当然也可能是其他目标字符串数组&#xff09;&#xff0c;渲染成树。 /*source:/a/b/c/d/e/a/b/e/f/g/a/b/h/a…

深入浅出对话系统——闲聊对话系统

引言 闲聊对话系统也很多别名 聊天机器人ChatbotSocial ChatbotChit-chat botConversational AI开放领域对话系统 实现方法 现在闲聊对话系统一般有两种主要的实现方法 检索式对话系统生成式对话系统 可以任务闲聊对话系统也是一个函数 y f ( x ) yf(x) yf(x)&#xff0…

6-Linux的磁盘分区和挂载

Linux的磁盘分区和挂载 Linux分区查看所有设备的挂载情况 将磁盘进行挂载的案例增加一块磁盘的总体步骤1-在虚拟机中增加磁盘2- 分区3-格式化分区4-挂载分区5-进行永久挂载 磁盘情况查询查询系统整体磁盘使用情况查询指定目录的磁盘占用情况 磁盘情况-工作实用指令统计文件夹下…

【Docker】Docker网络之五大网络模式

Docker网络 1.Docker网络2.Docker的网络模式3.网络模式详解3.1 host模式3.2 container模式3.3 none模式3.4 bridge模式3.5 自定义网络模式 4.docker网络模式知识点总结 1.Docker网络 Docker网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(dock…

Cesium态势标绘专题-圆角矩形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

RNN架构解析——传统RNN模型

目录 传统RNN的内部结构图使用RNN优点和缺点 传统RNN的内部结构图 使用RNN rnnnn.RNN(5,6,1) #第一个参数是输入张量x的维度&#xff0c;第二个是隐藏层维度&#xff0c;第三层是隐藏层的层数 input1torch.randn(1,3,5) #第一个是输入序列的长度&#xff0c;第二个是批次的样本…

FPGA设计时序分析二、建立/恢复时间

目录 一、背景知识 1.1 理想时序模型 1.2 实际时序模型 1.2.1 时钟不确定性 1.2.2 触发器特性 二、时序分析 2.1 时序模型图 ​2.2 时序定性分析 一、背景知识 之前的章节提到&#xff0c;时钟对于FPGA的重要性不亚于心脏对于人的重要性&#xff0c;所有的逻辑运算都离开…

[start] m40 test

software & update 470 drive version # cd /etc/apt # mv sources.list sources.list.bak # sudo vi /etc/apt/sources.list # 默认注释了源码镜像以提高 apt update 速度&#xff0c;如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ja…

供应商管理平台:高效整合资源,提升供应链效能

随着全球市场竞争的不断升级&#xff0c;企业对供应商管理的重要性越来越重视。而供应商管理平台作为一种高效整合资源、提升供应链效能的工具&#xff0c;对于企业来说意义深远。本文将围绕供应商管理平台的概念、优势以及应用&#xff0c;探讨其在提升供应商管理和优化供应链…

面向对象编程:多态性的理论与实践

文章目录 1. 修饰词和访问权限2. 多态的概念3. 多态的使用现象4. 多态的问题与解决5. 多态的意义 在面向对象编程中&#xff0c;多态是一个重要的概念&#xff0c;它允许不同的对象以不同的方式响应相同的消息。本文将深入探讨多态的概念及其应用&#xff0c;以及在Java中如何实…

Docker 网络端口映射 四大网络模式

Docker 网络端口映射 Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默认网…

爆肝整理,接口测试方法总结+常问面试题(答案)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 理想的测试流程 …

flask路由添加参数

flask路由添加参数 在 Flask 中&#xff0c;可以通过两种方式在路由中添加参数&#xff1a;在路由字符串中直接指定参数&#xff0c;或者通过 request 对象从请求中获取参数。 在路由字符串中指定参数&#xff1a;可以将参数直接包含在路由字符串中。参数可以是字符串、整数、…

8-js高级-6(promise)

一 Promise 的理解和使用 1 Promise 是什么? 理解 抽象表达: Promise 是一门新的技术(ES6 规范)Promise 是 JS 中进行异步编程的新解决方案 (备注&#xff1a;旧方案是单纯使用回调函数) 具体表达: 从语法上来说: Promise 是一个构造函数从功能上来说: promise 对象用来…

vue3 实现排序按钮

需求背景解决效果index.vue 需求背景 需要实现一个复用性&#xff0c;是提供表单顺倒排序的按钮 解决效果 index.vue <!--/*** author: liuk* date: 2023/7/25* describe: 排序按钮*/--> <template><div class"sort-fn"><span :class"[…

记一次完整体系的攻防演练

准备工作&#xff1a; 1&#xff0c;在客户的内网环境部署一个Windows7系统&#xff0c;在这个系统上把finecms这个应用部署上去。把finecms安装之后&#xff0c;和客户沟通&#xff0c;把这个应用的地址映射到公网上去。 2&#xff0c;其次&#xff0c;没有条件的话&#xff0…