一如既往,官方文档缺少示例。
我有一个调用API的过滤器,它必须添加解析API结果的字段:
http {
url => "rest/api/subnet/check_subnet_from_ip/"
query => { "ip" => "%{[source][ip]}" }
verb => GET
}API响应如下所示:
{ "name": "SUBNET1", "cidr": "192.168.0.0/24" }我需要添加这些结果的新字段。我需要考虑一个空结果{}
我找不到任何解析结果的例子。
谢谢。
发布于 2021-08-18 13:21:00
您的响应是一个json文档,您需要使用json过滤器来解析它,请查看json filter的文档以了解所有可用的选项。
但基本上你需要这样的东西:
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文档以了解所有可用的选项。
要添加新字段,您需要类似以下内容:
mutate {
add_field => { "newFieldName" => "newFieldValue" }
}或者使用现有字段中的值添加新字段:
mutate {
add_field => { "newFieldName" => "%{existingField}" }
}考虑以下格式的答案:
{ "name": "SUBNET1", "cidr": "192.168.0.0/24" }事实上,您需要检查空响应,您还需要添加条件,因此您的流水线应该类似于下面的示例:
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]}" }
}
}这将检查字段name和cidr是否存在,如果存在,将添加新字段。
如果需要,您也可以重命名字段,只需使用此mutate配置即可。
mutate {
rename => { "name" => "subnet_name" }
}https://stackoverflow.com/questions/68828422
复制相似问题