如何使用 logstash 管道检查 EKL 中是否存在特定索引?
How to check if specific index exists in EKL using logstash pipeline?
我想编写一个 logstash 管道来检查 ES 环境中是否存在特定索引;如果是,则将传入事件标记为“有效”,否则标记为“无效”。
使用 cURL 检查索引有效性:
curl -u elastic:elastic -I http://localhost:9200/sampletest1
有效输出 - HTTP/1.1 200 OK
无效输出 - HTTP/1.1 400 Not Found
我的 logstash 脚本:
input {
beats {
port => "5044"
}
}
filter {
#execute curl to check for index http://localhost:9200/%{process-code}
#if response has 200 then mutate with add_tags "valid". else add tag "invalid"
if "valid" in [tags] {
} else {
#delete event; prevent it from going to output section
}
}
output {
#print only valid events
stdout {
codec => rubydebug
}
}
我卡在过滤器部分提到的 2 # 行。我们不能在过滤器部分使用 exec
插件 !
按照 Badger 在评论中的建议,使用“http filter plugin”解决了问题。
filter {
json { source => "message"}
http {
url => "http://localhost:9200/%{process-code}"
verb => "HEAD"
body_format => "json"
user => "elastic"
password => "elastic"
}
if "_httprequestfailure" in [tags] {
#index not present. drop will prevent it from going to output section
drop {}
} else {
#index present
mutate { add_tag => [ "found" ]}
}
}
注意:上面的http插件在输出事件中添加了_jsonparsefailure
标签;为了避免它,我们可以使用 tag_on_json_failure=>[]
。
参考:https://discuss.elastic.co/t/http-filter-plugin-adds-jsonparsefailure-in-tag/277744
我想编写一个 logstash 管道来检查 ES 环境中是否存在特定索引;如果是,则将传入事件标记为“有效”,否则标记为“无效”。
使用 cURL 检查索引有效性:
curl -u elastic:elastic -I http://localhost:9200/sampletest1
有效输出 - HTTP/1.1 200 OK
无效输出 - HTTP/1.1 400 Not Found
我的 logstash 脚本:
input {
beats {
port => "5044"
}
}
filter {
#execute curl to check for index http://localhost:9200/%{process-code}
#if response has 200 then mutate with add_tags "valid". else add tag "invalid"
if "valid" in [tags] {
} else {
#delete event; prevent it from going to output section
}
}
output {
#print only valid events
stdout {
codec => rubydebug
}
}
我卡在过滤器部分提到的 2 # 行。我们不能在过滤器部分使用 exec
插件 !
按照 Badger 在评论中的建议,使用“http filter plugin”解决了问题。
filter {
json { source => "message"}
http {
url => "http://localhost:9200/%{process-code}"
verb => "HEAD"
body_format => "json"
user => "elastic"
password => "elastic"
}
if "_httprequestfailure" in [tags] {
#index not present. drop will prevent it from going to output section
drop {}
} else {
#index present
mutate { add_tag => [ "found" ]}
}
}
注意:上面的http插件在输出事件中添加了_jsonparsefailure
标签;为了避免它,我们可以使用 tag_on_json_failure=>[]
。
参考:https://discuss.elastic.co/t/http-filter-plugin-adds-jsonparsefailure-in-tag/277744