用于保持两个数据库同步的 Logstash - 无法访问 %{document_id}
Logstash to Keep Two Databases Synced - Cannot Access %{document_id}
我正在使用 Logstash 通过 API.
使我的 Elasticsearch 与 HBase 保持同步
这是我的配置文件:
input {
elasticsearch {
hosts => ["<elasticsearch_ip>"]
index => "<some_name>"
type => "<some_name>"
query => '{ "query": {
"bool": {
"must_not": [
{"term": {"synced": true}}
]
}
} }'
}
}
filter {
mutate {
add_field => { "synced" => true }
}
}
output {
if [type] == "<some_name>" {
http {
format=>"json"
http_method=>"post"
url=>"http://<api-ip>/<endpoint>"
}
elasticsearch {
hosts => [<elasticsearch-ip>]
action => "update"
index => "<some_name>"
document_type => "<some_name>"
document_id => "%{document_id}"
}
}
}
我想在文档中添加一个 synced
字段,这样我就不会在 HBase 中对它们进行两次索引。问题是 %{document_id}
没有转换为文档的实际 _id
。我认为没有这样的字段,因为我尝试使用 add_field => { "document_id" => "%{document_id}" }
将它添加到文档正文中,但它没有被转换。我也试过 %{_id}
和 %{id}
但没有成功。我做错了什么?
注意:我听说过守望者吗?好吧,当然,我实际上首先使用它实现了这个。但是你听说过它的价格吗?
您需要在 elasticsearch
输入中将 docinfo
flag 设置为 true
elasticsearch {
hosts => ["<elasticsearch_ip>"]
index => "<some_name>"
type => "<some_name>"
docinfo => true
query => '{ "query": {
"bool": {
"must_not": [
{"term": {"synced": true}}
]
}
} }'
}
然后您可以使用 [@metadata][_id]
访问输出中的文档 ID
elasticsearch {
hosts => [<elasticsearch-ip>]
action => "update"
index => "<some_name>"
document_type => "<some_name>"
document_id => "%{[@metadata][_id]}" <-- change this
}
我正在使用 Logstash 通过 API.
使我的 Elasticsearch 与 HBase 保持同步这是我的配置文件:
input {
elasticsearch {
hosts => ["<elasticsearch_ip>"]
index => "<some_name>"
type => "<some_name>"
query => '{ "query": {
"bool": {
"must_not": [
{"term": {"synced": true}}
]
}
} }'
}
}
filter {
mutate {
add_field => { "synced" => true }
}
}
output {
if [type] == "<some_name>" {
http {
format=>"json"
http_method=>"post"
url=>"http://<api-ip>/<endpoint>"
}
elasticsearch {
hosts => [<elasticsearch-ip>]
action => "update"
index => "<some_name>"
document_type => "<some_name>"
document_id => "%{document_id}"
}
}
}
我想在文档中添加一个 synced
字段,这样我就不会在 HBase 中对它们进行两次索引。问题是 %{document_id}
没有转换为文档的实际 _id
。我认为没有这样的字段,因为我尝试使用 add_field => { "document_id" => "%{document_id}" }
将它添加到文档正文中,但它没有被转换。我也试过 %{_id}
和 %{id}
但没有成功。我做错了什么?
注意:我听说过守望者吗?好吧,当然,我实际上首先使用它实现了这个。但是你听说过它的价格吗?
您需要在 elasticsearch
输入中将 docinfo
flag 设置为 true
elasticsearch {
hosts => ["<elasticsearch_ip>"]
index => "<some_name>"
type => "<some_name>"
docinfo => true
query => '{ "query": {
"bool": {
"must_not": [
{"term": {"synced": true}}
]
}
} }'
}
然后您可以使用 [@metadata][_id]
elasticsearch {
hosts => [<elasticsearch-ip>]
action => "update"
index => "<some_name>"
document_type => "<some_name>"
document_id => "%{[@metadata][_id]}" <-- change this
}