Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何设置日志存储配置目标索引?_Json_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash - Fatal编程技术网 elasticsearch,logstash,Json,elasticsearch,Logstash" /> elasticsearch,logstash,Json,elasticsearch,Logstash" />

Json 如何设置日志存储配置目标索引?

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"

我试图通过一个文档字段在Logstash配置文件中动态设置目标elasticsearch索引。不幸的是,logstash似乎不是将其解释为变量,而是一个字符串

它成功地创建了许多新的索引,因为我一直在尝试获取文档中的索引名

这大致概括了我的尝试。以下是我输出到文件中的消息的示例:

{  
"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}\”}
谢谢,如果您发布此答案,我会接受的。