Elasti c @version документа не увеличивается при обновлении через Logstash - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу регулярно загружать данные о проблемах из экземпляра JIRA в мой Elastic Stack. Я не хочу создавать новый документ elasti c каждый раз, когда извлекаю данные из API JIRA, но вместо этого обновляю существующий документ документа, что означает, что для каждой проблемы JIRA должен существовать только один документ. При обновлении можно ожидать, что поле @version будет автоматически увеличиваться при установке поля document_id для elasticsearch output plugin.

Текущая рабочая настройка

  • Elasti c Стек : версия 7.4.0 работает в Ubuntu в Docker контейнерах
  • Logsta sh Входной каскад : получить данные о выпуске JIRA через http_poller input plugin
  • Logsta sh Стадия фильтрации : используйте split filter plugin для изменения JSON данные по мере необходимости
  • Logsta sh Выходной каскад : передать данные в Elasticsearch и сделать их видимыми в Кибане

Где я борюсь

Данные правильно зарегистрированы в Elasti c и показаны в Кибане. Как и ожидалось, есть один документ на выпуск. Однако документ перезаписывается, но значение @version остается на значении 1. Я предполагаю, что использования action => "update", doc_as_upsert => true и document_id => "%{[@metadata][id]}" будет достаточно, чтобы Elasticsearch осознал, что ему необходимо увеличить версию документа.

Мне вообще интересно, является ли это правильным подходом, чтобы JIRA выдавала данные с возможностью поиска с течением времени. Например, смогу ли я найти статус-кво билета JIRA в прошлом @version? Или значение @version даст мне только информацию о том, как часто документ обновлялся, без указания значений версии отдельного документа?

logsta sh .conf (некоторые данные были удалены и заменены на <> теги)

input {
  http_poller {
    urls => {
      data => {
        method => get
        url => "https://<myjira>.com/jira/rest/api/2/search?<searchJQL>"
        headers => {
          Authorization => "Basic <censored>"
          Accept => "application/json"
          "Content-Type" => "application/json"
        }
      }
    }
    request_timeout => 60
    schedule => { every => "10s" } # low value for debugging
    codec => "json"
  }
}

filter {
  split {
    field => "issues"
    add_field => {
      "key" => "%{[issues][key]}"
      "Summary" => "%{[issues][fields][summary]}"
      [@metadata]["id"] => "%{[issues][id]}" # unique ID of a JIRA issue, the JIRA issue key could also be used
    }
  remove_field => [ "startAt", "total", "maxResults", "expand", "issues"]
  }
}

output {
  stdout { codec => rubydebug }
  elasticsearch {
       index => "gsep"
       user => ["<usr>"]
       password => ["<pw>"]
       hosts => ["elasticsearch:9200"]
       action => "update"
       document_id => "%{[@metadata][id]}"
       doc_as_upsert => true
  }
}

Скриншоты из данных документа в Кибане

Мне пришлось подвергать цензуре информацию, но недостающая информация не должна быть актуальной. На скриншоте видно, что тот же _id установлен правильно, но @version остается на 1. В Elasticstash / Kibana существует только этот документ для соответствующего выпуска / _id.

First screenshot with earlier timestsamp

Second screenshot with later timestamp

1 Ответ

0 голосов
/ 06 февраля 2020

Поле @ version исходит из logsta sh и является просто индикатором для версии вашего формата сообщения журнала . Функция автоинкремента отсутствует и т. Д. c.

Обратите внимание, что в документах эластичного поиска также есть поле _version . _version - это автоматически увеличиваемое значение, используемое для оптимизации c блокировки в сценарии параллелизма .

Просто, чтобы быть понятным ,asticsearch не может дать вам то, что вы есть ожидая с точки зрения версий из коробки. Вы не можете получить доступ к другой версии того же документа, полагаясь на _version . Существуют шаблоны проектирования, позволяющие реализовать такую ​​историю документов вasticsearch. Но это широкий вопрос со многими ответами и выходит за рамки этого вопроса.

...