我想定期将问题数据从JIRA实例加载到我的Elastic Stack
中。我不想每次从JIRA API中提取数据时都创建一个新的 flex 文档,而是更新现有的文档文档,这意味着每个JIRA问题仅应存在一个文档。更新时,我希望设置 @version
的 document_id
字段时elasticsearch output plugin
字段自动增加。
当前工作的设置
http_poller input plugin
获取JIRA发行数据split filter plugin
修改JSON数据我在哪里挣扎
数据已在Elastic中正确注册并在Kibana中显示。与预期的一样,每个问题只有一份文档。但是,文档正在被覆盖,但是
@version
保持在值1。我假设使用action => "update"
,doc_as_upsert => true
和document_id => "%{[@metadata][id]}"
足以使Elasticsearch意识到需要增加文档的版本。我总体上想知道这是否是使JIRA问题数据随时间推移可搜索的正确方法。例如,我能否在过去的
@version
上找到JIRA票证的现状?还是@version
值仅向我提供了文档更新频率的信息,而没有给我各个文档版本的值?logstash.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
}
}
Kibana中文档数据的屏幕截图
我必须检查信息,但是缺少的信息应该不相关。在屏幕截图上,您可以看到正确设置了相同的
_id
,但是@version
保持为1。在Elasticstash / Kibana中,对于相应的issue / _id仅存在该文档。最佳答案
@version 字段来自logstash,仅表示日志消息格式的版本。没有自动递增功能等。
请注意,elasticsearch文档中还有一个 _version 字段。
_version 是concurrency方案中用于乐观锁定的自动递增值。
只是要清楚一点,elasticsearch无法为您提供开箱即用的版本方面的期望。您不能依靠 _version 访问同一文档的其他版本。有一些设计模式可以在Elasticsearch中实现此类文档历史记录。但这是一个有很多答案的广泛问题,超出了这个问题的范围。
关于elasticsearch - 通过Logstash更新时,Elastic Document的@version不会递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60089379/