Skip to content

Latest commit

 

History

History
591 lines (389 loc) · 22.9 KB

README_Chinese.md

File metadata and controls

591 lines (389 loc) · 22.9 KB

数字运维员工

Dialogues Dialogues Dialogues Dialogues Dialogues

👫 欢迎扫码加入微信群! 🏆 Top 100 开源项目! 🌟 VLDB 2024!

演示快速开始警报与异常知识与工具Docker部署常见问题社区贡献者

🦾 构建您的个人数据库管理员(D-Bot)🧑‍💻, 擅长通过 阅读文件,使用各种工具,编写分析报告 解决数据库问题! 改版中!

🗺 演示效果

  1. 启动本地服务后,可以在网页端(采用了Chatchat项目的前端和配置方式)轻松将文档导入知识库、利用知识库进行有根据的问答、以及利用知识库进行异常告警的诊断分析。

Watch the video

  1. 通过用户反馈功能 🔗,您可以(1)给出反馈,使D-Bot跟踪并细化中间诊断结果,以及(2)通过单击“编辑”按钮编辑诊断结果。D-Bot可以从用户反馈(存储在向量数据库中)中积累优化模式,并自适应用户的诊断偏好。

  1. 在在线网站(http://dbgpt.dbmind.cn),您可以浏览所有历史诊断结果、使用的指标和详细的诊断过程。

frontend_v2

历史版本 1: [Gradio for Diag Game] (不依赖langchain)

历史版本 2: [Vue for Report Replay] (不依赖langchain)

📰 更新

  • Docker一键部署

    • 指标监控(prometheus)、数据库(postgres_db)、告警(alertmanager)和告警记录(python_app)

    • D-bot (目前容器过大,超过12GB)

  • 用户反馈机制 🔥🔥🔥

    • 基于用户反馈生成测试优化诊断

    • 优化模式的抽取和管理

  • 语言支持 (英文 / 中文)

    • 默认英文
    • 中文需要在配置config.yaml文件里加上language: zh
  • 前端

    • 知识库 + chat问答 + 异常诊断 + 报告回放
  • 带引用的诊断报告

  • 加速本地模型(极速版dbot)

  • 文档知识多路抽取

    • 向量数据库 (ChromaDB)
    • RESTful风格的搜索引擎 (Elasticsearch)
  • 根据 知识聚类结果 自动生成专家描述

  • 升级基于 LLM 的诊断机制:

    • 任务分派 -> 并行诊断 -> 交叉审查 -> 报告生成
    • 完善异步机制
  • 在多个层次上支持监控和优化工具 🔗 链接

    • 监控指标 (Prometheus)
    • 代码级别的火焰图分析,定位算子、配置等问题
    • 诊断知识检索 (dbmind)
    • 逻辑查询转换 (Calcite)
    • 索引优化算法 (适用于 PostgreSQL)
    • 物理操作符提示 (适用于 PostgreSQL)
    • 备份和时间点恢复 (Pigsty)
  • 我们的愿景论文已发布 (持续更新)

该项目正在不断引入新特性 👫👫
不要忘记星标 ⭐ 并关注 👀 以同步最新进展 :)

🕹 快速开始

1. 环境配置

1.1 后端服务配置

  • 首先,确保你的机器安装了 Python (>= 3.10)
$ python --version
Python 3.10.12

接着,创建一个虚拟环境,并在虚拟环境内安装项目的依赖

# 拉取仓库
$ git clone https://github.com/TsinghuaDatabaseGroup/DB-GPT.git

# 进入目录
$ cd DB-GPT

# 安装全部依赖
$ pip3 install -r requirements.txt 
$ pip3 install -r requirements_api.txt # 如果只运行API,可以只安装API依赖,请使用 requirements_api.txt

# 默认依赖包括基本运行环境(Chroma-DB向量库)。如果要使用其它向量库,请将 requirements.txt 中相应依赖取消注释再安装。
  • PostgreSQL v12 (我们是基于 PostgreSQL v12 进行开发测试的,我们不保证其他版本的 PostgreSQL 的兼容性)

    确保您的数据库支持远程连接 (链接)

    此外,安装扩展如 pg_stat_statements(跟踪频繁查询), pg_hint_plan(优化物理操作符), 和 hypopg(创建虚拟索引)。

    注意 pg_stat_statements 会持续累积查询统计数据。因此您需要定期清除统计数据:1) 要丢弃所有统计数据,执行 "SELECT pg_stat_statements_reset();"; 2) 要丢弃特定查询的统计数据,执行 "SELECT pg_stat_statements_reset(userid, dbid, queryid);"

  • (可选) 如果您需要在本地或离线环境中运行此项目,您首先需要将所需的模型下载到本地计算机,然后进行正确的配置。

  1. 下载 Sentence Trasformer 模型参数

创建新目录 ./multiagents/localized_llms/sentence_embedding/

将下载的sentence-transformer.zip压缩包放置在./multiagents/localized_llms/sentence_embedding/目录下;解压压缩包。

  1. HuggingFace 下载 LLM 和 Embedding 模型。

下载模型需要首先安装 Git LFS,然后运行

$ git lfs install
$ git clone https://huggingface.co/moka-ai/m3e-base
$ git clone https://huggingface.co/Qwen/Qwen-1_8B-Chat
  1. 调整 模型设置 为下载路径,如
EMBEDDING_MODEL = "m3e-base"
LLM_MODELS = ["Qwen-1_8B-Chat"]
MODEL_PATH = {
    "embed_model": {
        "m3e-base": "m3e-base", # Download path of embedding model.
    },

    "llm_model": {
        "Qwen-1_8B-Chat": "Qwen-1_8B-Chat", # Download path of LLM.
    },
}
  1. 下载并配置 本地 LLM

1.2 前端服务配置

  • 首先,确保你的机器安装了 Node (>= 18.15.0)
$ node -v
v18.15.0

接着,安装项目依赖

cd webui
# pnpm address https://pnpm.io/zh/motivation
# install dependency(Recommend use pnpm)
# you can  use "npm -g i pnpm" to install pnpm 
pnpm install

2. 初始化知识库和配置文件

复制配置文件,注意查看每个文件的注释,根据自己需求修改

$ python copy_config_example.py
# 生成的配置文件在 configs/ 目录下
# basic_config.py 是基础配置文件,不需要修改
# diagnose_config.py 是诊断配置文件,需要根据自己的环境修改。
# kb_config.py 是知识库配置文件,可以修改DEFAULT_VS_TYPE来指定知识库的存储向量库等,也可以修改修改相关的路径。
# model_config.py 是模型配置文件,可以修改LLM_MODELS来指定使用的模型,当前模型配置主要针对知识库搜索,诊断相关的模型还有一些硬编码在代码中,后续会统一到这里。
# prompt_config.py 是prompt配置文件,主要是LLM对话和知识库的prompt。
# server_config.py 是服务配置文件,主要是服务的端口号等。

!!! 注意,请在初始化知识库之前修改以下配置,否则可能会导致数据库初始化失败。

  • model_config.py
# EMBEDDING_MODEL   向量化模型,如果选择本地模型,需要按需下载到根目录。
# LLM_MODELS        LLM,如果选择本地模型,需要按需下载到根目录。
# ONLINE_LLM_MODEL  如果使用线上模型,需要修改配置。
  • server_config.py
# WEBUI_SERVER.api_base_url   需要关注这个参数,如果是在服务器上部署项目,则需要修改配置。

初始化知识库

$ python init_database.py --recreate-vs
DIAGNOSTIC_CONFIG_FILE = "config.yaml"
  • 要通过用户反馈交互优化诊断,您可以设置
DIAGNOSTIC_CONFIG_FILE = "config_feedback.yaml"
  • 要使用 Qwen 进行中文诊断,您可以设置
DIAGNOSTIC_CONFIG_FILE = "config_qwen.yaml"

3. 一键启动

按照以下命令启动项目

$ python startup.py -a

4. 启动界面示例

如果正常启动,你将能看到以下界面

  1. FastAPI Docs 界面

  1. Web UI 启动界面示例:
  • Web UI 知识库管理页面:

  • Web UI 对话界面:

img

  • Web UI 诊断页面:

👩🏻‍⚕️ 异常诊断

通过使用Docker部署节省时间。

1. 先决条件

  • (可选) 在 PostgreSQL 中启用慢查询日志 (链接)

    (1) 对于 "systemctl restart postgresql",服务名可以不同(例如,postgresql-12.service);

    (2) 使用绝对日志路径名称如 "log_directory = '/var/lib/pgsql/12/data/log'";

    (3) 在 postgresql.conf 中设置 "log_line_prefix = '%m [%p] [%d]'"(记录不同查询的数据库名)。

  • (可选) Prometheus

    查看prometheus.md了解详细的安装指南。

2. 诊断

  • 测试单个案例 我们在test_case文件夹下面放了多个测试案例。可以通过前端页面选择案例文件,进行诊断,也可以通过命令行进行诊断。
python3 run_diagnose.py --anomaly_file ./test_cases/testing_cases_5.json --config_file config.yaml
  • 支持中文qwen调用诊断。请先用vllm在你的gpu机器上部署一个服务,参数配置在configs的model_config修改。如何部署服务请参考Qwen1.5官方介绍
python3 run_diagnose.py --anomaly_file ./test_cases/testing_cases_5.json --config_file config_qwen.yaml

🎩 告警和异常

告警管理

查看如何快速部署 Prometheus 和 Alertmanager ➡️ prometheus_service_docker

  • 你也可以选择我们提供的docker来进行快速部署(docker deployment

异常模拟

脚本触发的异常

我们提供可能引起典型异常的脚本。在 http://dbgpt.dbmind.cn 查看不同的异常案例。

根本原因 描述 可能的警报
INSERT_LARGE_DATA 插入大量数据的执行时间较长
FETCH_LARGE_DATA 获取大量数据的执行时间较长
REDUNDANT_INDEX 表中不必要且多余的索引
VACUUM 数据修改导致的未使用空间
POOR_JOIN_PERFORMANCE Join 操作符的性能差
CORRELATED_SUBQUERY SQL 中不可提升的子查询 ,
LOCK_CONTENTION 锁争用问题
CPU_CONTENTION 严重的外部 CPU 资源争用
IO_CONTENTION 影响 SQL 性能的 IO 资源争用
COMMIT_CONTENTION 高并发提交影响 SQL 执行
SMALL_MEMORY_ALLOC 工具分配的内存空间过小

手动触发异常

点击查看 29 种典型异常与专家分析(由 DBMind 团队支持)

📎 自定义知识和工具

1. 知识提取

(1) 如果只需要简单的文档拆分,可以直接使用“知识库管理页面”中的文档导入功能。

(2) 本功能目前要求文档本身有章节格式信息,目前仅支持docx格式。

步骤 1. 配置 ./doc2knowledge/doc_to_section.py 中的 ROOT_DIR_NAME 路径,并将所有docx格式文档存放在 ROOT_DIR_NAME 下。

步骤 2. 配置OPENAI_KEY。

export OPENAI_API_KEY=XXXXX

步骤 2. 按章节索引将文档分割为单独的章节文件。

cd doc2knowledge/
python doc_to_section.py

步骤 3. 修改doc2knowledge.py脚本中的参数并运行脚本:

python doc2knowledge.py

Alt text

2. 工具准备

  • 工具 API(用于优化)

    模块 功能
    index_selection(已装备) 启发式 算法
    query_rewrite(已装备) 45 条规则
    physical_hint(已装备) 15 个参数

    对于[query_rewrite, physical_hint]内的功能,你可以使用api_test.py 脚本来验证其有效性。

    如果功能确实有效,请将其添加到相应模块的api.py中。

索引顾问工具

我们使用db2advis启发式算法为给定的工作负载推荐索引。函数api是optimize_index_selection

🐳 Docker 启动

您可以使用 Docker 快速、安全地使用监控平台和数据库。

1. 安装 Docker 和 Docker-Compose

请参考教程(例如在 CentOS 上)安装 Docker 和 Docker-Compose。

2. 启动服务

我们使用 docker-compose 来构建和管理多个用于指标监控(prometheus)、告警(alertmanager)、数据库(postgres_db)和告警记录(python_app)的 Docker 容器。

cd prometheus_service_docker
docker-compose -p prometheus_service -f docker-compose.yml up --build

下次启动 prometheus_service 时,您可以直接执行 "docker-compose -p prometheus_service -f docker-compose.yml up",而无需重新构建 Docker 容器。

3. 运行异常文件并生成新告警

anomaly_trigger/utils/database.py中配置设置(例如,将 "host" 替换为服务器的 IP 地址),并执行异常生成命令,如:

cd anomaly_trigger
python3 main.py --anomaly MISSING_INDEXES --threads 100 --ncolumn 20 --colsize 100 --nrow 20000

如果执行后没有记录告警,您可能需要修改参数值,例如 "--threads 100"。

在收到从 prometheus_service 发送到 http://127.0.0.1:8023/alert 的请求后,告警摘要将记录在 prometheus_and_db_docker/alert_history.txt 中,如:

这样,您可以使用标记为 resolved 的告警作为新的异常(存放在 ./diagnostic_files 目录下)由 d-bot 进行诊断。

💁 常见问题解答

🤨 '.sh' 脚本命令无法在Windows系统上执行。 将Shell切换到*git bash*或使用*git bash*来执行'.sh'脚本。
🤨 Windows系统上出现“找不到名为'xxx'的模块”。 这个错误是由Python运行时环境路径问题引起的。你需要进行以下步骤:

步骤 1:检查环境变量。

你必须在环境变量中配置"Scripts"。

步骤 2:检查 IDE 设置。

对于 VS Code,下载 Python 扩展。对于 PyCharm,为当前项目指定 Python 版本。

⏱ 待办事项

  • 项目清理
  • 支持更多异常
  • 根据匹配的知识严格限制 llm 输出(过多不相关信息)
  • 查询日志选项(可能会占用磁盘空间,我们需要仔细考虑)
  • 添加更多通信机制
  • 支持更多知识来源
  • 项目工程化,解决依赖问题和代码中的硬编码问题
  • 独立知识抽取模块
  • 达到 D-bot(gpt4)能力的本地化模型
  • 支持其他数据库(例如,mysql/redis)

👫 社区

🤗 相关项目

https://github.com/OpenBMB/AgentVerse

https://github.com/Vonng/pigsty

https://github.com/UKPLab/sentence-transformers

https://github.com/chatchat-space/Langchain-Chatchat

https://github.com/shreyashankar/spade-experiments

📒 引用

@misc{zhou2023llm4diag,
      title={LLM As DBA},
      author={Xuanhe Zhou, Guoliang Li, Zhiyuan Liu},
      year={2023},
      eprint={2308.05481},
      archivePrefix={arXiv},
      primaryClass={cs.DB}
}
@misc{zhou2023dbgpt,
      title={DB-GPT: 大型语言模型遇上数据库},
      author={Xuanhe Zhou, Zhaoyan Sun, Guoliang Li},
      year={2023},
      archivePrefix={Data Science and Engineering},
}

📧 贡献者

其他合作者: Wei Zhou, Kunyi Li

我们感谢所有对这个项目的贡献者。如果你想参与或贡献,不要犹豫!

联系我们

👏🏻欢迎加入我们的微信群