本帖最后由 FYIRH 于 2020-12-5 23:37 编辑 . c/ x3 V% j& t3 A6 p+ @2 e
0 V3 r/ g5 H9 S& D" e1 T本章描述的理念整合起来就成为Google SRE广泛接受和遵循的监控与警报设计哲学。虽然这个设计哲学有一定理想性,但是书写和评审某个新警报时可以依赖的好方法。该哲学同时有助于鼓励团队在解决问题时向正确的方向进行。 ) o0 u5 J; Y* h1 F0 E
2 t; S( A! E* ]9 h
当为监控系统和警报系统增加新规则时,回答下列问题可以帮助减少误报∶ / j! x+ a# C2 r$ U5 s) s( }
● 该规则是否能够检测到一个目前检测不到的、紧急的、有操作性的,并且即将发生或者已经发生的用户可见故障? . X! c1 X, t5 M& P
● 是否可以忽略这条警报?什么情况可能会导致用户忽略这条警报,如何避免? & ~3 ]; u; w! N5 F7 [0 s: [. V
● 这条警报是否确实显示了用户正在受到影响?是否存在用户没有受到影响也可以触发这条规则的情况?例如测试环境和系统维护状态下发出的警报是否应该被过滤掉。
! r' a6 g, r$ c
●收到警报后,是否要进行某个操作?是否需要立即执行该操作,还是可以等到第二天早上再进行?该操作是否可以被安 全地自动化?该操作的效果是长期的,还是短期的?
7 }2 T2 B- X5 N7 r1 K8 U) g
● 是否也会有其他人收到相关的紧急警报,这些紧急警报是否是不必要的? : `8 {" Z/ ~! C4 Z# @" P
以上这些问题其实反映了在应对紧急警报上的一些深层次的理念∶
! S7 b( l! m' |0 ~9 h& \, v$ L
●每当收到紧急警报时,应该立即需要我进行某种操作。每天只能进入紧急状态几次,太多就会导致"狼来了"效应。 6 t0 v( O( b* s7 ^3 @; p9 G& T, d7 H# t
● 每个紧急警报都应该是可以具体操作的。
# |2 n% X& v) M9 Z0 V, d
● 每个紧急警报的回复都应该需要某种智力分析过程。如果某个紧急警报只是需要一个固定的机械动作,那么它就不应该成为紧急警报。 * U. k) _# c( s& N5 U
● 每个紧急警报都应该是关于某个新问题的,不应该彼此重叠。 ; M+ D- _( f1 ?; t/ e3 b! I% [5 p, m
7 j; L8 s+ U. V5 A
从这种角度出发,我们可以得出以下结论∶如果某个紧急警报满足上述四点,那么不论是从白盒监控系统还是黑盒监控系统发出都一样。最好多花一些时间监控现象,而不是原因。针对"原因"来说,应该只监控那些非常确定的和非常明确的原因。
1 v u" _, D5 j. b% u3 x2 s
在现代生产环境中,监控系统需要跟随不断演变的软件一起变化,软件经常重构,负载特性和性能目标也经常变化。现在的某个不常见的、自动化比较困难的警报可能很快就会变成一个经常触发、需要一个临时的脚本来应对的问题。这时,某个人应该去寻找和消除背后的根源问题∶如果这种解决办法不可行,那么这条警报的应对就必须要完全自动化。
1 K0 R3 Q! q! C3 r
关于监控系统的设计决策应该充分考虑到长期目标。今天发出的每个紧急警报都会占用优化系统的时间,所以经常会牺牲一些短期内的可用性和性能问题,以换取未来系统性能的整体提升。以下是两个具体的案例。 5 x) Z9 b" j6 c( A& \% t7 o# r
|