ted*_*r42 6 elasticsearch logstash logstash-configuration
我有一些logstash输入,我用它document_id来删除重复项.但是,大多数输入都没有document_id.以下是实际的document_id通过,但如果它不存在,它会被字面意思接受%{document_id},这意味着大多数文档被视为彼此的副本.这是我的输出块的样子:
output {
elasticsearch_http {
host => "127.0.0.1"
document_id => "%{document_id}"
}
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以在输出中使用条件.它失败了,错误在代码下面给出.
output {
elasticsearch_http {
host => "127.0.0.1"
if document_id {
document_id => "%{document_id}"
}
}
}
Error: Expected one of #, => at line 101, column 8 (byte 3103) after output {
elasticsearch_http {
host => "127.0.0.1"
if
Run Code Online (Sandbox Code Playgroud)
我尝试了一些"if"语句并且它们都失败了,这就是为什么我认为问题是在该块中有任何类型的条件.以下是我尝试的替代方案:
if document_id <> "" {
if [document_id] <> "" {
if [document_id] {
if "hello" <> "" {
Run Code Online (Sandbox Code Playgroud)
你接近条件的想法,但你不能把它放在插件块中.改为:
output {
if [document_id] {
elasticsearch_http {
host => "127.0.0.1"
document_id => "%{document_id}"
}
} else {
elasticsearch_http {
host => "127.0.0.1"
}
}
}
Run Code Online (Sandbox Code Playgroud)
(但是使用uuid过滤器的其他一个答案中的建议也很好.)
解决此问题的一种方法是确保document_id始终可用.您可以通过在过滤器部分中添加UUID过滤器来实现此目的,document_id如果该字段不存在,则会创建该字段.
filter {
if "" in [document_id] {
uuid {
target => "document_id"
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据MagnusBäck的建议编辑.谢谢!
| 归档时间: |
|
| 查看次数: |
9361 次 |
| 最近记录: |