Я работал над поиском возраста билета по отношению к его открытому и закрытому времени.
Я включил ниже Ruby в мой Logsta sh:
input {
http_poller {
urls => {
snowinc => {
url => "https://******"
user => "*****"
password => "******"
headers => {Accept => "application/json"}
}
}
request_timeout => 60
metadata_target => "http_poller_metadata"
schedule => { cron => " * * * * * UTC"}
codec => "json"
}
}
filter {
split {
field => "result"
}
ruby {
code => "
require 'date'
event.get('result').each { |k, v|
event.set(k,v)
}
event.remove('result')
closed_at = event.get('closed_at')
end_date = (closed_at.nil? || closed_at.empty?) ? Date.today : Date.parse(closed_at)
start_date = event.get('sys_created_on')
if start_date.nil? || start_date.empty?
event.set('time_in_days', 'Creation date not specified')
else
time_in_days = (end_date - Date.parse(start_date)).to_i
event.set('time_in_days', time_in_days)
case time_in_days
when 0
event.set('age_group', '0 Days')
when 1..4
event.set('age_group', '1-4 Days')
when 5..9
event.set('age_group', '5-9 Days')
when 10..Float::INFINITY
event.set('age_group', 'Over 10 Days')
else
event.set('age_group', 'Uncomputable')
end
end
"
}
date {
match => ["sys_created_on","yyyy-MM-dd HH:mm:ss"]
target => "sys_created_on"
}
date {
match => ["sys_updated_on","yyyy-MM-dd HH:mm:ss"]
target => "sys_updated_on"
}
date {
match => ["closed_at","yyyy-MM-dd HH:mm:ss"]
target => "closed_at"
}
}
output {
elasticsearch {
hosts => ["10.116.15.127:9200"]
index => "incidentsnow"
action=>update
document_id => "%{number}"
doc_as_upsert =>true
}
}
Для которого запрос работает хорошо, однако загруженные данные принимают только те заявки, которые закрыты, т. Е. T имеет закрытую дату. Я хочу загрузить данные, независимо от их закрытого состояния, и только там, где это применимо, необходимо выполнить расчет возраста.
Я пытаюсь создать график, аналогичный приведенному ниже, в Кибане.
![enter image description here](https://i.stack.imgur.com/mQh8k.png)
Я использую API для получения всех полей заявки, включая дату создания и дату закрытия. Поэтому мне нужно сделать следующее:
проверить, закрыт ли тикет, если да, игнорировать. тикет открыт, делайте разницу между текущим - создан в днях. Создайте новое поле со значениями, как на картинке (0-1,1-7, и т. д. c), и у каждого тикета должна быть соответствующая возрастная ярость. Чтобы узнать, открыт ли билет, как долго он будет открыт? Пример входных данных:
{"result":[
{
"made_sla":"true",
"Type":"incident resolution p3",
"created_on":"2019-12-23 05:00:00",
"closed_at":"2019-12-24 05:00:00"
"sys_updated_on_on":"2019-12-24 05:00:00"
"number":"INC0010275",
"category":"Network"} ,
{
"made_sla":"true",
"Type":"incident resolution l1.5 p4",
"created_on":"2019-12-24 07:00:00",
"closed_at":""
"sys_updated_on":"2019-12-27 08:00:00"
"number":"INC0010567",
"category":"DB"}]}
Пожалуйста, помогите мне решить эту проблему.