DoctorGPT安装与使用

服务简介

DoctorGPT 是一个将 GPT 带入生产,用于错误诊断的工具,它可以监控你的应用程序日志中的问题并对其进行诊断。
项目github地址:https://github.com/ingyamilmolinar/doctorgpt
项目gitee地址:https://gitee.com/mirrors/doctorgpt

安装准备

安装go编译器(可选)

DoctorGPT 是基于go开发的项目,如为源码安装方式,需先安装go运行环境,这里以centos安装环境为例,如已安装可跳过。

  1. 使用yum安装
yum -y install golang
  1. 添加环境变量,添加位置:/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
  1. 重新加载环境变量
source /etc/profile
  1. 验证
go version

获取openai可用密钥

  1. 获取可用key
    对很多用户来讲,目前由于国内网络环境隔离原因,想直接访问国外openai网站还是很麻烦的,这里推荐个不错的工具,很方便地解决这个国内访问及获取可用key的问题:GPT-API-free (前提:先拥有并登录自己的github账号)

  2. 验证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!"}]
    }'
    

    ③ 验证成功时的接口返回
    image

开始安装

这里安装环境为centos7

源码安装(推荐)

  1. 下载项目源码
# 这里选择安装在/opt下
cd /opt
# 下载项目
git clone https://gitee.com/mirrors/doctorgpt.git
  1. 编译
# 进入子目录agent
cd doctorgpt/agent
# 开始编译,-o 表示指定生成文件名为doctorgpt
go build -o doctorgpt

【注意】 使用源码编译方式安装的,执行命令时,需要显式指定到命令所在目录下,或者手动配置PATH环境变量。

  1. 安装验证
./doctorgpt -h

出现如下界面则表示安装成功
image

使用go install安装(不推荐)

后续验证发现存在问题, 见 问题记录

  1. 开始安装
go install "github.com/ingyamilmolinar/doctorgpt@latest"
  1. 安装验证
doctorgpt -h

出现如下界面则表示安装成功
image

【说明】 采用 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>.*)$'

输出结果
image

错误诊断

对于符合触发条件变量的日志内容,触发器会自动触发诊断事件,进行 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"

输出结果
image

诊断文件
image

从生成的诊断结果看,貌似没看出体现来自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"

输出结果
image

给之前已经触发过诊断事件的日志内容加上过滤条件后,确实不再触发了。

日志剔除

主要用于对解析日志内容进行排除的设置,和日志过滤不同的是,此块配置主要针对日志中排除敏感信息和干扰信息(如垃圾邮件)等。

使用配置

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"

输出结果
image

效果同日志过滤,给之前触发过诊断事件的日志内容加上剔除条件后,就不会触发诊断事件了。

问题记录

问题:验证诊断功能时一直无法正常使用,报 cannot unmarshal !!seq into map[string]string 错误
image
分析:根据报错我一直怀疑是配置读取问题,但把 triggers 相关配置去掉就可以正常读取了,判断可能代码存在逻辑错误,因为前面是使用go install安装的命令进行验证,于是切换为源码编译的命令进行验证,发现恢复正常了,据此判断 go install 方式安装的代码很可能非最新版本导致。
解决:切换为源码安装的命令进行验证,即

OPENAI_KEY=$YOUR_KEY /opt/doctorgpt/agent/doctorgpt --logfile="test.log" --configfile="config.yaml" --outdir="./errors"
posted @ 2023-09-17 22:21  505donkey  阅读(367)  评论(0)    收藏  举报