背景
在监控高度分布式的应用程序时,可能依赖于多个基于云的和本地环境中的数百个服务和基础设施组件,在识别错误、检测高延迟的原因和确定问题的根因都是比较有挑战性的。即使已经具备了强大的监控和警报系统,但是基础设施和应用程序也可能会随着时间的推移而发生变化,这很可能会导致难以可靠地检测异常行为,而对于 7 * 24 小时不间断运行的后台服务,监控告警是稳定性运行的基石。很多开发者都有过这样的经历,对服务的每一个指标都做了严格的监控和告警,唯恐漏掉告警导致问题无法发现,导致每天接收到大量的无效告警,告警的泛滥逐渐麻痹了警惕性,结果真实的问题初漏端倪时却被忽略,最终导致了严重的故障。如何提升告警的有效性,准确识别问题,同时又不至于淹没在大量的无效告警中,正是本文所探讨的内容。
智能监控系统在现代 IT 基础设施中扮演着至关重要的角色。它不仅有助于业务分析和用户行为分析,还能迅速定位故障根因。智能监控可以在业务类指标和波动性较强的指标中快速定位异常节点,适用于多维指标的关键维度定位。在微服务架构中,它通过分析服务调用和资源依赖来快速分析异常。
智能监控不需要配置检测阈值和触发规则,只需设定检测范围和通知人即可一键开启。基于智能检测算法,它可以识别异常数据并预测未来趋势。由于其高效性和准确性,智能监控在云平台的查看和管理中也占据了重要位置。
告警是可靠性的基础
首先来看一下告警的重要性,为什么我们需要耗费这么多精力来优化告警。虽然我们都期望一个服务是没有故障的,但事实确是不存在 100% 没问题的系统,我们只能不断提升服务的可靠性,我们期望做到:
- 对服务当前状态了如指掌,尽在掌控
- 能够第一时间发现问题,并且快速定位问题原因
要想做到以上两点,只能依赖完善的监控&告警,监控展示服务的完整运行状态,但是不可能一直盯屏观察,并且也不可能关注到所有方面,要想被动的了解系统状态,唯有通过告警,自动检测异常情况。所以说,告警是团队监控服务质量和可用性的一个最主要手段。
告警面临的现实问题
1、业务动态变化指标很难设定合适的静态阈值
随着业务的变化,相关的指标往往呈现出以小时、天、周为周期的季节性特征。这些指标本身就起伏不定,导致静态阈值、同比阈值都不好配。而采用偷懒的方式选择对所有应用/接口的响应时间、错误率和调用量等等指标配置成固定阈值自然会产生大量误告警。
2、相同指标不同应用中阈值不同
以应用响应时间指标为例, 有的接口正常时响应时间可能在 200ms 左右,那么当响应时间大于 300ms 时就可以判定为异常。然而,真实的业务场景中有些接口长期访问量大, 整体指标在 500ms 左右正常波动,所有这时候合适的告警阈值可能是 600ms 左右。而一个应用可能有几百个接口,这时要对所有接口配置合适的阈值,时间成本就会变得非常高。
3、指标的阈值会随着业务变化
随着公司业务发展、新应用上线,一些指标正常状态的阈值都会不断变化。如果没有及时更新阈值,就很容易产生大量误告警。
告警设置原则
每当告警发生时,运维同学需要暂停手头工作,查看告警。但是这种中断非常影响工作效率,增加研发成本,特别对正在开发调试的同学,影响很严重。所以,每当我们收到告警时,我们希望它能真实的反映出异常,即告警尽可能不误报(对正常状态报警);每当有异常产生时,报警应该及时发出来,即告警不能漏报(错过报警)。误报和漏报总是一对矛盾的指标。以下是一些告警设置原则:
- 告警具备真实性:告警必须反馈某个真实存在的现象,展示你的服务正在出现的问题或即将出现的问题
- 告警表述详细:从内容上,告警要近可能详细的描述现象,比如服务器在某个时间点具体发生了什么异常
- 告警具备可操作性:每当收到告警时,一般需要做出某些操作,对于某些无须做出操作的告警,最好取消。当且仅当需要做某种操作时,才需要通知
- 新告警使用保守阈值:在配置告警之初,应尽可能扩大监控告警覆盖面,选取保守的阈值,尽可能避免漏报
- 告警持续优化:后续持续对告警进行统计分析,对误报的告警,通过屏蔽、简化、阈值调整、更精准的体现原因等多种方式减少误报,这是一个相对长期的过程
再以请求失败举例,如仅当请求的失败量超过某一阈值时告警,可能存在多种原因,如一些恶意构造的请求,也触发失败量告警。这样的告警既不具备真实性,也不具备可操作性,因为确实无需任何处理。对于此类情况,我们应该尽可能通过特性加以识别,从而更加精准的区分原因的告警。
智能监控介绍
常见的异常检测方案
无监督方案
1、最大值,最小值波动率阈值判定法
通过检测数据集中的最大值和最小值,以及它们的波动率(变化率)来识别异常。设置一个预定义的阈值,如果数据超过这个阈值就被标记为异常。
2、3-sigma 原理
基于正态分布理论,假设数据集服从正态分布,任何超出均值±3个标准差范围的数据点都被认为是异常。
3、basic detectors 控制图理论
使用控制图(如Shewhart控制图、CUSUM控制图、EWMA控制图)来监控数据变化,确定数据是否在可接受的控制范围内,超出控制范围的数据点被认为是异常。
有监督方案
1、统计回归
- linear regression(线性回归):使用线性回归模型预测数据点,如果实际值与预测值的差异超过预定义阈值,则标记为异常。
- logistic regression(逻辑回归):使用逻辑回归模型对数据进行分类,预测数据点是正常还是异常。
2、机器学习
- decision tree(决策树):使用决策树模型对数据进行分类,树的节点分裂依据变量的重要性。
- naive bayes(朴素贝叶斯):基于贝叶斯定理,假设特征之间相互独立,计算数据点属于各分类的概率。
- random forest(随机森林):集成多棵决策树,通过投票机制确定数据点分类。
- xgboost:基于梯度提升的决策树集成方法,优化了计算效率和模型性能。
3、深度学习
- DNN(深度神经网络):使用多层神经网络对数据进行建模,捕捉复杂的特征关系。
- LSTM(长短期记忆网络):一种特殊的RNN,适用于时间序列数据,能够捕捉长期依赖关系。
- DNN+Attention:在DNN中引入注意力机制,增强模型对重要特征的关注能力。
- LSTM+Attention:在LSTM中引入注意力机制,增强模型对重要时间点的关注能力。
- VAE(变分自编码器):一种生成模型,通过学习数据的潜在分布进行异常检测。
观测云智能监控方案介绍
智能监控方案通过一系列的步骤实现对 IT 基础设施和应用的全面监控。其总体实现原理包括数据收集与预处理、特征工程、预测模型、异常检测与验证,以及告警与通知。这些步骤相互配合,形成一个完整的监控闭环,确保用户系统的稳定和高效运行。
数据收集与预处理
1、数据收集
智能监控系统首先需要收集过去 30 天的时间序列数据,每分钟一个时间点。这些数据可以包括主机资源使用情况、应用性能指标、用户访问日志等。
2、数据预处理
在收集到数据后,需要进行预处理以确保数据的质量。预处理步骤包括数据清洗(去除噪声和异常值)、数据填补(处理缺失值)、数据标准化等。
特征工程
在预处理后的数据基础上,进行特征工程以提取时间序列数据的关键特性。这些特性包括:
- 最大值(Max)和最小值(Min):表示数据的极值。
- 值域(Range):最大值与最小值的差。
- 均值(Mean)和中位数(Median):表示数据的集中趋势。
- 方差(Variance)和标准差(Standard Deviation):表示数据的离散程度。
- 峰度(Kurtosis)和偏度(Skewness):表示数据分布的形态。
- 同比(Year-over-Year)和环比(Month-over-Month):表示数据的变化趋势。
- 周期性(Periodicity):表示数据的周期特性。
- 自相关系数(Autocorrelation Coefficient):表示数据的自相关性。
- 变异系数(Coefficient of Variation):表示标准差与均值的比率。
异常检测
智能监控系统通过收集时序数据,并利用历史数据建立的置信区间来预测正常波动范围。系统会对比当前时间段的数据特征与历史数据,检测数据是否超出了预定的置信区间。如果数据点超出了这个范围,系统将判定为异常并可能触发警报;若数据点在正常范围内,则系统会继续监控,确保实时数据的稳定性和安全性。
异常数据示例:
告警与通知
当检测到异常时,智能监控系统会实时发送告警通知给相关人员。通知可以通过多种渠道发送,如电子邮件、短信、即时消息应用等,确保相关人员能够及时响应和处理。
应用场景
应用智能检测
应用程序是直接面向用户的,任何性能问题(如响应时间延迟、错误率上升)都会显著影响用户体验。传统的应用监控方法通常难以应对复杂的应用架构和快速变化的负载情况。
应用智能检测通过监控应用的各种性能指标,及时发现和处理异常情况。例如,智能监控系统可以检测到某个应用的响应时间突然增加,并分析其原因可能是由于某个依赖服务的性能下降。通过这种方式,开发和运维团队可以快速响应,优化应用性能,确保用户体验的稳定性。
- 异常总结:显示查看当前异常应用程序服务标签、异常分析报告详情、异常值分布情况统计
- 资源分析:对请求数的监控,可查看资源请求数排行(TOP 10)、资源错误请求数排行(TOP 10)、资源每秒请求数排行(TOP 10)等信息
主机智能检测
在现代 IT 基础设施中,主机(服务器)的稳定性和性能直接影响到所有应用和服务的正常运行。主机资源(如 CPU、内存、磁盘、网络等)的异常使用情况可能会导致系统崩溃或性能下降。
主机智能检测基于智能检测算法,定期对主机的 CPU、内存进行智能检测。通过对出现 CPU、内存异常的主机进行根因分析,确定该主机是否存在突增/突降/区间性上升的异常情况,从而监控主机的运行状态及稳定性。当智能监控系统识别异常时会通知相关人员进行处理。通过此检测,系统管理员可以快速定位并解决潜在问题,确保主机的稳定运行。
- 事件内容:显示查看监控器配置的事件内容
- 异常总结:显示查看当前异常主机名标签、异常分析报告详情、异常值时序图显示异常趋势
- 异常分析:异常分析仪表板,可查看主机的异常进程、CPU 使用率等基础信息
- 主机详情:可查看主机集成运行情况、系统信息,及云厂商信息
Kubernetes 智能检测
Kubernetes 作为一个流行的容器编排平台,被广泛用于管理和部署容器化应用。在大型集群环境中,Kubernetes 的资源管理和服务状态监控变得尤为重要。
Kubernetes 智能检测基于智能检测算法,通过定期监控关键指标,如 Pod 总数、Pod 重启次数以及 API Server QPS 等,Kubernetes 智能检测能够及时发现并预测集群中可能出现的问题。这种方法不仅能识别出资源使用的异常波动,还能通过根因分析精确指出问题源头,无论是配置失误、资源不匹配还是请求过多。通过智能检测,运维团队可以及时调整资源配置或优化应用,确保 Kubernetes 集群的高效和稳定运行。
- 异常总结:显示查看当前集群异常 APIServer 节点数分布情况统计。
- 异常分析:可查看 APIServer 节点数、API QPS、在处理读请求数量、写请求成功率、在处理写请求数量等信息。
日志智能检测
日志文件记录了系统和应用程序的运行状态,是问题诊断和故障排除的重要依据。传统的日志监控方式通常依赖于手工检查和简单的规则匹配,效率低且容易遗漏关键问题。日志智能检测利用先进的算法自动分析日志数据,识别异常日志条目和频率。例如,智能监控系统可以检测到某个时间段内错误日志的频繁出现,并关联到具体的应用或服务。通过对日志的智能分析,运维人员可以快速定位故障原因,提升问题解决的效率和准确性。
- 异常总结:可查看当前异常日志标签、异常分析报告详情、及错误请求数分布情况
- 错误分析:可查看错误日志的聚类信息
智能监控的未来展望
更高的自动化程度
1、智能化的自我优化监控系统
未来的智能监控系统将进一步提升自动化程度,减少对人工干预的依赖。通过机器学习和人工智能技术,监控系统能够自我学习和优化,自动调整监控策略和参数。例如,系统可以通过历史数据和实时数据的分析,自适应地调整检测算法和阈值,持续优化异常检测的准确性和效率。
2、自动化响应和修复
除了自动化监控,未来的系统将集成自动化响应和修复机制。当检测到异常时,监控系统可以自动触发预定义的修复脚本或策略,执行自动化的故障处理和资源调整,减少人工介入的时间和错误风险。
更精准的异常检测
1、高级算法与深度学习
未来的智能监控系统将引入更高级的算法和深度学习技术,以提高异常检测的精准度。通过深度神经网络和复杂的时间序列分析模型,系统可以更准确地捕捉和预测异常模式,降低误报率和漏报率。
2、多源数据融合
未来的监控系统将整合更多的多源数据,包括传感器数据、用户行为数据、业务指标数据等,通过多维度的数据融合分析,提高异常检测的全面性和准确性。多源数据的融合使得系统对异常的理解更加全面,可以更准确地定位异常根因,提供更有针对性的解决方案。
增强的用户体验
1、智能化的用户界面
未来的智能监控系统将提供更加智能化和友好的用户界面。通过自然语言处理和智能助手技术,用户可以通过语音或文本与监控系统进行交互,快速获取系统状态和异常信息。例如,用户可以询问“当前系统的健康状况如何?”系统会自动生成详细的健康报告和建议。
2、个性化监控与定制化服务
未来的监控系统将提供更加个性化的监控服务,根据用户的需求和业务特点,定制化监控策略和告警规则。系统可以通过分析用户的使用习惯和业务模式,自动推荐最佳的监控配置和优化方案,提升用户的管理效率和体验。