Найти возраст билетов в Логце sh: Ruby - PullRequest
0 голосов
/ 23 апреля 2020

Я работал над поиском возраста билета по отношению к его открытому и закрытому времени.

Я включил ниже 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

Я использую 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"}]}

Пожалуйста, помогите мне решить эту проблему.

...