Spring Cloud系列—SkyWalking告警和飛書接入

上篇文章:

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 服…