使用skywalking进行go的接口监控和报警

安装

helm upgrade --install skywalking ./skywalking-v1 --namespace skywalking --create-namespace

查看安装结果

kubectl get pod -n skywalking
NAME                             READY   STATUS        RESTARTS      AGE
elasticsearch-6c4ccbf99f-ng6sk   1/1     Running       0             18m
oap-f945bcff7-wvvs5              1/1     Running       3 (18m ago)   18m
plugin-app-6c75f789-nthdb        1/1     Terminating   0             18m
plugin-app-f97cd4998-dq8dz       1/1     Running       0             10s
skywalking-ui-8b9f8fcb-f6r8f     1/1     Running       0             18m

go webhooks 转发到钉群或者微信群

我现在让他执行脚本因为这样可以根据你们自己自定义吧,这是公开解决方案

package mainimport ("bytes""encoding/json""fmt""io/ioutil""net/http""net/url""time""github.com/gin-gonic/gin"
)type AlarmData struct {ScopeId      int      `json:"scopeId"`Scope        string   `json:"scope"`Name         string   `json:"name"`Id0          string   `json:"id0"`Id1          string   `json:"id1"`RuleName     string   `json:"ruleName"`AlarmMessage string   `json:"alarmMessage"`Tags         []string `json:"tags"`StartTime    int64    `json:"startTime"`
}// 配置常量
const (DIALOG_ID = "xx"TOKEN     = "xx"POST_URL  = "xx"VERSION   = "0.22.0"SILENCE   = "yes"
)func sendMessage(text string) (string, error) {form := url.Values{}form.Add("dialog_id", DIALOG_ID)form.Add("silence", SILENCE)form.Add("text", text)req, err := http.NewRequest("POST", POST_URL, bytes.NewBufferString(form.Encode()))if err != nil {return "", err}req.Header.Set("Content-Type", "application/x-www-form-urlencoded")req.Header.Set("version", VERSION)req.Header.Set("token", TOKEN)client := &http.Client{}resp, err := client.Do(req)if err != nil {return "", err}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {return "", err}return string(body), nil
}func main() {r := gin.Default()r.POST("/notify", func(c *gin.Context) {bodyBytes, err := ioutil.ReadAll(c.Request.Body)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": "读取请求体失败"})return}var alarms []AlarmDataif err := json.Unmarshal(bodyBytes, &alarms); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": "JSON 格式错误"})return}for _, alarm := range alarms {// 构建消息文本message := fmt.Sprintf(`[报警信息]
告警名称: %s
规则名称: %s
报警内容: %s
作用域: %s (%d)
对象名称: %s
对象ID0: %s
对象ID1: %s
标签: %v
开始时间: %s`,alarm.Name,alarm.RuleName,alarm.AlarmMessage,alarm.Scope,alarm.ScopeId,alarm.Name,alarm.Id0,alarm.Id1,alarm.Tags,time.UnixMilli(alarm.StartTime).Format("2006-01-02 15:04:05"),)// 发送消息result, err := sendMessage(message)if err != nil {fmt.Println("发送失败:", err)} else {fmt.Println("发送成功,响应:", result)}// 本地日志打印fmt.Println("---- Alarm ----")fmt.Println(message)}c.JSON(http.StatusOK, gin.H{"message": "报警数据已处理"})})r.Run(":8080")
}

报警配置

# 示例告警规则
rules:# 唯一的规则名,必须以 `_rule` 结尾service_resp_time_rule:metrics-name: service_resp_timeop: ">"threshold: 1000period: 10count: 3silence-period: 5message: 服务 {name} 的响应时间在过去10分钟中有3分钟超过了1000毫秒。service_sla_rule:metrics-name: service_slaop: "<"threshold: 8000period: 10count: 2silence-period: 3message: 服务 {name} 的成功率在过去10分钟中有2分钟低于80%。service_resp_time_percentile_rule:metrics-name: service_percentileop: ">"threshold: 1000,1000,1000,1000,1000period: 10count: 3silence-period: 5message: 服务 {name} 在过去10分钟中有3分钟触发了百分位响应时间告警,p50、p75、p90、p95、p99 超过1000毫秒。service_instance_resp_time_rule:metrics-name: service_instance_resp_timeop: ">"threshold: 1000period: 10count: 2silence-period: 5message: 服务实例 {name} 的响应时间在过去10分钟中有2分钟超过了1000毫秒。database_access_resp_time_rule:metrics-name: database_access_resp_timethreshold: 1000op: ">"period: 10count: 2message: 数据库访问 {name} 的响应时间在过去10分钟中有2分钟超过了1000毫秒。endpoint_relation_resp_time_rule:metrics-name: endpoint_relation_resp_timethreshold: 1000op: ">"period: 10count: 2message: 端点关系 {name} 的响应时间在过去10分钟中有2分钟超过了1000毫秒。#  激活端点相关的指标告警会比服务和实例的告警消耗更多内存。
#  因为端点数量通常远远多于服务和实例。
#
#  endpoint_avg_rule:
#    metrics-name: endpoint_avg
#    op: ">"
#    threshold: 1000
#    period: 10
#    count: 2
#    silence-period: 5
#    message: 端点 {name} 的平均响应时间在过去10分钟中有2分钟超过了1000毫秒。webhooks:
#  - http://127.0.0.1/notify/
- 'http://10.20.8.188:8080/debug'
#  - http://127.0.0.1/go-wechat/

部署go服务器

服务器在我git上,你们不需要打包,我也懒得去打包,所有你们直接下载到pod里面运行就行

package mainimport ("github.com/gin-gonic/gin"_ "github.com/apache/skywalking-go""net/http""time"
)func main() {// 创建一个 Gin 路由实例r := gin.Default()// 立即响应的接口r.GET("/immediate", func(c *gin.Context) {// 返回立即响应的消息c.JSON(http.StatusOK, gin.H{"message": "This is an immediate response",})})// 延迟响应的接口r.GET("/delayed", func(c *gin.Context) {// 模拟延迟,等待 5 秒time.Sleep(5 * time.Second)// 延迟之后的响应c.JSON(http.StatusOK, gin.H{"message": "This response is delayed by 5 seconds",})})// 启动 HTTP 服务,监听在 8080 端口r.Run(":8080")
}
#!/bin/bash
go build -toolexec=/Users/mac-512/script/testpro/apache-skywalking-go-0.5.0-bin/bin/skywalking-go-agent-0.5.0-darwin-amd64 -a -ldflags="-s -w" -o testproexport SW_AGENT_NAME="testpro200"
export SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE="xxx:11800"
export SW_AGENT_REPORTER_GRPC_CHECK_INTERVAL=20
./testpro

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

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

相关文章

2025年- H16-Lc124-169.多数元素(技巧)---java版

1.题目描述 2.思路 3.代码实现 import java.util.Arrays;public class H169 {public int majorityElement(int[] nums) {Arrays.sort(nums);int nnums.length;return nums[n/2];}public static void main(String[] args){H169 test07new H169();int[] nums{2,2,1,1,1,2,2};int…

k8s术语pod

Pod概览 理解Pod Pod是kubernetes中你可以创建和部署的最小也是最简的单位,pod代表着集群中运行的进程。 Pod中封装着应用的容器(有的情况下是好几个容器),存储、独立的网络IP,管理容器如何运行的策略选项。Pod代表着部署的一个单位:kubemetes中应用的一个实例,可能由一个…

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》章节思维导图

今天看到了几本书的思维导图&#xff0c;感触颇深&#xff0c;如果思维导图只是章节安排&#xff0c;这样的思维导图有毛用。 给出《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》实质内容章节的思维导图。思维导图的优势是逻辑关系和知识…

Nacos简介—4.Nacos架构和原理二

大纲 1.Nacos的定位和优势 2.Nacos的整体架构 3.Nacos的配置模型 4.Nacos内核设计之一致性协议 5.Nacos内核设计之自研Distro协议 6.Nacos内核设计之通信通道 7.Nacos内核设计之寻址机制 8.服务注册发现模块的注册中心的设计原理 9.服务注册发现模块的注册中心的服务数…

【MySQL】复合查询与内外连接

目录 一、复合查询 1、基本查询回顾&#xff1a; 2、多表查询&#xff1a; 3、自连接&#xff1a; 4、子查询&#xff1a; 单列子查询 多行子查询&#xff1a; 多列子查询&#xff1a; 在from语句中使用子查询&#xff1a; 5、合并查询&#xff1a; union&#xff1…

后端工程师需要掌握哪些基础技能

后端工程师是构建系统核心逻辑的关键角色&#xff0c;需要掌握从基础到进阶的完整技术栈。以下是结合国内实际开发需求的技能树整理&#xff0c;附带学习建议&#xff1a; 一、编程语言&#xff08;至少精通1-2种&#xff09; # 国内主流选择&#xff08;按优先级排序&#x…

万字重谈C++——继承篇

继承的概念及定义 继承的概念 继承&#xff08;Inheritance&#xff09;机制作为面向对象程序设计中最核心的代码复用方式&#xff0c;它不仅允许开发人员在保留基础类特性的前提下进行功能扩展&#xff08;从而创建新的派生类&#xff09;&#xff0c;更重要的是体现了面向对…

移动光猫 UNG853H 获取超级管理员账号密码

注&#xff1a;电脑连接光猫&#xff0c;网线不要接2口&#xff08;2口一般是IPTV网口&#xff09; 首先浏览器打开 192.168.1.1&#xff0c;使用光猫背面的用户名密码登录。&#xff08;user用户名&#xff09; 然后在浏览器中另开一个窗口打开以下地址&#xff1a; http://…

ActiveMQ 可靠性保障:消息确认与重发机制(二)

ActiveMQ 重发机制 重发机制的原理与触发条件 ActiveMQ 的重发机制是确保消息可靠传输的重要手段。当消息发送到 ActiveMQ 服务器后&#xff0c;如果消费者由于某些原因未能成功处理消息&#xff0c;ActiveMQ 会依据配置的重发策略&#xff0c;将消息重新放入队列或主题中&am…

oceanbase设置密码

docker run -p 2881:2881 --name oceanbase-ce -e MODEmini -d oceanbase/oceanbase-ce:4.2.1.10-110010012025041414 先进入镜像再连接数据库的方式 进入镜像 docker exec -it oceanbase-ce bash 修改数据库密码 ALTER USER ‘root’ IDENTIFIED BY ‘123456’; 无密码 obc…

使用Python和Pandas实现的Azure Synapse Dedicated SQL pool权限检查与SQL生成用于IT审计

下面是使用 Python Pandas 来提取和展示 Azure Synapse Dedicated SQL Pool 中权限信息的完整过程&#xff0c;同时将其功能以自然语言描述&#xff0c;并自动构造所有权限设置的 SQL 语句&#xff1a; ✅ 步骤 1&#xff1a;从数据库读取权限信息 我们从数据库中提取与用户、…

tiktok web X-Bogus X-Gnarly 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 部分python代码 import req…

目标文件的段结构及核心组件详解

目标文件&#xff08;如 .o 或 .obj&#xff09;是编译器生成的中间文件&#xff0c;其结构遵循 ELF&#xff08;Linux&#xff09;或 COFF&#xff08;Windows&#xff09;格式。以下是其核心段&#xff08;Section&#xff09;和关键机制的详细解析&#xff1a; 1. 目标文件的…

【软件设计师:复习】上午题核心知识点总结(一)

一、数据结构与算法(高频) 1. 线性数据结构 数组与链表 数组:随机访问(O(1))、插入/删除(O(n))、内存连续。链表:单向链表、双向链表、循环链表;插入/删除(O(1))、随机访问(O(n))。典型问题: 合并两个有序链表(LeetCode 21)。链表反转(迭代/递归实现)。栈与…

【ROS2】 核心概念2——功能包package

官方英文文档&#xff1a;Creating a package — ROS 2 Documentation: Humble documentation 中文参考&#xff1a;古月ROS2 功能包讲解 - 图书资源 省流&#xff0c;就学习一个命令 ros2 pkg create --build-type <build-type> <package_name> ROS2的重要概念…

Java内存对象实现聚合查询

文章目录 什么是聚合查询excel表格演示插入透视表透视表操作 sql聚合查询创建表和插入数据按照国家业务类型设备类型统计总销量按设备类型统计总销量 Java内存对象聚合查询普通对象方式创建对象聚合查询条件查询方法调用方式结果 Record对象方式Recor对象创建对象聚合查询条件查…

VSCode开发调试Python入门实践(Windows10)

我的Windows10上的python环境是免安装直接解压的Python3.8.x老版本&#xff0c;可参见《Windows下Python3.8环境快速安装部署。 1. 安装VSCode 在Windows 10系统上安装Visual Studio Code&#xff08;VS Code&#xff09;是一个简单的过程&#xff0c;以下是详细的安装方法与…

Tomcat DOS漏洞复现(CVE-2025-31650)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…

使用Qt QAxObject解决Visual Fox Pro数据库乱码问题

文章目录 使用Qt QAxObject解决Visual Fox Pro数据库乱码问题一、问题背景&#xff1a;ODBC读取DBF文件的编码困境二、核心方案&#xff1a;通过QAxObject调用ADO操作DBF1. 技术选型&#xff1a;为什么选择ADO&#xff1f;2. 核心代码解析&#xff1a;QueryDataByAdodb函数3. 连…

HTTP知识速通

一.HTTP的基础概念 首先了解HTTP协议&#xff0c;他是目前主要使用在应用层的一种协议 http被称为超文本传输协议 而https则是安全的超文本传输协议 本章节的内容首先就是对http做一个简单的了解。 HTTP是一种应用层协议&#xff0c;是基于TCP/IP协议来传递信息的。 其中…