Как использовать API ролловера Elasticsearch, где псевдоним обновляется, чтобы указывать на последний созданный индекс? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть конвейер Logsta sh, который работает по ежедневному расписанию и отправляет данные в Elasticsearch с использованием подписи индекса agent_index_%{+YYYY_MM_dd}. Таким образом, каждый день я создавал новый индекс, например: agent_index_2020_05_05 на 5 мая 2020 года и agent_index_2020_05_06 на 6 мая 2020 года. псевдоним агента всегда должен указывать только на 1 индекс, который является последним индексом.

сопоставление

PUT /_template/agent_template
{
  "order": 0,
  "index_patterns": [
    "agent_index_*"
  ],
  "aliases": {
    "agent": {}
  }
}

Я просмотрел этот , но похоже, что имя индекса должно заканчиваются инкрементными числами.

POST /agent/_rollover?dry_run
{
  "conditions": {
    "max_age": "1d"
  }
}

Ошибка

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "index name [agent_index_2020_05_06] does not match pattern '^.*-\\d+$'"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "index name [agent_index_2020_05_06] does not match pattern '^.*-\\d+$'"
  },
  "status": 400
}

Есть ли способ использовать API ролловера elasticsearch, чтобы разрешить обновление только последнего созданного индекса в псевдониме, что означает данный псевдоним точки указывает только на один индекс, который является последним индексом?

Примечание. Использование Elasticsearh v6.2.4

Обновление

My Logsta sh конфигурация

input {
    jdbc {
        jdbc_driver_library => "ojdbc7.jar"
        jdbc_driver_class    => "Java::oracle.jdbc.OracleDriver"
        jdbc_connection_string => "jdbc:oracle:thin:@EDM:1521/aba"
        jdbc_user => "read"
        jdbc_password => "read"
        schedule => "50 6 * * *"
        statement_filepath =>"agent.sql"
       }
}
output {
    elasticsearch {
        hosts => "localhost:17002"
        index => "agent_index_%{+YYYY_MM_dd}"
        document_type => "agent"
    }
}

Обновление

Использование API мониторинга для получения подробностей, как предлагает @Val, но каждый раз я запускаю curl -XGET "localhost:15050/_node/stats/events?pretty" У меня другой счетчик IN. Пожалуйста, проверьте снимок экрана ниже. Итак, как мне определить, выбраны ли все события?

enter image description here

1 Ответ

1 голос
/ 13 мая 2020

В ES 6.2 API ролловера требует, чтобы имя индекса заканчивалось порядковым номером, например -00001. Однако, если это не так, то также можно использовать другое имя индекса, но вам нужно указать его явно в вызове ролловера, например:

POST /agent/_rollover/agent_index_2020_05_13
{
  "conditions": {
    "max_age": "1d"
  }
}

Таким образом, если индекс, на который указывает псевдоним agent, старше одного дня, при одновременном вызове будет создан новый индекс с именем agent_index_2020_05_13.

Примечание: Однако, поскольку ES 6.2.4 - это EOL , вы должны обновить свой стек как минимум до 6,6, тогда вы получите поддержку ILM в Logsta sh бесплатно, и он позаботится о том, чтобы все правильно настроить в ES.

...