Skip to content

abc9878/LokiAnalyst

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LokiAnalyst

基于 AI 的日志智能分析平台,通过 Loki 采集任意日志源,利用 大语言模型 (LLM) 进行智能分析,并通过可扩展的 推送通道 发送诊断报告。


核心特性

  • 多渠道 LLM 调度:支持配置多个 LLM 渠道(SiliconFlow、DeepSeek、智谱等),主模型自动重试,失败后按顺序降级至 Fallback 模型,确保分析不中断。
  • 通用 LogQL 查询:支持 LOGQL_* 前缀定义任意数量查询,不再局限于特定设备类型,可用于交换机、Nginx、数据库、K8s 等任何 Loki 接入的日志源。
  • 配置分层复用:通过 INCLUDE 机制将公共配置(LLM、Loki、采样参数)与任务配置(查询语句、Prompt)分离,新增任务只需几行配置。
  • 动态变量注入:在配置文件中定义变量,LogQL 和 Prompt 中通过 {VARIABLE} 自动替换。
  • 智能日志采样:防止单设备海量日志导致 Token 溢出,自动首尾截断,阈值可配。
  • 解耦发送通道send/ 目录下的模块支持动态加载,无需修改主程序即可扩展推送方式。

目录结构

aiops/
├── check.py                 # 主程序
├── requirements.txt         # Python 依赖
├── conf/
│   ├── global.conf          # 公共配置(LLM、Loki、采样、文案)
│   └── tasks/               # 任务配置目录
│       └── switch.conf      # 示例:交换机巡检任务
└── send/                    # 发送通道插件
    ├── __init__.py
    ├── serverchan.py        # Server酱推送
    └── serverchan.env       # 密钥配置(不入库)

环境准备

  1. Python 3.8+
  2. 安装依赖
pip install -r requirements.txt
  1. Loki:确保目标日志已通过 Promtail / Alloy 等采集器推送到 Loki。

配置指南

1. 公共配置 (conf/global.conf)

所有任务共享的基础设施配置:

## Loki 数据源
LOKI_URL=http://localhost:3100/loki/api/v1/query_range

## LLM 通用参数
LLM_TIMEOUT=600
LLM_MAX_RETRIES=2
LLM_RETRY_DELAY=5
LLM_TEMPERATURE=0.1
LLM_TOP_P=0.1

## LLM 模型调度(格式: 渠道名/模型名)
LLM_MAIN_MODEL=siliconflow/Pro/zai-org/GLM-4.7
LLM_FALLBACK_MODELS=siliconflow/Qwen/Qwen3-8B,deepseek/deepseek-chat,zhipu/glm-4-flash

## LLM 渠道定义
LLM_SILICONFLOW_BASE_URL=https://api.siliconflow.cn/v1
LLM_SILICONFLOW_API_KEY=sk-xxx

LLM_DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
LLM_DEEPSEEK_API_KEY=sk-xxx

## 发送通道
SEND_CHANNEL=serverchan

## 日志采样
LOG_SAMPLE_HEAD=30
LOG_SAMPLE_TAIL=30
LOG_SAMPLE_THRESHOLD=60

## 报告文案(支持 {time_range} 占位符)
MSG_ALL_CLEAR=✅ 时段 {time_range} 内系统运行平稳,无告警日志。
MSG_LOKI_FAIL=⚠️ 巡检异常: Loki 接口响应失败,请检查网络或 Loki 服务状态。

2. 任务配置 (conf/tasks/*.conf)

每个任务一个文件,通过 INCLUDE 引入公共配置,仅定义任务专属内容:

## 引入公共配置
INCLUDE=../global.conf

## 任务信息
REPORT_TITLE=【交换机巡检报告】
REPORT_TAG=network_ai_ops

## LogQL 查询(LOGQL_ + 任意后缀,自动收集)
LOGQL_CORE={job="switch", host=~"10.0.0.1|10.0.0.2", level!~"informational|notice"}
LOGQL_ACCESS={job="switch", host!~"10.0.0.1|10.0.0.2", level!~"informational|notice"}

## AI 提示词(必须包含 {combined_context} 占位符)
AI_PROMPT_TEMPLATE="""你是一名网络专家。请分析以下异常日志:
{combined_context}

请给出故障分析和排查建议。"""

3. 发送通道 (send/*.env)

Server酱示例,在 send/serverchan.env 中配置:

SENDKEY=SCTxxxxxxxxxxx

4. 自定义发送通道

send/ 目录下新建 .py 文件,实现 send_to(title, content, tag) 函数即可,主程序会根据 SEND_CHANNEL 配置自动加载。


LLM 调度策略

主模型 (重试 N 次)        Fallback (各尝试 1 次)
─────────────       ─────────────────────────
siliconflow/GLM-4.7 ──失败──→ siliconflow/Qwen3-8B ──失败──→ deepseek/chat ──失败──→ zhipu/glm-4-flash
  ↑ 重试 x2                   ↑ 仅 1 次                  ↑ 仅 1 次           ↑ 仅 1 次
  • 主模型:按 LLM_MAX_RETRIES 重试,应对网络抖动等瞬时故障
  • Fallback 模型:失败立即切换下一个,快速降级
  • 所有渠道仅需兼容 OpenAI /v1/chat/completions 协议

运行说明

自动化模式(Cron)

# 每小时整点运行
0 * * * * cd /path/to/aiops && python3 check.py conf/tasks/switch.conf >> /tmp/aiops.log 2>&1

脚本自动记录上次运行时间,下次运行时追溯期间的所有日志。

手动模式(指定时间)

# 查询指定时段(不更新自动运行状态)
python3 check.py conf/tasks/switch.conf "2026-03-25 08:00:00" "12:00:00"

# 省略日期则默认今天
python3 check.py conf/tasks/switch.conf "08:00:00" "12:00:00"

运维逻辑

机制 说明
状态保存 按任务文件名独立保存至 STATE_DIR(默认系统临时目录)
首次运行 无状态记录时,默认拉取过去 FALLBACK_TIME_WINDOW 秒的日志
间隔保护 两次运行间隔小于 MIN_TIME_WINDOW 时,强制使用最小窗口
日志采样 单设备日志超过 LOG_SAMPLE_THRESHOLD 时,保留前 LOG_SAMPLE_HEAD 条 + 后 LOG_SAMPLE_TAIL
故障隔离 严格区分 Loki 查询失败与无告警日志,分别推送不同级别的通知

快速新建任务

以 Nginx 错误日志分析为例,3 步完成:

1. 新建 conf/tasks/nginx.conf

INCLUDE=../global.conf

REPORT_TITLE=【Nginx 异常分析】
REPORT_TAG=nginx_ai_ops

LOGQL_ERRORS={job="nginx", level="error"}
LOGQL_5XX={job="nginx", status=~"5.."}

AI_PROMPT_TEMPLATE="""你是一名 Nginx 运维专家。分析以下异常日志:
{combined_context}

按以下结构输出:
1. 错误分布时间轴
2. 根因分析
3. 排查建议"""

2. 运行

python3 check.py conf/tasks/nginx.conf

3. 完成。公共配置自动复用,无需重复填写 LLM、采样等参数。


注意事项

  • send/ 目录下必须存在 __init__.py,否则无法动态加载发送模块
  • 所有 LLM 渠道需兼容 OpenAI /v1/chat/completions 协议
  • *.env 文件包含密钥,已在 .gitignore 中排除

About

AI-powered log analysis platform | Loki + LLM + Push

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages