Метки времени NetFlow

Каков наилучший способ определения абсолютного времени для потоков в пакете данных NetFlow? Похоже, что только относительная информация о времени включена в потоки (SysUpTime в начале и в конце потока).

Для Netflow v5 и v9 его можно рассчитать через поля Unix Seconds и SysUptime в заголовке пакета: UnixSeconds - SysUptime + FlowStartSysUptime. Но поле UnixSeconds имеет точность только одну секунду.

В IPFIX (v10) заголовок содержит только системное время, когда был создан пакет, но не время работы системы.

1 ответ

Некоторые экспортеры IPFIX избегают этой проблемы, используя более новые поля абсолютной отметки времени, такие как flowStartSeconds(150), flowEndSeconds(151). Существуют варианты с точностью до миллисекунды, с точностью до микросекунды и так далее. См.: http://www.iana.org/assignments/ipfix/ipfix.xhtml

(Также обратите внимание, что абсолютная временная метка в заголовке IPFIX должна быть близка к тому моменту, когда пакет был фактически завершен и отправлен, так что вы, по крайней мере, попытались смоделировать смещение часов между экспортером и вашим сборщиком: https://tools.ietf.org/html/rfc7011)

Но, как вы указали, проблема возникает, когда экспортер IPFIX отправляет устаревшие поля flowEndSysUpTime(21) и flowStartSysUpTime(22). Это было нормально для NetFlow v1-9, потому что метка времени заголовка была также выражена в sysUpTimeSeconds, но с IPFIX она оставляет вас в затруднительном положении.

Одно простое решение состоит в том, чтобы предположить, что потоки всегда очищаются быстро, рассчитать их продолжительность и выстроить их в соответствие с ТЕПЕРЬ:

duration = flowEndSysUpTime - flowStartSysUpTime
start = (NOW - duration)
end = NOW

Другой подход состоит в том, чтобы предположить, что по крайней мере некоторые потоки сбрасываются быстро, и поддерживать оценку для каждого времени загрузки устройства, используя числа flowEndSysUpTime:

boot-time = MIN(NOW - flowEndSysUpTime)
start = boot-time + flowStartSysUpTime
end = boot-time + flowEndSysUpTime

но тогда вы должны быть осторожны, чтобы обнаружить пошаговое изменение вашей оценки времени загрузки, если устройство действительно перезагружается. И это изменение шага может составить ~30 секунд, если оно было дважды перезагружено в быстрой последовательности. Есть о чем подумать - но поскольку эти унаследованные поля имеют точность только до 1 секунды, неясно, что быть умным стоит усилий.

Другие вопросы по тегам