Файлы журналов -Команда для поиска пробелов более 2 минут в журналах

Пробовали ли вы использовать tcpdump для прослушивания интерфейса виртуальной машины?

Я не уверен, что вы используете в качестве гипервизора, но вы сможете запустить ip addr, и если вы видите порты vswitch; в этом выводе вы можете захватить эти порты в tcpdump.

Вы также можете запустить tcpdump -D, и это скажет вам, что известно libpcap на хост-компьютере для захвата.

Например, если вы используете KVM в качестве гипервизора, вы можете получить MAC-адрес и имя порта, с которым связана виртуальная машина.

# Assuming your xml files for the vms are in the default location also. cat /etc/libvirt/qemu/{{ name_of_vm }}.xml | grep -A 2 interface

Из этого вывода вы можете сопоставить вывод из ip addr, используя две последние цифры MAC-адреса в качестве фильтра.

ip a | grep -B 1 -i {{ last_two }}

Возвращаемый интерфейс затем может использоваться tcpdump.

tcpdump -ni {{ vnet_name }} -s0 -vw /var/tmp/{{ vnet_port_out }}.pcap

Это позволит захватить все на этом порту без фильтрации.

1
18.03.2021, 00:24
2 ответа

Вот хакерское решение, которое работает на GNU awk 4.1.3 и выше. Год жестко закодирован, так как файл журнала не сообщает нам год.

$ cat data
Mar 14 15:41:00 Xps15 gnome-shell[2048]: Removing a network device that was not added
Mar 14 15:41:00 Xps15 NetworkManager[923]: <warn>  [1615736460.0861] sup-iface[fc7990f46420f6bc,7,wlp0s20f3]: call-p2p-cancel: failed with P2P cancel failed
Mar 14 15:41:00 Xps15 /usr/libexec/gdm-x-session[1892]: (II) config/udev: removing device PS/2 Logitech Wheel Mouse
Mar 14 15:41:00 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:42:00 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:43:59 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:44:00 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:46:00 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:48:01 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:49:01 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:49:31 Xps15 systemd[1]: fprintd.service: Succeeded.
$ cat myscript.awk
#!/usr/bin/awk -f
{ month=(index("JanFebMarAprMayJunJulAugSepOctNovDec",$1)-1)/3+1;
  timestamp=sprintf("%s %02d %02d %s %s %s",2021,month,$2,substr($3,0,2),substr($3,4,2),substr($3,7,2))
  secs=mktime(timestamp)
  if(secs > last + 119 && last) {
   print substr($0,0,6),"**"substr($0,8,8)"**",substr($0,17)
  } else {
   print $0
  }
  last=secs
}
$./myscript.awk <data
Mar 14 15:41:00 Xps15 gnome-shell[2048]: Removing a network device that was not added
Mar 14 15:41:00 Xps15 NetworkManager[923]: <warn>  [1615736460.0861] sup-iface[fc7990f46420f6bc,7,wlp0s20f3]: call-p2p-cancel: failed with P2P cancel failed
Mar 14 15:41:00 Xps15 /usr/libexec/gdm-x-session[1892]: (II) config/udev: removing device PS/2 Logitech Wheel Mouse
Mar 14 15:41:00 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:42:00 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:43:59 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:44:00 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 **15:46:00** Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 **15:48:01** Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:49:01 Xps15 systemd[1]: fprintd.service: Succeeded.
Mar 14 15:49:31 Xps15 systemd[1]: fprintd.service: Succeeded.
$
0
18.03.2021, 22:24

Я не знаю ни одной встроенной команды, которая делала бы это. Но так как это просто текстовые файлы, вы можете использовать awkфункции:

mktime()превратит дату в отметку времени. Я добавил 1970 01 , чтобы избежать ложных срабатываний при смене дня, хотя это не идеальное решение, оно все равно не работает при смене месяца. Вы можете передать фактический год и месяц обработки журнала.

Сценарий сохраняет последнюю строку и ее отметку времени и сравнивает ее с текущей. Когда разница превышает 120 (2 секунды ), скрипт печатает предыдущую и текущую строки.

BEGIN {prev_time=-1;prev_line=""}
{
curr_time = mktime("1970 01 " $2 " " gensub(":"," ","g",$3))
if (prev_line && curr_time - prev_time > 120) {print prev_line"\n"$0}
prev_time = curr_time
prev_line = $0
}

Затем вы передаете журнал в awk, используя этот скрипт. Я не особо задумывался об оптимизации, это базовое решение, над которым можно работать.

1
18.03.2021, 22:24

Теги

Похожие вопросы