OPC 障碍日记 · 2026-06-23

OPC 障碍日记:让系统自己发现自己哪里坏了

OPC(观测—模式—纠正)不是告警平台,而是一种运行时自检闭环:埋点采证据,模式库匹配故障指纹,触发就地修复。下面这段 Python 装饰器把它压进普通函数里。

一、观测层:冻结现场

def opc_observe(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        try:
            return func(*args, **kw)
        except Exception as e:
            OPC_DIARY.append({
                "ts": time.time(),
                "func": func.__name__,
                "trace": traceback.format_exc(),
                "args": repr(args)[:200]
            })
            raise
    return wrapper

二、模式层:匹配指纹

PATTERNS = [
    {"name": "db_timeout", "match": lambda s:
        "OperationalError" in s["trace"]
        and "timeout" in s["trace"].lower()}
]

def diagnose(snap):
    for p in PATTERNS:
        if p["match"](snap):
            return p["name"]
    return "unknown"

三、纠正层:止血

识别到 db_timeout 时,自动让连接池重建,而不是等运维介入。

@opc_observe
def query(sql):
    conn = pool.get()
    return conn.execute(sql)
原则:OPC 不替人决策,只把"哪里坏了、为什么坏、下一步建议"摆到工程师面前。

系统开始拥有自己的短期记忆,故障从凭印象复盘变成按指纹回放。