Я хочу регулярно загружать данные о проблемах из экземпляра 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.

