Json 如何设置日志存储配置目标索引?
我试图通过一个文档字段在Logstash配置文件中动态设置目标elasticsearch索引。不幸的是,logstash似乎不是将其解释为变量,而是一个字符串 它成功地创建了许多新的索引,因为我一直在尝试获取文档中的索引名 这大致概括了我的尝试。以下是我输出到文件中的消息的示例:Json 如何设置日志存储配置目标索引?,json,
elasticsearch,logstash,Json,
elasticsearch,Logstash,我试图通过一个文档字段在Logstash配置文件中动态设置目标elasticsearch索引。不幸的是,logstash似乎不是将其解释为变量,而是一个字符串 它成功地创建了许多新的索引,因为我一直在尝试获取文档中的索引名 这大致概括了我的尝试。以下是我输出到文件中的消息的示例: { "tags":[], "type":"logstash", "stack_info":null, "level":"INFO", "@timestamp":"2018-02-12T13:30:34.332Z"
{
"tags":[],
"type":"logstash",
"stack_info":null,
"level":"INFO",
"@timestamp":"2018-02-12T13:30:34.332Z",
"@version":"1",
"host":"Michals-MacBook-Pro.local",
"logger_name":"python-logstash-logger",
"message":"{
\"index_name\": \"THIS_IS_MY_INDEX_NAME\"
}",
"path":"/Users/michalfasanek/..."
}
这是当前我的配置文件:
input {
udp {
port => 5959
codec => json
}
}
filter {
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "[message][index_name]"
}
file {
path => "/usr/local/Cellar/logstash/6.2.0/controloutputnay"
}
stdout { }
}
如何将其称为变量而不是字符串?谢谢你的建议。我自己解决了这个问题,但不是我想要的方式。我在用于生成文档的Python记录器中发现了“extra”参数 这个“额外”是添加到JSON顶层的字段,这意味着我也不必处理嵌套在“message”字段中的“index_name”字段 在此之后,我的配置行就是
index => "%{index_name}"
虽然这对我来说非常有效,包括在使用“index_name”字段后不必过滤掉它,但我仍然想知道为什么它一开始就不起作用。欢迎提出任何建议 日志存储事件中的
消息
字段是一个字符串,因此您必须将索引名称
从消息
字符串字段提取到另一个字段中,然后在elasticsearch输出插件中使用它
您可以使用grok filter插件执行此操作:
grok {
match => ["message", "\"index_name\": \"%{WORD:index_name}\""]
}
此筛选器将创建一个名为索引\u name
的字段。然后您可以在输出中使用它:
elasticsearch {
hosts => "localhost:9200"
index => "%{index_name}"
}
logstash中的消息字段是一个字符串,您必须将
index\u name
从消息(使用grok筛选器)提取到另一个字段中,然后在输出中使用它。您可以使用此grok筛选器:grok{match=>[“message”,“\”index\u name\:\“%{WORD index\u name}\”}
谢谢,如果您发布此答案,我会接受的。