场景二:新版本引入质量问题智能告警怎么做到的?检测到异常后,系统自动从版本、问题等多个维度做归因分析,找出"罪魁祸首"——告警报告里直接告诉你答案。场景三:流量较少场景"假飙升"智能告警怎么做到的? 传统告警要么"一刀切报",要么"一刀切不报"。智能告警的做法:交给 AI 研判。 智能告警做了什么:✅ 自动检测到异常✅ 归因分析发现新版本是元凶✅ 告警报告直接附带 TOP5 问题列表 + 新增/劣化 issue 对比团队收益:从"收到告警 → 自己去查"变成"收到告警 → 直接看报告就知道问题在哪 传统阈值告警要么忽略,要么频繁打扰。 TOP 问题清单,研发打开即可定位结论:智能告警不只是"率涨了就报"——它会告诉你涨了多少、偏了多少、是哪些新问题导致的,真正做到"一条告警解决一个问题"。
[watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk =][watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk 2, 报警组件 AlertManager 2.1 什么是 AlertManager? 由于告警规则中设置了1m的等待时间,当前告警状态为PENDING,如下图所示 [watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se ,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=]
在讲解prometheus的时候我们说其具有告警的特征,也就是prometheus在收集监控数据的时候会根据规则判断相应指标是否达到了告警上线然后使用推送的方式进行告警。 但是要明确的一点是prometheus的仅仅是用来收集和查询监控数据的,要让我们的prometheus具有告警功能还需要prometheus体系的另一个组件altermanger,这块我们大概的讲解一下 主要用来管理告警信息发送的规则,也就是说给谁发,用那种方式。 这块作者简单测试了一下监控mysql的线程数的告警。首先配置一下prometheus的数据收集的规则和push告警信息的地址。 rules: - alert: "连接数报警" expr: mysql_global_variables_mysqlx_max_connections > 90 #连接数大于90就告警 并在prometheus的alter栏目中查看告警是否触发。发现已经触发了告警配置。 在配置好prometheus的告警之后,我们需要配置altermanager的告警信息路由规则。
这里我们要介绍另外一种形式的用户提醒:告警。 这里从结果中可以看到,我们对告警的定义就完成了。 Python告警抑制 在前面一篇博客中我们介绍了异常的抑制,同样的我们也可以抑制告警信息。 但是这里用抑制来形容这个行为可能并不是很合适,只是一个习惯性的叫法,因为告警本身就不影响程序的正常运行,应该说只是过滤掉告警信息的打印输出。 最后我们发现,告警被成功抑制,并且告警之后的程序也能够正常的运行。 总结概要 告警和异常信息的定义与处理,在网络编程项目和各种实际计算的场景中都会被用到。 更多的时候是规范的要求,我们可能需要修改异常和告警所继承的类型。同时对于异常和告警信息,我们也能够有方案去进行抑制,更加适配各种不同的场景需求。
Python告警定义 这里有一篇博客比较全面的介绍了在python中定义告警的类别和方法,这里我们选取一种最容易使用也最常用的方法,直接使用warnings.warn的功能: 1 2 3 4 5 6 7 我们先来看下有异常情况下所抛出的告警信息: 1 2 3 [dechin@dechin-manjaro warning]$ python3 warning_test.py -w warning_test.py 另外再看一下没有满足判定条件情况下的输出: 1 2 [dechin@dechin-manjaro warning]$ python3 warning_test.py -n No warnings! 告警抑制的方案也很简单,warnings.filterwarnings就自带了这个功能,具体代码实现如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # warning_test.py 歌曲下载 1 2 [dechin@dechin-manjaro warning]$ python3 warning_test.py -w Continue to running.
记录了prometheus 告警指标 主机和硬件监控 可用内存指标 主机中可用内存容量不足 10% - alert: HostOutOfMemory expr: node_memory_MemAvailable_bytes : HostUnusualNetworkThroughputIn expr: sum by (instance) (rate(node_network_receive_bytes_total[2m HostUnusualNetworkThroughputOut expr: sum by (instance) (rate(node_network_transmit_bytes_total[2m - alert: HostUnusualDiskReadRate expr: sum by (instance) (rate(node_disk_read_bytes_total[2m])) / - alert: HostUnusualDiskWriteRate expr: sum by (instance) (rate(node_disk_written_bytes_total[2m
记录了prometheus 告警指标 主机和硬件监控 可用内存指标 主机中可用内存容量不足 10% - alert: HostOutOfMemory expr: node_memory_MemAvailable_bytes : HostUnusualNetworkThroughputIn expr: sum by (instance) (rate(node_network_receive_bytes_total[2m HostUnusualNetworkThroughputOut expr: sum by (instance) (rate(node_network_transmit_bytes_total[2m - alert: HostUnusualDiskReadRate expr: sum by (instance) (rate(node_disk_read_bytes_total[2m])) / - alert: HostUnusualDiskWriteRate expr: sum by (instance) (rate(node_disk_written_bytes_total[2m
测试告警 创建触发器,来实现告警,配置-->主机-->hf-02主机-->创建触发器 名称:系统负载 严重性:警告 表达式: 如下 选择 添加 最终看到如下 然后回到监控中心,主页——>最近20个问题 如果提示为启用中,证明发现问题,正在启用告警,显示问完成,就证明已经发送邮件告警;如图,我们的实验是成功的 查看邮箱,会看到邮件发送 这就表示测试邮件告警成功 这时想要解决这个问题,只要将触发器 系统负载条件数值调整
Prometheus告警简介简介告警能力在Prometheus的架构中被划分为俩个独立的部分.如下图所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算 ,如果满足告警触发条件就会向Alertmanager发送告警信息alertManager作为一个独立的组件,负责接收并处理来自Prometheus Server 的告警信息.Alertmanager可以对这些告警信息进行进一步的处理 的特性Alertmanager除了提供基本的告警通知能力外,还主要提供了如:分组,抑制,以及静默等告警特性:下面来逐一讲解:分组分组机制可以将详细的告警信息合并成一个通知.在某些情况下,比如由于系统宕机导致大量的告警同时被触发 ,在这种情况下分组机制可以将这些被触发的告警合并成一个告警通知,避免一次性接收大量的告警通知,而无法对问题进行快速定位.例如,当集群中有数百个正在运行的服务实例,并且为每一个实例设置了告警规则.加入此时发生了网络故障 ,而将这些告警内聚在一起成为一个通知.告警分组,告警时间,以及告警的接收方式可以通过Alertmanager的配置文件进行配置抑制抑制是指当某一告警发出后,可以停止发送由此告警引发的其他告警的机制.例如
告警设计 通过zabbix api 查询报警信息 (已实现) 通过查询sql 查询告警信息 然后通过转发实现消息推送( 重新定义一个数据库,使用触发器把zabbix 数据库中的告警数据同步到新库,查询新库和平台对接) 重写源码接口 改写源码的消息发送方式. 与平台对接用的 requests 模块 发送URL 具体实现 方案一 通过zabbix api 查询报警信息 (已实现) 方案二 通过查询sql 查询告警信息 然后通过转发实现消息推送 ( 重新定义一个数据库,使用触发器把zabbix数据库中的告警数据同步到新库,查询新库和平台对接) # 添加字段 hostid ## 可以在新库上面拓展字段 # 创建数据库 report 创建表 `events`.eventid=new.eventid; END; $$ DELIMITER ; 方案三 重写源码接口 还没有找到具体的收集告警的代码, (收集数据是在 zabbix_agent
为什么告警总在重复发,有时不重复发,怎么避免 告警会在两种情况下重发 告警 group 列表中告警有变更(增加或者减少) 告警持续到 repeat_interval 配置的重发时间。 当 prometheus 下次扫描告警规则时,发现告警列表中的告警(新增/恢复),才会触发告警。 比如一个 group 的告警 A, B,C 在 30s 触发,聚合到一个告警列表发送。 在下次扫描规则时,A,B,C 持续异常,且没有别的告警,不会发送告警列表;如果存在新告警D,告警列表会加入 D,此时告警列表存在 A, B, C, D,才会发送告警(原列表中告警恢复也会发送)。 解决办法 group 将易变的告警和容易持续异常的告警分到不同的组,发送时组内就不会存在一直是异常的告警。 快速把告警修好。 比如有同组的告警A和告警B,如果A触发告警,会等待30s,如果B在等待时间内也出发告警,会合并在一起发送,如果告警A 触发两次,告警A 发送后,30s 之后在发告警A第二次触发 repeat_interval
运维就要无所不能,无所不会 告警平台设计及告警收敛通用解决方案 先有监控,后有告警。 虽厂商有自动换号机制,但健康检测不可少 级联告警 为告警收敛打基础,减少告警信息,避免告警风暴 告警收敛 特别重要,依次要有告警自愈、级联告警、告警收敛 告警权重 针对不同告警权重,做对应告警策略。 告警分层 分业务、分模块、分团队、分时段,必不可少 告警升级 包括告警通道告警和告警职级升级 四、告警收敛通用解决方案 告警收敛首先要解决的问题是告警风暴! 精细化的案例,如:A业务模块告警只通知A运维,而非通知GROUP组。但没有解决Leader要接受所有告警的场景。 告警抑制 有告警自动抑制功能,需事先做告警级联。上游告警屏蔽下流告警。 告警静默 有手动入口设置告警静默,如常规发布窗口,需有入口关闭告警。如明知A告警会引发B类告警,可以提前关闭B类告警。但不容易解决告警遗忘的问题。如维护期结束,告警静默却没有关闭导致告警无法发出。
远程告警 邮件告警 登录邮箱获取授权码 设置->POP3/SMTP/IMAP->新增授权码 zabbix配置报警媒介 管理->报警媒介类型->email 收件人配置 usersitting --> 报警媒介 配置 变量详解: https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location 飞书告警 编辑告警脚本 vim /usr/lib/zabbix/alertscripts/zabbix_feishu_alarm.py import requests import json import sys if name == 'main': subject = sys.argv[1] content = sys.argv[2] # payload_message = { 'Content-Type': 'application/json' } url = "https://open.feishu.cn/open-apis/bot/v2/
在prometheus的监控系统中,自带就有告警系统,就是alertmanager组件,除了可以在prometheus中配置,也可以在grafna中进行配置邮件的相关信息。 告警。。。 一个系统一天发出2个故障,就已经够了,按照处理时间来算,on call超过2个故障就已经超出了on call人员的处理时间。。。 邮件告警可以认为是可以延迟处理的工单,告警应该出现的原因不同,如果一个告警出现的次数超过3次,那么要么就是屏蔽这个告警,要么就应该找到本质原因,然后进行优化。 邮件告警配置 在进行邮件告警的主要配置在alertmanager容器中: ? 配置文件内容如下: ? 运行alertmanager容器: ? 风言风语 在告警的时候,我们能做什么。。。让告警系统闭嘴是最好的咯。 告警规则的设计,尽量简单,但是又能反映出是什么组件有问题,及相应的处理方法。。。
记录了prometheus 告警指标 主机和硬件监控 可用内存指标 主机中可用内存容量不足 10% - alert: HostOutOfMemory expr: node_memory_MemAvailable_bytes : HostUnusualNetworkThroughputIn expr: sum by (instance) (rate(node_network_receive_bytes_total[2m HostUnusualNetworkThroughputOut expr: sum by (instance) (rate(node_network_transmit_bytes_total[2m - alert: HostUnusualDiskReadRate expr: sum by (instance) (rate(node_disk_read_bytes_total[2m])) / - alert: HostUnusualDiskWriteRate expr: sum by (instance) (rate(node_disk_written_bytes_total[2m
比如你调用的是pymysql ,但pymysql调用了cryptography , 当你的python版本是3.6 的时候就会收到这个告警.解决办法这个告警虽然不影响代码的正常运行, 但是影响了我程序的输出 升级Python这个告警只在python3.6 才有, 所以你可以选择升级python到新版本. 但这可能会比较麻烦. 尤其是那些内网环境2. CryptographyDeprecationWarning__all__ = [ "__version__", "__author__", "__copyright__",]#if sys.version_info[:2] cryptography will remove support for Python 3.6.",# CryptographyDeprecationWarning,# stacklevel=2, # 然后再次执行代码, 就不报这个告警了(我咋感觉以前好像写过)
为什么告警有时发的及时,有时发的慢 数据异常到监控发出告警的时间与多个参数相关,包括采集间隔,扫描间隔,group 发送间隔,告警持续时间 for 等。 pending 状态告警 firing 状态告警 比如服务器内存超过 80%,持续 30s 发送告警。 发送告警阶段如下 12:00:00 服务器内存使用 90%,达到告警值 12:00:10 promethues 开始采集,得到内存监控数据 12:00:20 promethues 开始扫描告警规则,发现内存使用量符合告警规则 12:01:20 promethues 开始第二次扫描告警规则,发现告警持续,计算持续时间超过 30s, 告警状态为 firing,准备发送告警。 比如有同组的告警A和告警B,如果A触发告警,会等待30s,如果B在等待时间内也出发告警,会合并在一起发送,如果告警A 触发两次,告警A 发送后,30s 之后在发告警A第二次触发 repeat_interval
记录一次IO告警分析过程 ? 接到告警,服务器IO飙升,连接服务器,登录服务器查看分析 top命令查看 ? 上面的工具,我们需要自己去分析,去查找,iotop很直观的,按照I/O统计展示进程,在运维定位IO故障中效率更高,不过,默认系统不自带,需要yum安装 此次I/O升高是由于jbd2引起的,jbd2是一个文件系统的日志功能 网上不少文章有关于jbd2引起I/O高的分析,认为比较好的是这篇https://cloud.tencent.com/developer/article/1465600,有兴趣的可以看下,里面有多种解决方案
数据降采样策略对成本控制至关重要:原始数据:保留2天,15秒精度5分钟聚合数据:保留30天1小时聚合数据:保留1年日级别聚合数据:永久保留3 从SLO到告警规则:精准告警的数学基础3.1 错误预算:SLO :条件1:错误率 > 2%(持续5分钟)条件2:P95延迟 > 基线200%条件3:流量下降 > 30%触发条件:条件1 AND (条件2 OR 条件3)4 告警分级体系:避免雪崩的防御工事4.1 分级原则 四级分类体系在实践中证明有效:P0(紧急):业务核心功能不可用,影响大量用户(立即呼叫)P1(高):功能降级或部分用户受影响(2小时内处理)P2(中):潜在问题或边缘功能异常(24小时内处理)P3(低) alert_name = 'NodeDown' AND description LIKE '%for maintenance%'DO SILENCE FOR 2h;4.3 分级通知渠道与升级策略不同级别的告警需要不同的通知强度和升级路径 检查订单服务日志:https://logs.company.com/order-service", "2.
在警报配置页面,设置告警条件: https://docs.sentry.io/product/alerts/create-alerts/metric-alert-config/ https://docs.sentry.io 例如,如果您指定一个小时时间窗口,Sentry 会评估: At 3:00pm: 2:00pm - 3:00pm At 3:01pm: 2:01pm - 3:01pm At 3:02pm: 2:02pm 不同优先级的发送方式(Delivery methods for different priorities) :使用不同的发送方式来区分不同优先级的告警。