В фильтре logstash я пытаюсь обратиться к elasticsearch, чтобы получить необходимые данные. Без elasticsearch plugin все работает хорошо (если код закоментирован).
/etc/logstash/conf.d/mysql-beats.conf
input {
beats {
port => 5044
client_inactivity_timeout => 3000
# ssl => false
}
}
filter {
mutate {gsub => ["message", "\t", " "]}
grok {
match => {"message" => "%{WORD:method}\s%{WORD:product_name}\s%{WORD:product_price}"}
}
if [method] == "UPDATE" {
mutate {
convert => {"product_price" => "float"}
}
# elasticsearch {
# hosts => ["http://0.0.0.0:9200"]
# query_template => "/usr/share/logstash/product-names.json"
# fields => { "product_name" => "title", "ourProductId" => "ourProductId" }
# index => "product-names"
# user => "elastic"
# password => "elasticpassword"
# }
}
}
output {
if "_grokparsefailure" not in [tags] {
elasticsearch {
hosts => ["http://0.0.0.0:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
user => "elastic"
password => "elasticpassword"
}
}
}
/usr/share/logstash/product-names.json
{
"size": 1,
"query": {
"term": {
"ourProductId": {"value": "%{product_name}"}
}
},
"_source": ["title", "ourProductId"]
}
curl -XGET "xxx.xxx.xxx.xxx:9200/product-names/_mapping?pretty"
{
"product-names" : {
"mappings" : {
"properties" : {
"ourProductId" : {
"type" : "keyword"
},
"product_name" : {
"type" : "keyword"
}
}
}
}
}
из-за чего может возникать ошибка?
Elasticsearch plugin должен обращаться именно к индексам логов? Или можно взять данные из любого индекса?
Изменил query_template
на query => "ourProductId:%{product_name}"
данные записываются с filebeat в elasticsearch через logstash, но появился тег _elasticsearch_lookup_failure