LogStash - 解析 http 过滤结果
LogStash - Parse http filter result
一如既往,官方文档缺少示例。
我有一个调用 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" }
我需要使用这些结果添加新字段。
我需要考虑一个空结果 {}
我找不到任何有关解析结果的示例。
谢谢。
您的回复是一个 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" }
}
一如既往,官方文档缺少示例。
我有一个调用 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" }
我需要使用这些结果添加新字段。 我需要考虑一个空结果 {}
我找不到任何有关解析结果的示例。
谢谢。
您的回复是一个 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" }
}