Назад | Перейти на главную страницу

Ruby Script для получения статистики с серверов

Мне было поручено написать сценарий, который будет запускаться на сервере каждые несколько часов, чтобы регистрировать использование процессора, памяти и использования диска. Этот сценарий будет запускаться в окнах и Linux. Для этой задачи я выбрал рубин. Я новичок в написании сценариев. Я погуглил безуспешно. Помоги мне?

  • Скрипт будет выглядеть совершенно иначе в Windows и Linux, если вы не найдете специализированную библиотеку. Насколько я знаю, Ruby не имеет прямого доступа к этой статистике, поэтому для этого вам придется вызывать внешние программы.
  • Если у вас есть пространство (например, NFS), в которое вы можете писать со всей сети, это облегчит вам жизнь.
  • Если вы используете Nagios, то NRPE и n2rrd - ваши друзья. Если нет, вы все равно можете взглянуть на NRPE, поскольку он предназначен для такого рода вещей. NRPE доступен из Веб-сайт Nagios а n2rrd доступен по адресу эта ссылка.
  • Если вы не используете Nagios, то задача cron, вероятно, будет вашим лучшим выбором для того, чтобы скрипт работал достаточно регулярно.

Прежде всего, если вы занимаетесь системным администрированием с помощью ruby, вам следует прочитать Практичный рубин для системного администрирования.

Тогда я думаю, что у вас есть как минимум два варианта:

  • Скрипт будет запущен в каждой системе и вызовет веб-службу.
  • Скрипт будет запущен на машине мониторинга, которая опрашивает каждую из машин, а затем вызывает веб-службу.

Если бы вы использовали первый вариант, вам следует создать класс сбора данных и класс отправки данных. Первый должен зависеть от операционной системы, но с теми же методами. В этом случае вы можете использовать system запускать системные команды и получать желаемые данные. В противном случае вы можете использовать порыв чтобы получить больше предварительных данных.

Для второго варианта вы можете использовать SNMP от центрального расположения. Конечно, это означает активацию SNMP на ваших серверах (безопасно !!).

Если почитать немного подробнее, кажется, что есть некоторая поддержка Windows в спешке. И есть демон rushd, который можно использовать для удаленного доступа к машине и выполнения локальных команд.

servers = %w(www1 www2 www3).map { |n| Rush::Box.new(n) }
servers.each do |s| 
  s.bash 'df -h'
end