Linux云计算提供了弹性的基础设施,却也带来海量指标、日志与调用链。传统AIOps依赖阈值与规则,面对微服务级联故障时误报高、定位慢。大模型的介入,让AIOps从“检测异常”走向“理解异常”。专业路径是:统一数据底座 + 异常检测 + LLM根因推理 + 工具化执行。
Linux云原生的可观测性依赖三大支柱:
eBPF 是 Linux 侧的独特优势,可在内核态无侵入采集延迟、丢包、系统调用:
# 用 bpftrace 观察某进程的写延迟分布
bpftrace -e '
kprobe:vfs_write { @start[tid] = nsecs; }
kretprobe:vfs_write /@start[tid]/ {
@us = hist((nsecs - @start[tid]) / 1000);
delete(@start[tid]);
}'Prometheus 提供时序数据,先用稳健统计做基线,再用模型捕捉突变。
import numpy as np
import requests
from datetime import datetime, timedelta
PROM = "http://localhost:9090/api/v1/query_range"
def fetch(metric, minutes=60, step="30s"):
end = datetime.now()
start = end - timedelta(minutes=minutes)
r = requests.get(PROM, params={
"query": metric,
"start": start.timestamp(),
"end": end.timestamp(),
"step": step,
}).json()
return [(float(v[0]), float(v[1]))
for v in r["data"]["result"][0]["values"]]
def robust_zscore(series, window=20):
"""滚动中位数 + MAD,抗离群点"""
vals = np.array([v for _, v in series])
alerts = []
for i in range(window, len(vals)):
w = vals[i - window:i]
med = np.median(w)
mad = np.median(np.abs(w - med)) or 1e-9
z = 0.6745 * (vals[i] - med) / mad
if abs(z) > 3.5:
alerts.append((series[i][0], vals[i], z))
return alerts
alerts = robust_zscore(fetch('rate(node_cpu_seconds_total{mode="iowait"}[5m])'))
print(f"检测到 {len(alerts)} 个异常点")相比固定阈值,MAD 对尖刺不敏感,适合云上波动剧烈的负载。
检测只回答“哪里异常”,根因需要“为什么”。把指标、日志、拓扑压缩成结构化上下文,交给大模型推理。
import os, json
from openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
SYSTEM = """你是SRE专家。根据给定指标、日志与拓扑,输出JSON:
{"root_cause":"...","confidence":0-1,"evidence":["..."],"actions":["..."]}
禁止臆测,证据必须来自输入。"""
def rca(alert, metrics, logs, topology):
ctx = {
"alert": alert,
"metrics": metrics,
"logs": logs[-50:],
"topology": topology,
}
resp = client.chat.completions.create(
model="gpt-4o",
temperature=0,
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": SYSTEM},
{"role": "user", "content": json.dumps(ctx, ensure_ascii=False)},
],
)
return json.loads(resp.choices[0].message.content)
result = rca(
alert={"name": "HighLatency", "service": "order-api"},
metrics={"p99_ms": 1820, "iowait": 0.42, "db_conn": 198},
logs=["slow query: SELECT ... 2.1s", "pool exhausted"],
topology={"order-api": ["mysql-primary"], "mysql-primary": ["ebs-vol"]},
)
print(json.dumps(result, ensure_ascii=False, indent=2))关键工程点:response_format 强制 JSON、温度 0、证据约束,避免模型自由发挥导致误导。
仅靠一次性上下文不够,应通过 Function Calling 让模型按需查询 Prometheus、Kubernetes、日志系统。
tools = [{
"type": "function",
"function": {
"name": "query_prometheus",
"description": "执行PromQL查询",
"parameters": {
"type": "object",
"properties": {"promql": {"type": "string"}},
"required": ["promql"],
},
},
}]
def query_prometheus(promql):
return requests.get(PROM, params={"query": promql}).json()["data"]["result"]
# 模型返回 tool_calls 后,本地执行并回灌结果,形成 ReAct 闭环这套“LLM + 工具”即 AIOps Agent,可自主完成“看指标→查日志→比对拓扑→给结论”的流程。执行类动作(重启、扩容)必须走审批与幂等设计。
Linux云计算提供了丰富的观测数据,AIOps大模型则赋予其语义理解能力。二者结合的价值不在“自动修故障”,而在把MTTR从小时级压到分钟级:更快定位、更准归因、更清晰的操作建议。专业落地的前提,是扎实的数据底座、严谨的提示词工程与不可省略的人工护栏。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。