项目中增加了 AI 运维辅助模块,通过 Python 调用 Kubernetes API 获取应用 Pod 日志,并结合阿里云百炼大模型进行日志分析,实现异常原因定位和处理建议生成,降低人工排障成本。(本项目中采用阿里云百炼)
一、部署OpenAI SDK
保持如下结构:
Gitea
│
▼
Jenkins
│
▼
Kubernetes
/ \
k8s-node1 k8s-node2
\ /
\ /
API Server
▲
│
kubectl logs
│
AI Log Assistant
(devops 主机)
│
▼
阿里云百炼
1.1 安装依赖
百炼现在推荐兼容 OpenAI SDK 的方式调用,这样以后切换模型也方便。
安装:
pip3 install -U openai
如果没有 python3或者pip3可以参考上一篇文章《在CentOS 7.9.2009上安装部署 Python3.9》。
检查:
python3 -c "import openai;print(openai.__version__)"
1.2 配置 API Key
不要把 Token 写死到代码里。
创建:
vim ~/.bashrc
最后加入:
export DASHSCOPE_API_KEY="你的百炼Token"
刷新:
source ~/.bashrc
检查:
echo $DASHSCOPE_API_KEY
如果能输出:
sk-xxxx...
说明成功。
1.3 创建 ai_log.py
vim ai_log.py
复制下面代码:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
response = client.chat.completions.create(
model="qwen-plus",
messages=[
{
"role": "system",
"content": "你是一名资深 Linux、Kubernetes 和 DevOps 运维工程师。"
},
{
"role": "user",
"content": "请简单介绍一下你自己。"
}
]
)
print(response.choices[0].message.content)
百炼提供 OpenAI Compatible API,因此可以直接使用 openai SDK,只需配置对应的 base_url 、model与 API Key。
1.4 测试运行
python3 ai_log.py
如果一切正常:
应该看到类似:
你好!
我是阿里云百炼 Qwen 模型……
可以帮助分析:
Linux
Docker
Kubernetes
日志
CI/CD
1.5 常见报错
401
说明:
API Key错误
或者:
环境变量没加载
检查:
echo $DASHSCOPE_API_KEY
404
一般说明:
base_url写错
429
说明:
额度不足
SSL
一般:
yum update ca-certificates
即可。
二、搭建脚本运行环境
2.1 在devops主机创建kubeconfig
在 ecs-prod 上执行:
scp /etc/kubernetes/admin.conf root@192.168.10.xx:/root/admin.conf
其中:
192.168.10.xx
改成 devops 的 IP。
例如:
scp /etc/kubernetes/admin.conf root@192.168.10.10:/root/admin.conf
在 devops:
mkdir -p ~/.kube
mv /root/admin.conf ~/.kube/config
2.2 测试
kubectl get nodes
正常应该看到:
NAME STATUS
ecs-prod Ready
k8s-node1 Ready
k8s-node2 Ready
如果成功,说明 AI 已经可以获取整个集群日志。
2.3 修改Dockerfile
本项目采用Dockerfile创建业务镜像,把Nginx日志文件软链接到容器标准输出,之后 kubectl logs 就能直接拿到访问日志。
Dockerfile:
# 新增:日志重定向到stdout/stderr
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
三、实现百炼大模型进行日志分析示例
3.1 在项目仓库创建aiops目录:
cd /root/HybridBlog
mkdir aiops
cd aiops
3.2 创建 ai_log.py 脚本
vim ai_log.py
写入:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
HybridBlog AI 运维日志分析助手
功能:
1. 获取 Kubernetes 应用 Pod 日志
2. 调用阿里云百炼大模型分析
3. 输出故障原因和处理建议
使用:
python3 ai_log.py hybridblog
"""
import os
import sys
import subprocess
from openai import OpenAI
# ==========================
# Kubernetes 配置
# ==========================
NAMESPACE = "hybridblog"
# ==========================
# 百炼 API 配置
# ==========================
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
MODEL = "qwen-plus"
# ==========================
# 获取 Pod 日志
# ==========================
def get_pod_logs(app_name):
print("=" * 60)
print("正在获取 Kubernetes Pod 日志...")
print("=" * 60)
try:
result = subprocess.run(
[
"kubectl",
"logs",
"-l",
f"app={app_name}",
"-n",
NAMESPACE,
"--tail=300"
],
capture_output=True,
text=True
)
if result.returncode != 0:
print("获取日志失败:")
print(result.stderr)
sys.exit(1)
logs = result.stdout
if not logs.strip():
print("没有获取到日志")
sys.exit(1)
return logs
except Exception as e:
print("执行 kubectl 失败:")
print(e)
sys.exit(1)
# ==========================
# 调用 AI 分析
# ==========================
def analyze_logs(logs):
print("=" * 60)
print("正在调用 AI 分析日志...")
print("=" * 60)
prompt = f"""
你是一名资深 Kubernetes DevOps 运维工程师。
请分析下面 Kubernetes 应用日志。
请按照以下格式输出:
================
【故障等级】
说明是否存在异常
【问题原因】
分析可能原因
【影响范围】
说明可能影响
【排查步骤】
给出 Kubernetes/Linux 排查命令
【解决方案】
给出修复建议
【优化建议】
给出生产环境改进方案
日志如下:
{logs}
"""
response = client.chat.completions.create(
model=MODEL,
messages=[
{
"role":"system",
"content":
"你是一名专业云计算和DevOps运维专家"
},
{
"role":"user",
"content":prompt
}
],
temperature=0.2
)
return response.choices[0].message.content
# ==========================
# 主程序
# ==========================
def main():
if len(sys.argv) != 2:
print(
"""
使用方式:
python3 ai_log.py <app名称>
示例:
python3 ai_log.py hybridblog
"""
)
sys.exit(1)
app_name = sys.argv[1]
logs = get_pod_logs(app_name)
print()
print("日志获取成功:")
print("-"*60)
print(logs[-2000:])
print()
result = analyze_logs(logs)
print("="*60)
print("AI 分析结果")
print("="*60)
print(result)
if __name__ == "__main__":
main()
3.3 测试
执行:
python3 ai_log.py hybridblog
流程:
输入 hybridblog
|
↓
kubectl logs
-l app=hybridblog
-n hybridblog
|
↓
获取:
hybridblog pod1日志
hybridblog pod2日志
|
↓
发送百炼
|
↓
AI分析