博客

开源 sysgrok - 用于分析、理解和优化系统的人工智能助手

Sysgrok 是一个实验性的概念验证,旨在展示如何使用 LLM 来帮助 SWE 和 SRE 了解系统、调试问题和优化性能。

无缝连接领先的 AI 和机器学习平台。开始免费云服务试用,探索 Elastic 的生成式 AI 功能,或者立即在您的计算机上试用。

在这篇文章中,我将介绍 sysgrok,这是一个研究原型,我们正在研究如何将 OpenAI 的 GPT 模型等大型语言模型 (LLM) 应用于性能优化、根本原因分析和系统工程等领域的问题。您可以在GitHub 上找到它。

sysgrok 是做什么的?

sysgrok 的功能包括

  • 提取剖析器识别出的最昂贵的函数和进程,解释每个函数和进程提供的功能,并提出优化建议

  • 获取一台主机和该主机遇到的问题描述,自动调试问题并提出补救措施和进一步行动建议

  • 使用剖析器注释过的源代码,解释热点路径,并提出提高代码性能的方法

sysgrok 的功能主要针对三大类解决方案:

  1. 作为性能、可靠性和其他系统相关数据的分析引擎。在这种模式下,LLM 接收工程师使用的其他工具(如 Linux 命令行工具、剖析器或 Observability 平台)的输出。sysgrok 的目标是使用 LLM 对系统状态进行解释、总结并形成假设。然后,它还可能提出优化或补救建议。

  2. 作为特定性能和可靠性相关任务的重点自动化解决方案。在性能工程和 SRE 工作中,有些任务会反复出现。对于这些问题,我们可以建立重点突出的自动化助手,工程师可以直接使用,sysgrok 本身也可以在解决其他问题时使用。例如,在性能工程中,回答这样的问题":"这个库是否有更快的、具有同等功能的版本?" "是很常见的。sysgrok 可直接支持该功能。

  3. 作为性能和可靠性问题的自动根本原因分析工具。前两类解决方案是数据分析、解释、搜索和总结的混合体。最重要的是,它们都是以一种有针对性的方式应用于工程师自己收集的数据。在 sysgrok 中,我们还在研究利用 LLM 解决问题的第三种方法,即 LLM 与其他工具相结合,自主执行根本原因分析并解决给定问题。在这种方法中,LLM 会得到一个问题描述(如"网络服务器出现高延迟" ),并告诉它有哪些功能可用(如"ssh 到主机," " 执行任意 Linux 命令行工具" )。然后,要求当地联络机制利用现有能力采取行动,对问题进行分流。这些操作由 sysgrok 执行,并要求 LLM 分析结果、分流问题、提出补救措施和下一步建议。

sysgrok 还处于早期阶段,但我们发布它是因为它已经在各种任务中发挥了作用--我们希望它能为其他人进行类似实验提供方便。如果您有任何想法,请随时向我们发送 PR 或在 GitHub 上打开问题!

分析 LLM 的性能问题

在过去的几个月里,LLM(如 OpenAI 的 GPT 模型)大受欢迎,它为各种产品(从客户助理聊天机器人到数据处理助手,再到编码助手)提供了自然语言接口和核心引擎。这一趋势的一个有趣方面是,基本上所有这些应用都使用了未经专门训练或微调的通用模型。相反,它们是在整个互联网的大范围内训练出来的,因此适用于各种任务。

那么,我们能否利用这些模型来帮助进行性能分析、调试和优化呢?调查性能问题、找出根本原因并提出优化方案的方法多种多样。不过,任何性能分析工作的核心都是查看各种工具(如 Linux 命令行工具或可观测性平台)的输出,并对输出进行解释,从而形成有关系统状态的假设。在对 GPT 模型进行培训的材料中,有涵盖软件工程、调试、基础设施分析、操作系统内部、Kubernetes、Linux 命令及其用法以及性能分析方法的资料。因此,这些模型可用于总结、解释和假设性能工程师日常遇到的数据和问题,从而加快工程师完成分析的速度。

不过,我们还可以更进一步,在工程师自己的调查过程中,不仅仅将 LLM 用于数据分析和问题解答。正如我们稍后将在本篇文章中展示的,在某些情况下,LLM 本身可用于驱动流程,由 LLM 决定运行哪些命令或查看哪些数据源来调试问题。

演示

有关 sysgrok 支持的全部功能,请查看 GitHub代码库。从广义上讲,它支持三种解决问题的方法:

方法 1:作为性能、可靠性和其他系统相关数据的分析引擎

在这种模式下,LLM 会收到工程师正在使用的另一个工具的输出,如 Linux 命令行工具、剖析器或可观测性平台。sysgrok 的目标是解释、总结并提出补救建议。

例如,topn子命令会获取剖析器报告的最昂贵函数,解释输出结果,然后提出优化系统的建议。

这段视频还展示了 sysgrok 提供的聊天功能。当提供 -chat 参数时,sysgrok 将在 LLM 每次回复后进入聊天会话。

这一功能也可通用于 Linux 命令行工具的输出。例如,在《60 秒内完成 Linux 性能分析》(Linux Performance Analysis in 60 seconds)一文中,Brendan Gregg 概述了 SRE 首次连接到出现性能或稳定性问题的主机时应运行的 10 条命令。analyzecmd子命令将要连接的主机和要执行的命令作为输入,然后为用户分析和汇总命令的输出。我们可以用它来自动完成 Gregg 所描述的过程,为用户提供 10 条命令生成的所有数据的一段式摘要,省去用户逐条查看命令输出的麻烦。

方法 2:作为特定性能和可靠性相关任务的重点自动化解决方案

在性能工程和 SRE 工作中,有些任务会反复出现。对于这些问题,我们可以建立有针对性的自动化助手,工程师可以直接使用,sysgrok 本身也可以在解决其他问题时使用。

例如,finfaster子命令将库或程序的名称作为输入,并使用 LLM 查找更快的等效替代库或程序。这是性能工程中非常常见的一项任务。

这种方法在 sysgrok 中的另一个例子是explainfunction子命令。该子命令使用一个库的名称和该库中的一个函数。它解释了该库的作用及其常见用例,然后解释了其功能。最后,如果该库和函数占用了大量 CPU 资源,它还会提出可能的优化建议。

方法 3:作为性能和可靠性问题的自动根本原因分析工具

LLM 的使用不仅限于集中问题解答、摘要和类似任务。它也不局限于一次性使用,即向他们提出一个单一的、孤立的问题。sysgrokdebughost子命令演示了如何将 LLM 用作"大脑" ,以实现自动解决问题的目标。在这种模式下,LLM 被嵌入到一个进程中,该进程使用 LLM 来决定如何调试特定问题,并赋予它连接主机、执行命令和访问其他数据源的能力。

debughost 命令可能是 sysgrok 目前最具实验性的部分。它展示了在实现性能分析自动代理的道路上迈出的一步,但要达到这一目标还需要大量的研究&D。

结论

在这篇文章中,我介绍了 sysgrok,这是一款全新的开源人工智能助手,用于分析、理解和优化系统。我们还讨论了 sysgrok 实现的三大类方法:

  1. 性能、可靠性和其他系统相关数据的分析引擎:请参阅 topn、stacktrace、analyzecmd 和 code 子命令。

  2. 针对特定性能和可靠性相关任务的自动化解决方案:请参阅 explainprocess、explaintfunction 和 findfaster 子命令。

  3. 自动分析性能和可靠性问题的根本原因:参见 debughost 子命令。

你可以在 GitHub 上找到 sysgrok 项目。请随时创建公关和问题,如果您想讨论项目或法律硕士的一般应用,也可以直接通过sean.heelan@elastic.co联系我。

这些内容对您有多大帮助?

相关内容

基于 Elasticsearch + Jina 嵌入的无监督文档集群

基于 Elasticsearch + Jina 嵌入的无监督文档集群

Matthew Adams
在 Streams 中利用机器学习自动化日志解析

在 Streams 中利用机器学习自动化日志解析

Nastia Havriushenko
使用 ML 生成过滤器和切面

使用 ML 生成过滤器和切面

Andre Luiz
评估搜索相关性第一部分 —— BEIR 基准测试

评估搜索相关性第一部分 —— BEIR 基准测试

Thanos Papaoikonomou
了解 Lucene 中的标量量化

了解 Lucene 中的标量量化

Benjamin Trent

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。