首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LogStash -解析http筛选结果

LogStash -解析http筛选结果
EN

Stack Overflow用户
提问于 2021-08-18 07:48:59
回答 1查看 168关注 0票数 0

一如既往,官方文档缺少示例。

我有一个调用API的过滤器,它必须添加解析API结果的字段:

代码语言:javascript
运行
复制
http {
            url => "rest/api/subnet/check_subnet_from_ip/"
            query =>  { "ip" => "%{[source][ip]}" }
            verb => GET
      }

API响应如下所示:

代码语言:javascript
运行
复制
{ "name": "SUBNET1", "cidr": "192.168.0.0/24" }

我需要添加这些结果的新字段。我需要考虑一个空结果{}

我找不到任何解析结果的例子。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-18 13:21:00

您的响应是一个json文档,您需要使用json过滤器来解析它,请查看json filter的文档以了解所有可用的选项。

但基本上你需要这样的东西:

代码语言:javascript
运行
复制
http {
    url => "rest/api/subnet/check_subnet_from_ip/"
    query =>  { "ip" => "%{[source][ip]}" }
    verb => GET
    target_body => api_response
}
json {
    source => "api_response"
}

要添加需要使用mutate过滤器的新字段,请查看mutate filter文档以了解所有可用的选项。

要添加新字段,您需要类似以下内容:

代码语言:javascript
运行
复制
mutate {
    add_field => { "newFieldName" => "newFieldValue" }
}

或者使用现有字段中的值添加新字段:

代码语言:javascript
运行
复制
mutate {
    add_field => { "newFieldName" => "%{existingField}" }
}

考虑以下格式的答案:

代码语言:javascript
运行
复制
{ "name": "SUBNET1", "cidr": "192.168.0.0/24" }

事实上,您需要检查空响应,您还需要添加条件,因此您的流水线应该类似于下面的示例:

代码语言:javascript
运行
复制
http {
    url => "rest/api/subnet/check_subnet_from_ip/"
    query =>  { "ip" => "%{[source][ip]}" }
    verb => GET
    target_body => api_response
}
json {
    source => "api_response"
}

if [api_response][name]
{
    mutate 
    {
        add_field => { "[source][subnet][name]" => "%{[api_response][name]}" }
    }
}

if [api_response][cidr]
{
    mutate 
    {
        add_field => { "[source][subnet][cidr]" => "%{[api_response][cidr]}" }
    }
}

这将检查字段namecidr是否存在,如果存在,将添加新字段。

如果需要,您也可以重命名字段,只需使用此mutate配置即可。

代码语言:javascript
运行
复制
mutate {
    rename => { "name" => "subnet_name" }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68828422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档