Отслеживаем время отклика NFS сервера с помощю tshark и lua

На днях встал перед задачей, как определить, сколько времени тратит NFS сервер на запрос.Оказалось, что это не так уж и просто посмотреть. Но на помощь пришёл любимый молоток инструмент — wireshark. Для wireshak можно написать своё расширение на LUA.Идея простая: берём NFS запрос и кладём в hashmap, а когда видим ответ, то считаемразницу во времени:

if msgtyp == 0 then packets[xid] = { timestamp = frameepochtime, source = tostring (ipsrc), destination = tostring (ipdst), op_code = nfs_op }; else local l = packets[xid] if l ~= nul then packets[xid] = nil local time_delta = frameepochtime — l.timestamp if time_delta > min_time_delta then print (frametime …» » … l.source …» <=> » … l.destination …» » … string.format (»%.3f», time_delta) …» » … l.op_code) end end Полный код доступен тут

Запускается просто с командной строки

$ tshark -q -X lua_script: nfs.lua -f «port 2049» Результат:

«Aug 27, 2014 16:44:43.000 CEST» aaaa: bbbb: ccc:10a0::1:7f <=> aaaa: bbbb: ccc:10bf::1:8c 0.001 v4_EXCHANGE_ID «Aug 27, 2014 16:44:43.000 CEST» aaaa: bbbb: ccc:10a0::1:7f <=> aaaa: bbbb: ccc:10bf::1:8c 0.001 v4_CREATE_SESSION «Aug 27, 2014 16:44:43.000 CEST» aaaa: bbbb: ccc:10a0::1:7f <=> aaaa: bbbb: ccc:10bf::1:8c 0.001 v4_PUTROOTFH «Aug 27, 2014 16:44:43.000 CEST» aaaa: bbbb: ccc:10a0::1:7f <=> aaaa: bbbb: ccc:10bf::1:8c 0.002 v4_RECLAIM_COMPLETE «Aug 27, 2014 16:44:43.000 CEST» aaaa: bbbb: ccc:10a0::1:7f <=> aaaa: bbbb: ccc:10bf::1:8c 0.001 v4_PUTROOTFH «Aug 27, 2014 16:44:43.000 CEST» aaaa: bbbb: ccc:10a0::1:7f <=> aaaa: bbbb: ccc:10bf::1:8c 0.001 v4_DESTROY_SESSION «Aug 27, 2014 16:44:43.000 CEST» a.b.161.127 <=> a.b.191.140 0.001 v4_EXCHANGE_ID «Aug 27, 2014 16:44:43.000 CEST» a.b.161.127 <=> a.b.191.140 0.001 v4_CREATE_SESSION «Aug 27, 2014 16:44:43.000 CEST» a.b.161.127 <=> a.b.191.140 0.003 v4_PUTROOTFH «Aug 27, 2014 16:44:43.000 CEST» a.b.161.127 <=> a.b.191.140 0.002 v4_RECLAIM_COMPLETE «Aug 27, 2014 16:44:43.000 CEST» a.b.161.127 <=> a.b.191.140 0.004 v4_PUTROOTFH Может, у кого-то есть похожие наработки? Делитесь!

Lua Support in WiresharkWireshark LUA wiki

© Habrahabr.ru