我可以通过elasticsearch-template.json设置logstash默认的elasticsearch映射

时间:2014-12-17 11:10:15

标签: elasticsearch logstash

我使用logstash + elasticsearch来收集syslog,并希望将ttl设置为日志老化

我在logstash中找到一个名为elasticsearch-template.json的文件,路径为logstash / logstash-1.4.2 / lib / logstash / outputs / elasticsearch / elasticsearch-template.json

我在文件中添加ttl信息,如下所示:

{
  "template" : "logstash-*",
  "settings" : {
    "index.refresh_interval" : "5s"
  },
  "mappings" : {
    "_default_" : {
       "_all" : {"enabled" : true},
       "dynamic_templates" : [ {
         "string_fields" : {
           "match" : "*",
           "match_mapping_type" : "string",
           "mapping" : {
             "type" : "string", "index" : "analyzed", "omit_norms" : true,
               "fields" : {
                 "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256}
               }
           }
         }
       } ],
        "_ttl": {
         "enabled": true,
         "default": "1d"
       },
       "properties" : {
         "@version": { "type": "string", "index": "not_analyzed" },
         "geoip"  : {
           "type" : "object",
             "dynamic": true,
             "path": "full",
             "properties" : {
               "location" : { "type" : "geo_point" }
             }
         }
       }
    }
  }
}

然后重新启动logstash,删除所有elasticsearch索引。 我在弹性搜索中检查新索引的映射,但它没有以这种方式工作。

如何配置索引模板?

3 个答案:

答案 0 :(得分:8)

您需要更改您的logstash配置。

如果你已经遵循了默认设置,logstash已经在elasticsearch中创建了一个名为logstash的模板,logstash将继续使用存储在elasticsearch中的模板,除非你不明确告诉它。

修改您找到的模板文件,但除此之外,在您的logstash配置中,设置以下内容:

output {
  elasticsearch {
    ...
    template_overwrite => true
    ...
  }
}

答案 1 :(得分:2)

看起来JSON文件不在正确的文件夹中。以下是有关如何使用模板的文档: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-templates.html 关于文件夹:

配置

索引模板也可以放在模板目录下的配置位置(path.conf)中(注意,确保将它们放在所有符合条件的主节点上)。例如,名为template_1.json的文件可以放在config / templates下,如果它与索引匹配,则会添加它。以下是上述文件的示例:

答案 2 :(得分:0)

我已经创建了新的template.json文件,并将其定义为logstash.yml配置文件的elasticsearch输出块的路径:

def notification = [
  attachments: [
    [
      color: "#2A9B3A",
      author_name: DEV_NAME,
      title: "Build Status",
      title_link: BUILD_URL,
      text: "Successful Build"
    ]
  ]
]

def response = ["curl", "-X", "POST", "-H", "Content-Type: application/json", "-d", JsonOutput.toJson(notification), "https://hooks.slack.com/services/${SLACK_WEBHOOK}"].execute().text

将Elastic的document_type定义为logstash.yml配置文件的输入块:

stdout { codec => json_lines }

elasticsearch {

"hosts" => ["ip:port"]
"index" => "name-of-index-%{+dd.MM.YYYY}"
template => "/{path-to-logstash-folder}/templates/your-template.json"
template_overwrite => true
manage_template => false
}

有我的template.json文件

input {

file {
path => "/your-path-to-directory/*.log"
type => "name-of-type"
 }
}