2007/05/03

The GNU Accounting Utilities - стандартный инструментарий для анализа произошедшего

The GNU Accounting Utilities (acct) - набор из нескольких утилит, помогающих проанализировать произошедшие инциденты и обнаружить слабые места в работе сервера.
Смысл простой - вы включаете запись всего происходящего, а потом анализируете накопленные данные (файлы /var/log/pacct и /var/log/wtmp). Слежение происходит на уровне ядра, поэтому ядро должно иметь соответствующую опцию (BSD-style process accounting) при сборке (мною опробованы стандартные ядра Debian 3.1, 4.0, Slackware 10 - с ними все в порядке). В Debian и Slackware - все элементарно ставится из репозитария - пакет acct.
В данный набор входят следующие утилиты:
Лучший способ рассказа об этих утилитах - пример ситуации. Итак, представьте себе, вы хорошо осведомлены о том, что происходит на ваших серверах, накапливаете статистику (например, по snmp с помощью Cacti) о загрузке, использовании памяти и процессорного времени, приходите утром смотрите на графики и видите дикую нагрузку на вашем веб-сервере ночью, когда обычно всё тихо. Естественно, первым делом идут в ход обычные логи (/var/log/messages, /var/log/auth.log, /var/log/syslog и .т.д.), но ситуация несколько осложняется - дело в том, что на веб-сервере запущен не только веб-сервис, но и с десяток других (mail, ftp, ldap, dns и т.д.). Если обычные логи ничего толкогого не говорят и вы не можете точно сказать, что за сервис вызвал такую нагрузку (да и сервис ли это был?), тогда в дело вступают Accounting Utilities (естественно, если вы прежде включили накопление результатов :) )
# lastcomm -f /var/log/pacct.1 > ~/lastcomm.log
Вывод будет примерно следующий:
...
apachectl root ?? 0.01 secs Tue May 1 18:50
lynx root ?? 0.01 secs Tue May 1 18:50
awk root ?? 0.01 secs Tue May 1 18:50
lynx root ?? 0.00 secs Tue May 1 18:50
cat root ?? 0.00 secs Tue May 1 18:50
httpd www ?? 0.13 secs Tue May 1 18:49
httpd www ?? 0.12 secs Tue May 1 18:49
httpd www ?? 0.15 secs Tue May 1 18:49
httpd www ?? 0.17 secs Tue May 1 18:49
httpd www ?? 0.25 secs Tue May 1 18:49
httpd www ?? 0.14 secs Tue May 1 18:49
httpd www ?? 0.14 secs Tue May 1 18:49
httpd www ?? 0.25 secs Tue May 1 18:49
httpd www ?? 1.56 secs Tue May 1 18:39
httpd www ?? 0.13 secs Tue May 1 18:49
httpd www ?? 0.14 secs Tue May 1 18:49
httpd www ?? 0.23 secs Tue May 1 18:49
httpd www ?? 1.92 secs Tue May 1 18:39
proftpd root ?? 0.01 secs Tue May 1 18:49
httpd www ?? 0.14 secs Tue May 1 18:49
httpd www ?? 0.14 secs Tue May 1 18:49
httpd www ?? 0.13 secs Tue May 1 18:48
httpd www ?? 0.15 secs Tue May 1 18:48
httpd www ?? 1.42 secs Tue May 1 18:39
httpd www ?? 361.29 secs Tue May 1 18:30
httpd www ?? 0.32 secs Tue May 1 18:45
httpd www ?? 0.75 secs Tue May 1 18:45
httpd www ?? 0.80 secs Tue May 1 18:45
httpd www ?? 0.19 secs Tue May 1 18:47
...
Колонки: команда, пользователь, терминал, время выполнения, время старта данной команды (еще могут быть различные флаги, о которых написано в документации)
Из приведенного выше лога видно, что веб-сервер что-то выполнял 360 секунд (видимо это был какой-то скрипт). Плюс число 360 - это явно какой-то лимит, видимо веб-сервер остановил выполнение скрипта по истечению timeout'а в 360 секунд. Ну а дальше - дело техники - в лог файлах выших сайтов найти что за скрипт был остановлен (и не раз) за то, что повисал.

Ссылки:
  1. Accounting Utilities Manual
  2. Как отследить запущенные пользователями программы

3 comments:

virens said...

Интересный пост, скоро может потребоваться: в нашей местной сети скоро будут внешние динамические IP. Надо бы поднять iptables :-)

Не в тему: вы не хотите на главной странице сокращать посты, вроде "читать дальше"? Довольно удобно, и делается нетрудно: в хелпе блоггера это проходит как fullpost. Немного изменить шаблон и всё.

В остальном класс. Не возражаете, если добавлю вас в гуглопоиск по никс-блогам?

Roman Sozinov said...

to virens:
Да, конечно, не возражаю :) А где можно но него взглянуть?

А по поводу "читать дальше" - посты у меня "нетяжелые" (картинок не использую), поэтому оставлю пока так. Да и сам не люблю, когда используют данную опцию, так как в основном блоги читаю feed-reader'ом, и не очень удобно запускать броузер, чтобы дочитать пост.

virens said...

Да, конечно, не возражаю :) А где можно но него взглянуть?
Например, у меня на блоге. А вообще тут: http://mydebianblog.blogspot.com/2007/02/blog-post_20.html это обсуждалось. Добавить к себе на блоге нетрудно.