项目中增加了 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分析