LogPatternTool
2.19 版本引入
LogPatternTool 使用查询领域特定语言 (DSL) 或 管道处理语言 (PPL) 查询检索日志数据,以提取和识别日志消息中重复出现的结构模式。在根据共享模板对相似日志进行分组后,它会返回最常见的模式。每个模式都包含代表性的示例日志以及数据集中与该模式匹配的日志条目总数。
OpenSearch 根据请求中是否存在 input
或 ppl
参数来确定您使用的是 DSL 查询还是 PPL 查询。
-
如果存在
input
参数(作为字符串的 DSL 查询 JSON),则该工具会将请求解释为 DSL 查询。 -
如果
ppl
参数存在且input
不存在,则该工具会将请求解释为 PPL 查询。 -
如果两者都提供,该工具将优先使用 DSL 查询。
为避免歧义,当您运行智能体时,请在请求中仅提供两者之一:DSL 的 input
或 PPL 的 ppl
。
步骤 1:注册将运行 LogPatternTool 的流智能体
流智能体按顺序运行一系列工具,并返回最后一个工具的输出。要创建流智能体,请发送以下注册智能体请求:
POST /_plugins/_ml/agents/_register
{
"name": "Test_Agent_For_Log_Pattern_Tool",
"type": "flow",
"description": "this is a test agent for the LogPatternTool",
"memory": {
"type": "demo"
},
"tools": [
{
"type": "LogPatternTool",
"parameters": {
"sample_log_size": 1
}
}
]
}
有关参数描述,请参阅注册参数。
OpenSearch 返回一个代理 ID
{
"agent_id": "OQutgJYBAc35E4_KvI1q"
}
步骤 2:运行代理
通过发送以下请求来运行代理
POST /_plugins/_ml/agents/OQutgJYBAc35E4_KvI1q/_execute
{
"parameters": {
"input": "{\"query\":{\"bool\":{\"filter\":[{\"range\":{\"bytes\":{\"from\":10,\"to\":null,\"include_lower\":true,\"include_upper\":true,\"boost\":1}}}],\"adjust_pure_negative\":true,\"boost\":1}}}",
"index": "opensearch_dashboards_sample_data_logs"
}
}
OpenSearch 返回一个 JSON 响应,其中包含数据中发现的最常见日志模式,数量上限为指定限制。每个识别出的模式都表示为一个 JSON 对象,包含三个关键组件:模式模板、一组匹配该模式的代表性示例日志,以及一个指示该模式在数据集中出现频率的计数。结构遵循格式 {"pattern": "...", "sample logs": [...], "total count": N}
,如下面的示例响应所示:
{
"inference_results": [
{
"output": [
{
"name": "response",
"result":"""[{"pattern":"<*IP*> - - [<*DATETIME*>] "GET <*> HTTP/<*><*>\" 200 <*> \"-\" \"Mozilla/<*><*> (<*>; Linux <*>_<*>; rv:<*><*><*>) Gecko/<*> Firefox/<*><*><*>\"","sample logs":["223.87.60.27 - - [2018-07-22T00:39:02.912Z] \"GET /opensearch/opensearch-1.0.0.deb_1 HTTP/1.1\" 200 6219 \"-\" \"Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110421 Firefox/6.0a1\""],"total count":367},{"pattern":"<*IP*> - - [<*DATETIME*>] \"GET <*> HTTP/<*><*>\" 200 <*> \"-\" \"Mozilla/<*><*> (<*>; Linux <*>) AppleWebKit/<*><*> (KHTML like Gecko) Chrome<*IP*> Safari/<*><*>\"","sample logs":["216.9.22.134 - - [2018-07-22T05:27:11.939Z] \"GET /beats/metricbeat_1 HTTP/1.1\" 200 3629 \"-\" \"Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24\""],"total count":311},{"pattern":"<*IP*> - - [<*DATETIME*>] \"GET <*> HTTP/<*><*>\" 200 <*> \"-\" \"Mozilla/<*><*> (compatible; MSIE 6<*>; Windows NT 5<*>; <*>; .NET CLR 1<*><*>)\"","sample logs":["99.74.118.237 - - [2018-07-22T03:34:43.399Z] \"GET /beats/metricbeat/metricbeat-6.3.2-amd64.deb_1 HTTP/1.1\" 200 14113 \"-\" \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\""],"total count":269}]"""
}
]
}
]
}
注册参数
下表列出了用于智能体注册的可用工具参数。
参数 | 类型 | 必需/可选 | 描述 |
---|---|---|---|
index | 字符串 | DSL 查询必需 | 用于模式分析的搜索索引。 |
input | 字符串 | DSL 查询必需 | 作为字符串的 DSL 查询 JSON。如果同时提供了 input 和 ppl ,则使用 input (DSL)。 |
ppl | 字符串 | PPL 查询必需 | PPL 查询字符串。如果同时提供了 input ,则忽略此参数。 |
source_field | 字符串 | 可选 | 结果中要返回的字段。可以是单个字段,也可以是数组(例如,["field1", "field2"] )。 |
doc_size | 整数 | 可选 | 要获取的文档数量。默认为 2 。 |
top_n_pattern | 整数 | 可选 | 将输出限制为指定数量的最常见模式。默认为 3 。 |
sample_log_size | 整数 | 可选 | 每个模式中包含的示例日志数量。默认为 20 。 |
pattern_field | 字符串 | 可选 | 用于模式检测的分析字段。如果未指定,工具将从第一个文档中选择最长的文本字段。 |
执行参数
下表列出了用于运行智能体的可用工具参数。
参数 | 类型 | 必需/可选 | 描述 | |
---|---|---|---|---|
index | 字符串 | DSL 查询必需 | 用于模式分析的搜索索引。 | |
input | 字符串 | DSL 查询必需 | 作为字符串的 DSL 查询 JSON。如果同时提供了 input 和 ppl ,则 input (DSL) 优先。 | |
ppl | 字符串 | PPL 查询必需 | PPL 查询字符串。如果同时提供了 input ,则忽略此参数。 |