DoctorGPT安装与使用
服务简介
DoctorGPT 是一个将 GPT 带入生产,用于错误诊断的工具,它可以监控你的应用程序日志中的问题并对其进行诊断。
项目github地址:https://github.com/ingyamilmolinar/doctorgpt
项目gitee地址:https://gitee.com/mirrors/doctorgpt
安装准备
安装go编译器(可选)
DoctorGPT 是基于go开发的项目,如为源码安装方式,需先安装go运行环境,这里以centos安装环境为例,如已安装可跳过。
- 使用yum安装
yum -y install golang
- 添加环境变量,添加位置:/etc/profile
export GO111MODULE=on
export GOROOT=/usr/lib/golang
export GOPATH=/opt/golang
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://goproxy.cn,direct
- 重新加载环境变量
source /etc/profile
- 验证
go version
获取openai可用密钥
-
获取可用key
对很多用户来讲,目前由于国内网络环境隔离原因,想直接访问国外openai网站还是很麻烦的,这里推荐个不错的工具,很方便地解决这个国内访问及获取可用key的问题:GPT-API-free (前提:先拥有并登录自己的github账号) -
验证key有效性
① 将key输出为环境变量export OPENAI_API_KEY="<your openai api key>"② 验证key有效性验证(例如使用curl)
curl https://api.chatanywhere.com.cn/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Say this is a test!"}] }'③ 验证成功时的接口返回

开始安装
这里安装环境为centos7
源码安装(推荐)
- 下载项目源码
# 这里选择安装在/opt下
cd /opt
# 下载项目
git clone https://gitee.com/mirrors/doctorgpt.git
- 编译
# 进入子目录agent
cd doctorgpt/agent
# 开始编译,-o 表示指定生成文件名为doctorgpt
go build -o doctorgpt
【注意】 使用源码编译方式安装的,执行命令时,需要显式指定到命令所在目录下,或者手动配置PATH环境变量。
- 安装验证
./doctorgpt -h
出现如下界面则表示安装成功

使用go install安装(不推荐)
后续验证发现存在问题, 见 问题记录
- 开始安装
go install "github.com/ingyamilmolinar/doctorgpt@latest"
- 安装验证
doctorgpt -h
出现如下界面则表示安装成功

【说明】 采用 go install 方式安装,无需自己手动配置环境变量,直接在终端命令行使用命令即可。
功能验证
doctorgpt内置了常见日志解析器库,用户可以通过修改配置文件(默认为config.yaml),在配置文件中使用正则表达式,来对指定日志文件进行匹配,过滤和诊断等。
用法示例
OPENAI_KEY=$YOUR_KEY doctorgpt --logfile="test.log" --configfile="config.yaml" --outdir="./errors"
参数说明:
OPENAI_KEY 有效openai密钥
--logfile 要追踪和监控的日志文件,示例为当前目录下的 test.log
--configfile 要使用的yaml配置文件位置,示例为当前目录的 config.yaml
--outdir 诊断文件目录(如果不存在会自动创建),示例为当前目录下的目录 errors
关于更多命令行参数及配置使用示例,可参考 DoctorGPT
检查日志
这里以Apache日志格式内宽容为例
[Mon Dec 05 19:14:11 2005] [notice] workerEnv.init() ok /etc/httpd/conf/workers2.properties
[Mon Dec 05 19:14:11 2005] [error] mod_jk child workerEnv in error state 6
日志匹配
主要体现解析器(parsers)配置部分,该解析器表示将符合Apache日志格式的内容匹配出来
使用配置
parsers:
# Apache parser
- regex: '^\[(?P<DATE>\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2} \d{4})\] \[(?P<SEVERITY>\w+)\] (?P<MESSAGE>.*)$'
输出结果

错误诊断
对于符合触发条件变量的日志内容,触发器会自动触发诊断事件,进行 gpt api 请求。
使用配置
parsers:
# Apache parser
- regex: '^\[(?P<DATE>\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2} \d{4})\] \[(?P<SEVERITY>\w+)\] (?P<MESSAGE>.*)$'
triggers:
- variable: "SEVERITY"
regex: "error"
输出结果

诊断文件

从生成的诊断结果看,貌似没看出体现来自gpt诊断意见的部分。
日志过滤
对于符合过滤条件变量的日志内容,触发器会直接忽略,不会形成 GPT api 的触发事件。
使用配置
parsers:
# Apache parser
- regex: '^\[(?P<DATE>\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2} \d{4})\] \[(?P<SEVERITY>\w+)\] (?P<MESSAGE>.*)$'
triggers:
- variable: "SEVERITY"
regex: "error"
filters:
- variable: "SEVERITY"
regex: "error"
输出结果

给之前已经触发过诊断事件的日志内容加上过滤条件后,确实不再触发了。
日志剔除
主要用于对解析日志内容进行排除的设置,和日志过滤不同的是,此块配置主要针对日志中排除敏感信息和干扰信息(如垃圾邮件)等。
使用配置
parsers:
# Apache parser
- regex: '^\[(?P<DATE>\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2} \d{4})\] \[(?P<SEVERITY>\w+)\] (?P<MESSAGE>.*)$'
triggers:
- variable: "SEVERITY"
regex: "error"
excludes:
- variable: "SEVERITY"
regex: "error"
输出结果

效果同日志过滤,给之前触发过诊断事件的日志内容加上剔除条件后,就不会触发诊断事件了。
问题记录
问题:验证诊断功能时一直无法正常使用,报 cannot unmarshal !!seq into map[string]string 错误

分析:根据报错我一直怀疑是配置读取问题,但把 triggers 相关配置去掉就可以正常读取了,判断可能代码存在逻辑错误,因为前面是使用go install安装的命令进行验证,于是切换为源码编译的命令进行验证,发现恢复正常了,据此判断 go install 方式安装的代码很可能非最新版本导致。
解决:切换为源码安装的命令进行验证,即
OPENAI_KEY=$YOUR_KEY /opt/doctorgpt/agent/doctorgpt --logfile="test.log" --configfile="config.yaml" --outdir="./errors"

浙公网安备 33010602011771号