当前位置: 首页 > news >正文

Skywalking告警配置+简易邮件告警应用配置(保姆级)

Skywalking告警配置+简易邮件告警应用配置

前言:

前文:SkyWalking + Elasticsearch8 容器化部署指南:国内镜像加速与生产级调优_skywalking+es-CSDN博客

​ SKywalking Agent配置+Oracle监控插件安装指南-CSDN博客

Skywalking版本:V10.2.0
Skywalking Agent版本:V9.4.0

一.告警规则配置及解释

1.指标解释
全局指标all_p99, 所有服务响应时间的 p99 值
all_p95
all_p90
all_p75
all_p70
all_heatmap, 所有服务响应时间的热点图
服务指标service_resp_time, 服务的平均响应时间
service_sla, 服务的成功率
service_cpm, 服务每分钟调用次数
service_p99, 服务响应时间的 p99 值
service_p95
service_p90
service_p75
service_p50
服务实例指标service_instance_sla, 服务实例的成功率
service_instance_resp_time, 服务实例的平均响应时间
service_instance_cpm, 服务实例每分钟调用次数
端点指标endpoint_cpm, 端点每分钟调用次数
endpoint_avg, 端点平均响应时间
endpoint_sla, 端点成功率
endpoint_p99, 端点响应时间的 p99 值
endpoint_p95
endpoint_p90
endpoint_p75
endpoint_p50
JVM 指标, JVM 相关的指标, 只有当 javaagent 启用时才有效instance_jvm_cpu
instance_jvm_memory_heap
instance_jvm_memory_noheap
instance_jvm_memory_heap_max
instance_jvm_memory_noheap_max
instance_jvm_young_gc_time
instance_jvm_old_gc_time
instance_jvm_young_gc_count
instance_jvm_old_gc_count
服务关系指标, 代表服务之间调用的指标 指标的 ID 只能在拓扑图查询中获取service_relation_client_cpm, 在客户端每分钟检测到的调用次数
service_relation_server_cpm, 在服务端每分钟检测到的调用次数
service_relation_client_call_sla, 在客户端检测到的成功率
service_relation_server_call_sla, 在服务端检测到的成功率
service_relation_client_resp_time, 在客户端检测到的平均响应时间
service_relation_server_resp_time, 在服务端检测到的平均响应时间
端点关系指标, 代表相互依赖的端点之间的指标. 只有在追踪代理启用时有效. 指标 ID 只能在拓扑查询中获得.endpoint_relation_cpm
endpoint_relation_resp_time
2.详细规则配置

因前文中部署方法为docker,故只需要修改容器外部的告警配置文件。

image-20250911182432851

目前的告警配置如下:

rules:service_resp_time_rule:expression: sum(service_resp_time > 2000) >= 5period: 15silence-period: 30tags:level: WARNINGteam: platformmessage: "【WARNING】Service {name} 平均响应 > 2000ms(15 分钟内 >=5 次)。"# 监控目标:服务成功率下降(轻度)。#含义:在“最近 15 分钟”里,至少 3 次服务成功率低于 90%。service_sla_warning_rule:expression: sum(service_sla < 9000) >= 3period: 15silence-period: 45tags:level: WARNINGteam: platformmessage: "【WARNING】Service {name} 成功率 < 90%(15 分钟内 >=3 次)。"#监控目标:服务成功率下降(重度)。#含义:在“最近 15 分钟”里,至少 3 个次成功率低于 90%。service_sla_critical_rule:expression: sum(service_sla < 8500) >= 2period: 10silence-period: 60tags:level: CRITICALteam: platformmessage: "【CRITICAL】Service {name} 成功率 < 85%(10 分钟内 >=2 次)。"hooks: ["webhook.mail"]#监控目标:服务尾延迟恶化(p95)。#含义:最近 10 分钟内,p95(95% 的请求)超过3s ≥ 2service_resp_time_percentile_rule:expression: sum(service_percentile{p='95'} > 3000) >= 2period: 10silence-period: 45tags:level: CRITICALteam: backendmessage: "【CRITICAL】Service {name} p95 > 3000ms(10 分钟内 >=2 次)。"hooks: ["webhook.mail"]#监控目标:某个实例平均响应时间升高。#含义:最近 15 分钟内,至少 3 次该实例均值 > 2s。service_instance_resp_time_rule:expression: sum(service_instance_resp_time > 2000) >= 3period: 15silence-period: 30tags:level: WARNINGteam: opsmessage: "【WARNING】实例 {name} 平均响应 > 2000ms(15 分钟内 >=3 次)。"database_access_resp_time_rule:expression: sum(database_access_resp_time > 2000) >= 3period: 15silence-period: 60tags:level: CRITICALteam: dbamessage: "【CRITICAL】DB {name} 响应 > 2000ms(15 分钟内 >=3 次,疑似慢 SQL)。"hooks: ["webhook.mail"]#服务每分钟调用次数(监控整个环境)service_offline_rule:expression: sum(service_cpm == 0) >= 15period: 15silence-period: 60tags:level: CRITICALteam: platformmessage: "【CRITICAL】Service {name} 连续 15 分钟无流量(疑似掉线/假死)。"hooks: ["webhook.mail"]#service_instance_cpm, 服务实例每分钟调用次数(监控单个服务)service_instance_offline_rule:expression: sum(service_instance_cpm == 0) >= 5period: 10silence-period: 60tags:level: WARNINGteam: opsmessage: "【WARNING】Instance {name} 连续 5 分钟无流量(疑似掉线/假死)。"hooks: ["webhook.mail"]
hooks:webhook:mail:#is-default: trueurls:- http://<your IP>:9000/sendheaders:X-Auth-Token: "changeme-optional"

关键配置参数说明

  • expression:告警触发条件的表达式
  • period:统计时间窗口(分钟)
  • silence-period:静默期(分钟),避免告警风暴
  • tags:告警标签,用于分类和筛选
  • level:告警级别(WARNING/CRITICAL)
  • team:负责处理该告警的团队
  • hooks:告警触发时调用的 Webhook

配置成功后重启Skywalking-oap服务

docker restart skywalking-oap

确定没有报错后,即可再告警页面看见所配置的告警信息

image-20250911184021923

二.邮件告警通知配置以及邮件告警服务部署

1.告警服务代码和镜像构建

背景:在尝试过官方的钉钉告警配置后一直无法生效,改为邮件告警形式,Skywalking邮件告警需要单独写一个告警服务。此处为Python。

import os
import smtplib
import ssl
from typing import List, Union
from flask import Flask, request, jsonify
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formatdate, make_msgidapp = Flask(__name__)# 环境变量配置(Docker 部署时传入)
SMTP_HOST = os.getenv("SMTP_HOST", "smtp.qq.com")
SMTP_PORT = int(os.getenv("SMTP_PORT", 465))
SMTP_USER = os.getenv("SMTP_USER", "")
SMTP_PASS = os.getenv("SMTP_PASS", "")
MAIL_FROM = os.getenv("MAIL_FROM", SMTP_USER)
SUBJECT_PREFIX = os.getenv("SUBJECT_PREFIX", "[SkyWalking]")
API_TOKEN = os.getenv("API_TOKEN", "")# 默认收件人(支持环境变量配置)
MAIL_TO = os.getenv("MAIL_TO", "")
MAIL_CC = os.getenv("MAIL_CC", "")
MAIL_BCC = os.getenv("MAIL_BCC", "")@app.route("/send", methods=["POST"])
def send_mail():# 身份验证(若配置 Token)if API_TOKEN and request.headers.get("X-Auth-Token") != API_TOKEN:return jsonify({"error": "Unauthorized"}), 401# 解析 SkyWalking 告警数据data = request.get_json()# 邮件内容构建和发送逻辑# ...if __name__ == "__main__":app.run(host="0.0.0.0", port=9000)

以下是镜像打包时的Dockerfile:

FROM python:3.11-slim
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
RUN pip install --no-cache-dir flask gunicorn
WORKDIR /app
COPY app.py /app/app.py
EXPOSE 9000
CMD ["gunicorn", "-b", "0.0.0.0:9000", "-w", "1", "--threads", "2", "app:app"]

把两个文件放置于同一目录,如下。

image-20250911201206027

#执行打包命令
docker build -t mail-relay:1.0.0 .

然后部署服务,以下为运行的docker-compose.yml

services:mail-relay:image: mail-relay:1.0.0container_name: mail-relayrestart: unless-stoppedenvironment:SMTP_HOST: <smtp邮箱服务地址>SMTP_PORT: <smtp邮箱端口>SMTP_USER: <邮箱账号>SMTP_PASS: <邮箱密钥>MAIL_FROM: <邮箱>SUBJECT_PREFIX: "[SkyWalking]"API_TOKEN: "changeme-optional"MAIL_TO: "<邮箱接收者>,<邮箱接收者>"MAIL_CC: "<邮箱抄送者>"MAIL_BCC: ""ports:- "9000:9000"

运行成功后如下:

image-20250911202200732

image-20250911202234857

2.Skywalking告警配置

在规则配置处可见文末有一处配置如下

hooks:webhook:mail:#is-default: trueurls:- http://<your IP>:9000/sendheaders:X-Auth-Token: "changeme-optional"

如果需要每一个告警都通过邮件告知,则无需注释is-default: true。注释后,告警规则中包含hooks: ["webhook.mail"]配置的才会通过邮件告警通知。

邮件告警输出如下:
image-20250911203118439

image-20250911203043854

至此,Skywalking部署,插件安装至告警,配置完毕。

附件:告警代码文件下载地址


文章转载自:

http://N8BCnDSO.wnwjf.cn
http://G6wmORfd.wnwjf.cn
http://SR4SMm6E.wnwjf.cn
http://THJAx1j5.wnwjf.cn
http://lH66mAAd.wnwjf.cn
http://cOBQmzOb.wnwjf.cn
http://u4Qk9eaS.wnwjf.cn
http://vmSi7jnv.wnwjf.cn
http://Zw2MWKP8.wnwjf.cn
http://L93J3u9L.wnwjf.cn
http://7LpWEldk.wnwjf.cn
http://MdcKbj4p.wnwjf.cn
http://kY9nc5qj.wnwjf.cn
http://i7RvU7TY.wnwjf.cn
http://ktoBrTRR.wnwjf.cn
http://5VTfd7pn.wnwjf.cn
http://KJ8PFu3O.wnwjf.cn
http://UgbVSmIn.wnwjf.cn
http://9u7oWa7K.wnwjf.cn
http://AZHz1hli.wnwjf.cn
http://FeciN6j4.wnwjf.cn
http://qCFirEmb.wnwjf.cn
http://x8YevwqD.wnwjf.cn
http://qUXvrsJA.wnwjf.cn
http://4PaxQJF4.wnwjf.cn
http://nSU4gk6E.wnwjf.cn
http://ikpY68Eg.wnwjf.cn
http://MoKANvJT.wnwjf.cn
http://Qb5NWZyo.wnwjf.cn
http://KwitsvDw.wnwjf.cn
http://www.dtcms.com/a/378830.html

相关文章:

  • 【matlab】YALMIP、GLPK安装资源及安装方法
  • modbus学习
  • 创建GLFW窗口,开启OpenGL之路
  • (网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解
  • 如何提升研发文档的检索体验与效率
  • 分布式事务性能优化:从故障现场到方案落地的实战手记(三)
  • R-Zero:大语言模型的自进化革命,突破数据依赖迈向自主智能
  • RL【8】:Value Function Approximation
  • StringJoiner
  • 【知识堂】制造业与物流数字化全景图:系统缩写大全与专业名词速查手册
  • 项目1——单片机程序审查,控制系统安全漏洞分析和改进建议
  • 中断上半部与中断下半部
  • 吱吱企业即时通讯以安全为基,重塑安全办公新体验
  • ctfshow_web13-----------文件上传.user.ini
  • 112. 路径总和
  • 四,基础开发工具(下)
  • Docker+jenkinsPipeline 运行实现python自动化测试
  • Android图案解锁绘制
  • 分布式事务性能优化:从故障现场到方案落地的实战手记(一)
  • JVM第一部分
  • websocket和socket io的区别
  • codebuddy ai cli安装教程
  • MySQL5.7.44保姆级安装教程
  • 正则表达式基础
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pandas-profiling’问题
  • GRPOConfig中参数num_generations
  • 电源线束选型
  • 系统稳定性保障:研发规约V1.0
  • Day13 | Java多态详解
  • hbuilderx配置微信小程序开发环境