Мониториг почтовой очереди

Скрипт получает состояние почтовой очереди и подсчитывает количество заданий их общий размер и выводил даты самого молодого и старого задания в очереди.

mailq | sed -e 's/[\t]\+/ /g' | sed -e '/^ \+/d;/^ *$/d' | awk '{if(NR==1){qtimestr=gensub(/^.+ (-+Q-Time-+) .+$/,"\\1","g",$0);start=index($0,qtimestr);len=length(qtimestr);}else{printf("%d;%"len"s\n", $2, substr($0,start,len));}}' | while IFS=';' read size date ; do echo -e "`date -d\"${date}\" '+%F %T'`;${size}"; done | sort | awk -F';' '{count++;size=size+$2;if(NR==1){printf("oldest:%s\n", $1)}}END{if(count>0){printf("youngest:%s\ncount:%d\nsize:%dMB\n", $1, count, size/1024/1024)}}'
oldest:2015-10-31 04:21:00
youngest:2015-11-04 11:25:00
count:10
size:25MB

Теперь немного доработав скрипт можно его использовать в системах мониторинга, чтобы оповестить администратора о неадекватном росте количества заданий в очереди. Например, если через взломанный эккаунт сервер используется для рассылки спама.

Значительно более быстро контролировать количество заданий в очереди можно контролировать если очередь заданий разместить на отдельной файловой системе.

df -iP /var/spool/mqueue
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/mapper/VG_MAIN-MQUEUE 10485760     120 10485640    1% /var/spool/mqueue
В данном случае интересует количество использованных inodes.
df -iP /var/spool/mqueue | awk '{if($3 ~ /^[0-9]+$/){print $2, $3, $4}}'
10485760 120 10485640

Здесь нужно мониторить второе поле которое показывает количество занятых inode. Их резкий рост и удержание на высоком уровне будет сигнализировать о вероятной спамерской активности с вашего сервера. А так как в отличии от первого (с mailq) такой скрипт работает очень быстро то мониторить можно ежесекундно.
Повторюсь, этот способ не подойдёт если каталог с почтовыми очередями находится в одной файловой системе с другими каталогами, например на корневой FS. Здесь начнут влиять inode временных файлов и всяких других создаваемых пользователями, программами и демонами. Впрочем вынести почтовые очереди на отдельную FS не такая уж и сложная задача. А для сервера полезная.