Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误

作者:DAVID HOPE

本博客介绍了 Elasticsearch 相关性引擎 (ESRE​​) 及其 Elastic Learned Sparse Encoder 功能的新颖应用,特别是在日志分析中。

最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 包含一系列重要功能,可增强搜索能力,并可使用与询问生成式 AI 问题相同的自然语言来查询 Elasticsearch®。

这让我想知道我们如何将其用于日志。 开始使用 Elastic Learned Sparse Encoder 模型相当容易,这是一种支持语义搜索的重要 ESRE 功能 - 我们将在本博客中介绍如何使用它进行日志记录。 此功能与 Elasticsearch® 当前的功能有很大不同,因为它理解单词的含义并广泛搜索具有相似含义或与我搜索的单词同义的单词。

Elastic Learned Sparse Encoder 也是一种高效的搜索排名解决方案,在域外空间(即,当模型未严格根据用户数据进行训练时),可产生比传统 BM25 和基于向量的 KNN 搜索更好的结果。 后期交互模型通过对原始文本进行编码,以便在查询时提供更多上下文信息,从而提高搜索准确性。

Elastic Learned 稀疏编码器如何工作?

当 Elastic Learned Sparse Encoder 应用于原始文本(例如日志消息)时,它会生成一个数据结构。 该结构的键代表原始文本中找到的术语及其同义词。 在称为术语扩展(text expansion)的过程中,模型根据术语和同义词与原始文本的相关性,从 30K 固定术语的静态词汇表中添加和删除数据中的术语和同义词。 这与向量嵌入类似,创建辅助数据结构(或多个结构)并将其存储在字段中,然后可用于查询中的即时语义匹配。

每个术语还有一个关联的分数,它捕获了其在原始文本中的上下文重要性。 我们将此数据结构称为(评分的)词袋(bag of words)或 BOW。

BOW 示例

请注意如何捕获输入文本的单词、词干、添加同义词以及最终评分。 另请注意,“Scored Bag of Words” 结构只是 [word => Score] 的映射。 稍后你将看到这是如何为我们的系统日志生成的。

在查询时,输入查询字符串在后台经历与我们在摄取时执行的原始日志文本相同的推理过程,以生成 BOW。 然后,将此 BOW 与索引中原始日志文本的 BOW 进行匹配,类似于带有嵌入向量的 k 最近邻搜索。 搜索结果的最终排名分数是一个公式的结果,该公式考虑了查询 BOW 中的匹配单词和原始日志文本的分数。

我们来举个例子说明它的用处,如果我正在搜索 “Are there any TLS warnings?”。 在我的系统日志中,以下日志行 “2023/05/24 17:10:33: Error getting config status, workload certificates may not be configured: HTTP 404” 匹配,尽管该特定日志行中不存在精确匹配。 ESRE 了解 TLS 与证书相关。

这里需要注意的是:此搜索是 “模糊” 搜索,可能不会为你提供所需的结果。 你甚至可以使用更好的模型来实现此目的,例如根据你自己的数据训练的模型。 重要的是要记住,这只是当我们需要解决模糊问题时帮助我们指明正确方向的另一个工具。 能够在搜索过程中一般性地讨论问题,而不必非常具体地讨论我们看到的错误,这可以帮助我们进行根本原因分析。

你可以启动并运行它,然后只需单击几下即可开始使用它来搜索日志。

这能够改变你进行问题检测和修复的方式,因为 ESRE 可能会返回你以前可能从未想过分析但与你要解决的问题相关的日志。 这是减少 MTTx 指标的胜利。 然后,你可以使用从 Elastic 返回的文档和相同的搜索词向 ChatGPT 等生成式 AI 引擎提出问题,我们将在最后探讨该引擎,并且在本博客的其他用例中也进行了探讨。

在本博客的最后,你将得到一个如下所示的高级流程:

设置步骤

在接下来的几个步骤中,我将逐步介绍:

  • 在 Elastic Cloud 上获取帐户(必须是版本 8.8 及以上)并安装 Elastic Agent
  • 在此环境中设置 ESRE 并将日志连接到 ESRE
  • 使用 Kibana® 通过 ESRE 搜索日志
  • 使用 ChatGPT 快速创建可与 Elasticsearch 和 ESRE 配合使用的应用程序

第 0 步:在Elastic Cloud上创建帐户

在继续之前有一些注意事项:

1)确保在创建 Elastic Cloud 实例时单击 “Advanced Options”(如下所示)并为本博客添加至少 4GB RAM 的机器学习节点。

2) 当你按照以下说明操作时,请务必遵循 “Add System” 集成步骤。

牢记这些注意事项,按照说明开始使用 Elastic Cloud。

牢记这些注意事项,按照说明开始使用 Elastic Cloud。

第 1 步:安装 Elastic Learned Sparse Encoder 模型

这些步骤将部署 Elastic Learned Sparse Encoder 以与系统日志一起使用。 文档页面位于此处。中文指南可以在这里获得。

Elastic Learned Sparse Encoder 是由 Elastic 训练的检索模型,使你能够执行语义搜索以检索更相关的搜索结果。 此搜索类型为你提供基于上下文含义和用户意图的搜索结果,而不是精确的关键字匹配。

转到 Analytics -> Machine Learning:

点击 Model Management -> Trained Models:

选择 Elastic Learned Sparse EncodeR v1 并单击最右侧的下载按钮。

下载后,我们需要启动它。

就本博客而言,默认设置就可以了。

第 2 步:修改索引模板

接下来,我们需要向传入文档添加几个字段,以便 Elastic Learned Sparse Encoder 用于 tokens 和搜索。 我们可以通过更新我们想要使用模型的 log 类型的索引模板来做到这一点。

在本节中,我们将添加 token 字段和 text_field — 这两个字段都是与 Elastic Learned Sparse Encoder 模型一起使用所必需的。 运行推理时,模型将在 text_field 字段中查找日志消息。 然后,推理步骤会将日志消息文本转换为 token 权重对列表,该列表存储在 tokens 字段中 - 这就是我们需要这些映射的原因。

索引模板允许我们定义索引中文档的格式和映射,在本例中为 syslog 索引。

前往 “Stack Management”。

接下来,转到 Index Management -> Index Templates。 我们将修改 “syslog” 索引,如下所示:

单击索引名称,选择右下角的 “Manage”,然后选择 “Edit”。

跳至步骤 4:“Mappings”。

并添加以下映射:ml.tokens 和 text_field。

单击 Next 并保存。

第 3 步:添加自定义 ingest pipeline

接下来,我们将添加一个自定义摄取管道,以便 Elastic Learned Sparse Encoder 可以将 token 添加到发送到 Elastic 的文档中。 这是语义搜索所必需的 —— 请对此进行深入研究。 很酷的是我们可以在文档中看到 token,这让你直观地了解其工作原理。

管道步骤首先将日志消息复制到 text_field 字段中,因为这是模型查找所需数据的地方。 通过推理步骤,它会将日志消息文本转换为 token 权重对的列表,该列表存储在 ml.tokens 字段中。

请注意,如果你在此索引上的日志摄取非常繁忙,则推理将增加一点处理时间 - 如果你的负载非常重,这可能不是一个好主意,但对于我们这里的小型用例来说,这应该还好。

首先,前往 Ingest pipeline:

创建一个名为 “logs-system.syslog@custom” 的新摄取管道。 这是一个从主 syslog 摄取管道调用的特殊名称,并且存在于所有 “Managed” 管道中,因此你可以添加自定义摄取步骤。

现在让我们向该摄取管道添加两个处理器:

1)第一个处理器将使用日志消息字段设置 text_field,其中包含我们要使用 Set 处理器和 Copy from 操作搜索的日志数据,如下所示。

2)添加的第二个处理器是 “inference” 处理器,它将生成语义搜索所需的 token。 按以下方式进行设置。

字段映射:

{"text": "text_field"
}

Inference 配置:

{"text_expansion": {"results_field": "tokens"}
}

完成后,单击 “Create pipeline”。

第 4 步:滚动索引

要强制索引 rollover 并使用我们创建的新索引模板,请转到 Dev Tools 并执行以下 POST:

POST /logs-system.syslog-default/_rollover/

第 5 步:欢迎使用日志进行语义搜索

现在,转到发现并创建一个仅显示系统日志的新数据视图:

你可能需要稍等一下才能在此处填充一些数据。 一旦有数据,你应该会看到 ML Tokens 字段填充如下:

这就是 Elastic Sparse Learned Encoder 的魔力。你可以在此处看到的 token 增强了它如何能够理解日志行的语义,并使你能够找到与搜索参数具有相似含义的日志。

现在我们可以运行语义搜索。 将下面的语言框从 KQL 更改为 Lucene。

在搜索框中输入以下内容。 这里,文本扩展查询使用自然语言处理模型将查询文本转换为 token 权重对列表,然后将其用于针对我们上面定义的 rank features 字段的查询中。

{"text_expansion":{"ml.tokens":{"model_id":".elser_model_1","model_text":"Are there any TLS warnings?"}}}

恭喜! 你刚刚使用 Elastic 进行了语义搜索。

现在这里还有一件事要做:我们需要对结果进行排序,以便我们看到排名靠前的搜索结果。 添加 _score 字段,如下所示。

还有 “message” 字段。

现在我们可以按从高到低的顺序对其进行排序,这可以告诉我们什么是强匹配(类似于 Google 上搜索结果的排名方式):

现在让我们看看是否可以将其连接到 ChatGPT!

第 6 步:将其连接到 ChatGPT

现在让 ChatGPT 为我们编写一些代码。 我们询问 ChatGPT:

Can you write some code to query Elasticsearch and then send the documents that are returned to ChatGPT?

它编写了以下代码:

from elasticsearch import Elasticsearch
from openai import OpenAI, ChatCompletion# Initialize Elasticsearch
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])# Search for documents in Elasticsearch
body = {"query": {"match_all": {}}
}res = es.search(index='your_index_name', body=body)# Initialize OpenAI
openai = OpenAI(api_key='your_openai_api_key')# Send documents to ChatGPT
for hit in res['hits']['hits']:message = {"role": "system","content": f"Document : {hit['_source']}"}# Generate response from ChatGPTresponse = openai.ChatCompletion.create(model="gpt-4.0-turbo",messages=[message])# Print the model's responseprint(response['choices'][0]['message']['content'])

现在这很容易修改,因此我们可以使用新的 Elasticsearch “Semantic query”,如下所示。

更改以下行:

# Search for documents in Elasticsearch
body = {"query": {"match_all": {}}
}

下面就到此为止。 请注意,这将确保我们只获得排名前三的结果,从而获得最相关的结果:

body = {"query": {"text_expansion": {"ml.tokens": {"model_id": ".elser_model_1","model_text": "Are there any TLS warnings?"}}},"size": 3,"sort": [{"_score": {"order": "desc"}}]
}

并更改这一行:

"content": f"Document : {hit['_source']}"

变成这样:

 "content": f”Are there any TLS warnings? Log line : {hit['_source']}"

这使我们能够将 Elasticsearch 结果包含在 ChatGPT 查询中,从而大大降低产生幻觉的可能性,并且更有可能为我们提供相关的诊断。 在这里查看最终结果。

ChatGPT responds:

The error message you're seeing seems to suggest that there might be an issue related to Transport Layer Security (TLS) certificates. The HTTP 404 error indicates that the requested resource cannot be found.

  • Incorrect or incomplete configuration: The error suggests that workload certificates may not be configured. If your service requires TLS certificates to communicate securely, but these have not been properly set up, this could cause the issue. You should review your configuration to make sure TLS is correctly set up
  • Wrong path: The system might not be able to find the certificates because they're not located at the specified path in your configuration. You need to ensure that the path to the certificate files is correct.
  • Permission issues: There could be issues with file or directory permissions that are preventing your system from accessing the certificate files. You should ensure that the relevant user or service has the necessary permissions to access these files.
  • Server or service is not available: The HTTP 404 error could indicate that the server or service you're trying to reach is not currently available or doesn't exist. You need to check if the server is running and that the endpoint is correct. Now if you didn’t want to do this yourself, I have created an application that does all of this over here, in this GitHub repository. When you run it, you get this nice graphical user interface:

因此,将所有内容连接起来后,我们解决方案的架构最终如下所示:

现在你已经了解了如何设置 Elastic Learned Sparse Encoder 模型,我向读者提出挑战,要求他们弄清楚他们还可以将该模型用于哪些其他用途,以及他们可以提出哪些日志记录用例。 你还可以扩展此示例以在 Elastic 中缓存和存储 ChatGPT 响应,就像此博客一样,使你能够启动知识库。 随着时间的推移,你可以用自己的知识来增强这一点。

SRE 开箱即用的卓越相关性

在本博客中,我们指导你完成设置用于日志分析的 Elastic Learned Sparse Encoder 的过程,并向我们的读者提出了探索该模型的新用途的挑战。 一个简单的示例可能涉及探测任何与 TLS 相关的问题,如本博客中所示。

随着 Elasticsearch 相关性引擎的推出,我们将独特的 Elastic 检索模型带到你的手中。 这种即用型模型可以轻松地与我们的全系列数据摄取方法集成,包括本博客中所示的摄取管道。 开箱即用,任何人都可以在其可搜索语料库中使用它,而且它足够紧凑,可以容纳在笔记本电脑内存的范围内。

Elastic 的学习稀疏编码器为搜索用例(包括日志)提供跨域语义搜索,如本博客所示,无需定制调整或培训即可提供高度相关的搜索结果。

现场测试一致表明,混合排名技术可产生最相关的搜索结果集。 然而,一个关键因素 —— RRF——一直不存在。 我们现在正在集成 RRF 来满足你的应用程序搜索需求,使你能够融合向量和文本搜索功能。

详细了解 Elasticsearch 和生成式 AI 的可能性。

在这篇博文中,我们可能使用了第三方生成式人工智能工具,这些工具由其各自所有者拥有和运营。 Elastic 对第三方工具没有任何控制权,我们对其内容、操作或使用不承担任何责任,也不对你使用此类工具可能产生的任何损失或损害负责。 使用人工智能工具处理个人、敏感或机密信息时请务必谨慎。 你提交的任何数据都可能用于人工智能培训或其他目的。 无法保证你提供的信息将得到安全或保密。 在使用之前,你应该熟悉任何生成式人工智能工具的隐私惯例和使用条款。

Elastic、Elasticsearch 和相关标志是 Elasticsearch N.V. 的商标、徽标或注册商标。 在美国和其他国家。 所有其他公司和产品名称均为其各自所有者的商标、徽标或注册商标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/74889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF路由计算

1、Router LSA LSA 链路状态通告,是OSPF进行路由计算的主要依据,在OSPF的LSU报文中携带,其头重要字段及解释: LS Type(链路状态类型):指示本LSA的类型。 在域内、域间、域外…

goweb入门

创建gomod项目 go mod init web01新建main.go package mainimport ("fmt""net/http" )func handler(writer http.ResponseWriter, request *http.Request) {fmt.Fprintf(writer, "Hello World,%s!", request.URL.Path[1:]) } func main() {fmt…

李宏毅深度学习self-attentin学习笔记

self-attention 一、self-attention的起源二、self-attention网络架构三、multi-head self-attention四、positional encoding五、pytorch实现 一、self-attention的起源 self-attention初始也是用于解决seq2seq的问题。即input是一堆序列,而output也是一段长度固定…

网络层--IP协议

引入: IP协议主要解决什么问题呢? IP协议提供一种将数据从主机A 发送到 主机B的能力。(有能力不一定能做到,比如小明很聪明,可以考100分,但是他也不是每次搜能考100分&#xff0…

java面试题(17):链表两数相加

两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头…

基于SpringBoot+微信小程序的智慧医疗线上预约问诊小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 近年来,随…

MyBatis 框架入门理论与实践

文章目录 1. MyBatis 框架介绍1.1 MyBatis优点1.2 MyBatis 不足 2. MyBatis 框架整体架构3. MyBatis 的 ORM 介绍4. MyBatis 框架入门开发4.1 入门案例的搭建4.1.1 准备SQL数据4.1.2 新建 SpringBoot 项目4.1.3 pom文件:4.1.4 配置文件4.1.5 mapper 和 mapper.xml4.…

mysql修改密码

1.mysql5.7以后和8.0版本的修改方法 摘要:经常会遇到mysql忘记密码,以及在公司中,交接没有完成导致无法进入数据库,下面提供了mysql的修改密码方法和使用图形化工具连接数据库的方法以及不需要密码直接进入数据库。 启动mysqld进…

电商类面试问题--01Elasticsearch与Mysql数据同步问题

在实现基于关键字的搜索时,首先需要确保MySQL数据库和ES库中的数据是同步的。为了解决这个问题,可以考虑两层方案。 全量同步:全量同步是在服务初始化阶段将MySQL中的数据与ES库中的数据进行全量同步。可以在服务启动时,对ES库进…

二分搜索树层序遍历(Java 实例代码)

目录 二分搜索树层序遍历 Java 实例代码 src/runoob/binary/LevelTraverse.java 文件代码: 二分搜索树层序遍历 二分搜索树的层序遍历,即逐层进行遍历,即将每层的节点存在队列当中,然后进行出队(取出节点&#xff0…

注意力机制讲解与代码解析

一、SEBlock(通道注意力机制) 先在H*W维度进行压缩,全局平均池化将每个通道平均为一个值。 (B, C, H, W)---- (B, C, 1, 1) 利用各channel维度的相关性计算权重 (B, C, 1, 1) --- (B, C//K, 1, 1) --- (B, C, 1, 1) --- sigmoid 与原特征相…

Jmeter进阶使用指南-使用参数化

Apache JMeter是一个广泛使用的开源负载和性能测试工具。在进行性能测试时,我们经常需要模拟不同的用户行为和数据,这时候,参数化就显得尤为重要。此文主要介绍如何在JMeter中使用参数化。 什么是参数化? 参数化是一种将静态值替…

机器学习:自然语言处理上的对抗式攻击

Attacks in NLP 相关话题 Introduction 以前的攻击专注于图像和语音上,而NLP上的内容比较少。而NLP的复杂度跟词典有关系: NLP只能在embedding后的特征上加噪声 Evasion Attacks 电影的评论情感分类,将film换成films后,评论从…

制作立体图像实用软件:3DMasterKit 10.7 Crack

3DMasterKit 软件专为创建具有逼真 3D 和运动效果的光栅图片而设计:翻转、动画、变形和缩放。 打印机、广告工作室、摄影工作室和摄影师将发现 3DMasterKit 是一种有用且经济高效的解决方案,可将其业务扩展到新的维度,提高生成的 3D 图像和光…

STM32低功耗分析

1.ARM发布最新内核 2023 年5 月 29 日,Arm 公司今天发布了处理器核心:Cortex-X4、Cortex-A720 和Cortex-A520。这些核心都是基于 Arm v9.2 架构,只支持 64 位指令集,不再兼容 32 位应用。Arm 公司表示,这些核心在性能…

postgresql-常用日期函数

postgresql-常用日期函数 简介计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间时区转换 简介 PostgreSQL 提供了以下日期和时间运算的算术运算符。 获取当前系统时间 select current_date,current_time,current_timestamp ;-- 当前系统时间一周后的日…

Selenium - Tracy 小笔记2

selenium本身是一个自动化测试工具。 它可以让python代码调用浏览器。并获取到浏览器中加们可以利用selenium提供的各项功能。帮助我们完成数据的抓取。它容易被网站识别到,所以有些网站爬不到。 它没有逻辑,只有相应的函数,直接搜索即可 …

在Linux系统上用C++将主机名称转换为IPv4、IPv6地址

在Linux系统上用C将主机名称转换为IPv4、IPv6地址 功能 指定一个std::string类型的主机名称&#xff0c;函数解析主机名称为IP地址&#xff0c;含IPv4和IPv6&#xff0c;解析结果以std::vector<std::string>类型返回。解析出错或者解析失败抛出std::string类型的异常消…

用友U8与MES系统API接口对接案例分析

企业数字化转型&#xff1a;轻易云数据集成平台助力 U8 ERPMES 系统集成 为什么选择数字化转型&#xff1f; 领导层对企业资源规划&#xff08;ERP&#xff09;的深刻理解促使了数字化转型的启动。采用精确的“N5”滚动计划&#xff0c;为供应商提供充分的预期信息&#xff0c…

Tomcat多实例与负载均衡

Tomcat多实例与负载均衡 一、Tomcat多实例1.1、安装JDK1.2、安装tomcat1.3、配置tomcat环境变量1.4、修改tomcat中的主配置文件1.5、修改启动脚本和关闭脚本1.6、 启动tomcat并查看 二、NginxTomcat负载均衡、动静分离2.1、部署Nginx负载均衡2.2、部署第一台tomcat2.3、部署第二…