微信扫码
添加专属顾问
我要投稿
AI预测技术让服务器运维从被动变主动,提前预警风险,告别事后补救。 核心内容: 1. 智能预警方案的五步设计流程 2. Prophet时序预测模型的原理详解 3. 实际应用中的核心代码实现
最近做了些AI在告警和日志上面的尝试,尤其是告警,都是在发生后,才做的巡检,那么,如何在告警发生前就提前预知呢?来看下面的预警方案。
方案分五步步骤:
数据采集:定时从 Zabbix API 拉取监控数据(如磁盘、内存历史数据)。
数据预处理:对数据做清洗、归一化、滑动窗口等处理。
AI趋势分析:用大模型(如 DeepSeek、GPT-4)或传统时序预测模型(如 Prophet、LSTM)分析未来一段时间的增长趋势。
智能预警:如果模型预测未来X小时内有较大概率达到阈值,则提前发出预警。
告警推送:通过邮件、钉钉、微信等方式推送智能预警。
1. 加性模型(Additive Model)
Prophet 假设时间序列可以分解为:
y(t) = g(t) + s(t) + h(t) + ε_t
g(t):趋势(Trend)分量,描述长期增长或下降趋势
s(t):季节性(Seasonality)分量,描述周期性变化(如日、周、年周期)
h(t):节假日(Holiday)分量,描述特殊事件对数据的影响
ε_t:误差项(Noise)
2. 趋势建模
Prophet 支持线性趋势和饱和增长(logistic growth)两种趋势模型。
可以自动检测并拟合趋势中的“转折点”(changepoints),即趋势发生变化的时间点。
3. 季节性建模
使用傅里叶级数(Fourier series)建模季节性成分,能灵活拟合各种周期性波动。
支持多种季节性(如日、周、年等),可自定义。
4. 节假日建模
用户可指定节假日或特殊事件,Prophet 会自动建模这些事件对数据的影响。
5. 鲁棒性与自动化
Prophet 对异常值和缺失值有较强的鲁棒性。
只需少量参数即可自动建模,适合非专业数据科学用户。
1、zabbix API 获取历史数据def get_item_history(auth, itemid, time_from, time_till): payload = { "jsonrpc": "2.0", "method": "history.get", "params": { "output": "extend", "history": 0, # 0: float "itemids": itemid, "sortfield": "clock", "sortorder": "ASC", "time_from": time_from, "time_till": time_till, "limit": 1000 }, "auth": auth, "id": 2 } r = requests.post(ZABBIX_URL, json=payload) result = r.json()['result'] print(f"[DEBUG] get_item_history for itemid={itemid}: {result[:3]} ... total={len(result)}") return result
2、数据清洗def preprocess(data): df = pd.DataFrame(data) df['clock'] = pd.to_numeric(df['clock'], errors='coerce') df['value'] = pd.to_numeric(df['value'], errors='coerce') df = df.dropna(subset=['clock', 'value']) if df.empty: return pd.DataFrame(columns=['ds', 'y']) df['clock'] = pd.to_datetime(df['clock'], unit='s') df = df.set_index('clock').sort_index() # 只保留 value 列 df = df[['value']] # 强制 value 为 float64 df['value'] = df['value'].astype('float64') # 重采样 df = df.resample('5min').mean().interpolate() df = df.reset_index() df = df.rename(columns={'clock': 'ds', 'value': 'y'}) return df
3、时序模型做本地趋势预测def forecast_trend(df, periods=24): model = Prophet() model.fit(df) future = model.make_future_dataframe(periods=periods, freq='5min') forecast = model.predict(future) return forecast[['ds', 'yhat']].tail(periods)
4. 构造AI大模型解释Prompt(提示词工程)def build_prompt(df, forecast, metric_name="磁盘使用率", threshold=THRESHOLD, hostname="主机"): history = df['y'].tolist()[-24:] future = forecast['yhat'].tolist() prompt = ( f"主机:{hostname}\n" f"以下是该主机最近24小时的{metric_name}历史数据(每5分钟采样,单位%):\n" f"{history}\n" f"Prophet模型预测未来2小时的{metric_name}为:\n{future}\n" f"当前阈值为{threshold}%。这是磁盘空闲率指标,值越小说明可用存储空间越小,存储越紧张,需要尽快清理空间或者磁盘扩容,请判断该指标是否有异常降低的趋势,未来2小时内是否有可能持续低于阈值,低于阈值的时候就需要提醒该清理空间或扩容磁盘了,并给出预警建议。" ) return prompt
5.调用OpenAI大模型def ask_ai(prompt): client = OpenAI(api_key="sk-xxxxxx", base_url="https://api.deepseek.com") messages = [{"role": "user", "content": prompt}] response = client.chat.completions.create( model="deepseek-reasoner", messages=messages ) reasoning_content = response.choices[0].message.reasoning_content content = response.choices[0].message.content return content
以磁盘预警为例,当我设置磁盘空闲率为20%阈值时,磁盘初始化值使用率为80%左右,当我定时批量写入数据,将磁盘空闲率降低到22%左右,这时还没触发告警阈值,此时运行预警程序,则会提示,磁盘使用率将要达到阈值,即将触发报警
而当我开始清理磁盘时,空间逐步释放,这时候再次运行程序,则提示磁盘空间逐步释放,无法清理
这是一次数据预测模型与AI模型相结合的尝试,经过前面几次尝试,发现,直接将源数据吐给大模型,并不能实现准确的分析与评估,需要数学模型结合,对数据进行清洗,然后由AI给出总结报告,这样得出的结论还是比较准备。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-09-04
想成为一名合格的 AI PM,先抛弃过去那些让你成功的经验
2025-09-03
谷歌Nano Banana 的十五个应用案例
2025-09-03
智能体上下文工程是什么?
2025-09-03
Google官方发布Nano Banana使用文档,放弃邪修回归正道吧!
2025-09-03
AI三问:Agent、LLM、RAG,一文厘清!
2025-09-03
别谈“全面 AI 转型”,要搞“单点 AI 爆破”
2025-09-03
Midoo.AI 发布:AI Agent 能否破解教育行业千亿美金的「无解方程」?
2025-09-03
惊险!腾讯ima搜出来的资料差点出事……
2025-08-21
2025-06-21
2025-08-21
2025-08-19
2025-06-07
2025-06-12
2025-06-19
2025-06-13
2025-07-29
2025-06-15
2025-09-03
2025-09-03
2025-09-03
2025-09-03
2025-09-02
2025-08-28
2025-08-28
2025-08-28