Параметры реплики и шарда не применяются в шаблоне эластичного поиска - PullRequest
3 голосов
/ 03 июля 2019

Я добавил такой шаблон:

curl -X PUT "e.f.g.h:9200/_template/impression-template" -H 'Content-Type: application/json' -d'
{
  "index_patterns": ["impression-%{+YYYY.MM.dd}"],
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 2
  },
  "mappings": {
    "_doc": {
      "_source": {
        "enabled": false
      },
      "dynamic": false,
      "properties": {
        "message": {
          "type": "object",
          "properties": {
...

И у меня есть экземпляр logstash, который читает события из kafka при записи их в ES.Вот мой конфиг logstash:

input {
  kafka {
    topics => ["impression"]
    bootstrap_servers => "a.b.c.d:9092"
  }
}
filter {
  json {
    source => "message"
    target => "message"
  }
}
output {
    elasticsearch {
        hosts => ["e.f.g.h:9200"]
        index => "impression-%{+YYYY.MM.dd}"
        template_name => "impression-template"
    }
}

Но каждый день я получаю индекс с 5 шардами и 1 репликой (это конфигурация ES по умолчанию).Как я мог это исправить, чтобы я мог получить 2 реплики и 2 осколка?

1 Ответ

0 голосов
/ 03 июля 2019

Не уверен, что вы можете добавить index_pattern как my_index-%{+YYYY.MM.dd}, потому что при его создании и PUT my_index-2019.03.10 у него будет пустое сопоставление, потому что оно не распознается. У меня была та же проблема, и обходной путь для этого состоял в том, чтобы установить index_pattern как my_index-* и добавить суффикс года к индексам, который должен выглядеть как my_index-2017, my_index-2018...

{
  "my_index_template" : {
    "order" : 0,
    "index_patterns" : [
      "my_index-*"
    ],
    "settings" : {
      "index" : {
        "number_of_shards" : "5",
        "number_of_replicas" : "1"
      }
    },...

Я взял часть года из поля отметки времени (YYYY-MM-dd), чтобы сгенерировать year и добавить его в конец имени индекса на logstash

grok {
      match => [
         "timestamp", "(?<index_year>%{YEAR})"
      ]
    }

    mutate {
        add_field => {
            "[@metadata][index_year]" => "%{index_year}"
        }
    }

    mutate {
        remove_field => [ "index_year", "@version" ]
    }
}
output{
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "my_index-%{[@metadata][index_year]}"
        document_id => "%{some_field}"
    }
}

После того, как logstash был завершен, мне удалось получить индексы my_index-2017, my_index-2018 и my_index-2019 с 5 осколками, 1 репликой и корректным отображением, как я предопределил в своем шаблоне.

...