Система мониторинга сервера

Материал из WikiAdmin
Перейти к: навигация, поиск

Привет! Хочу немного поделится своей идеей, в то же время попросить помощи! Это некий аналог MRTG. Но мне бы хотелось иметь возможность запускать скрипт с нужной мне частотой и в то же время чтобы посмотреть график за нужное время, а не за сутки, неделю, месяц и т.д. Например, мне может потребоваться график загрузки с 9 утра до 18.00. Или любое другое время. При этом я не хочу использовать SMNP, т.к. это дополнительное ПО, присутствие которого не всегда возможно. Например, на хостинге, где доступ ну очень сильно ограничен. Да и лишний демон по сути только загрузит и так небольшой объем памяти у тех же хостеров.

Скрипт

Итак, собираем некоторый скрипт, который будет по cron собирать статистику раз в нужное нам время. Частота не так важна, т.к. в каждый сбор будет проставляться время. Этот же скрипт будет закидывать нужные нам данные в базу данных MySQL. Ниже - сам скрипт. Кстати, часть его можно использовать и так, например, чтобы быстро посмотреть свободную память и т.д. Я использую это команды-скрипты для MRTG.

#!/bin/bash
# данные по базе
export DB_USER="smd"
export DB_PASSWD="пароль базы"

#Нам ну очень нужна дата, поэтому внизу стоит NOW()

#Считаем кол-во подключений на 80 и 25 порты.
export CONNECT80=$(/bin/netstat -plan | /bin/grep :80 | /bin/grep -c tcp)
export CONNECT25=$(/bin/netstat -plan | /bin/grep :25 | /bin/grep -c tcp)

#Подсчет кол-ва пакетов (Не траффика! См. Обсуждение!)
export TRAFFIC_IN=$(/bin/netstat -i | /bin/grep -m 1 'eth0' | /bin/awk {'print $4'})
export TRAFFIC_OUT=$(/bin/netstat -i | /bin/grep -m 1 'eth0' | /bin/awk {'print $8'})

#Теперь получим сколько у нас свободно памяти и СВАП
export MEM=$(/usr/bin/free -b | /bin/awk '/^Mem:/ { print $4; }')
export SWAP=$(/usr/bin/free -b | /bin/awk '/^Swap:/ { print $2; }')

#Считаем среднее значение пинга до нужного сервера, в качестве IP задаем нужный ip-адрес сервера или домен
export PINGIP=$(/bin/ping -q -c5 -i0.2 IP | /bin/awk -F\/ '/^rtt/ { print $5; }')

#Считаем занятость пространства у нужного раздела (напримеру у /dev/hda1 )
export DISK_USED=$(/bin/df | /bin/awk '/150390884/ { print $3; }')

#Считаем процент занятости процессора у user и system
export CPU_USER=$(/usr/bin/sar -u 1 | /bin/awk '/Среднее:/ { print $3; }')
export CPU_SYSTEM=$(/usr/bin/sar -u 1 | /bin/awk '/Среднее:/ { print $5;}')

#Ниже строки - только для проверки. Если каких-либо данных нет - смотрите внимательнее выше, где-то ошибка!
#echo $CONNETC80
#echo $CONNECT25
#echo $TRAFFIC_IN
#echo $TRAFFIC_OUT
#echo "mem" $MEM
#echo "SWAP" $SWAP
#echo $PINGIP
#echo $DISK_USED
#echo $CPU_USER
#echo $CPU_SYSTEM

# и все это отправляем в базу, если раскомментируем строки.
#mysql --user=$DB_USER --password=$DB_PASSWD -e "INSERT into имя базы.имя таблицы
#(`time_stat`, `traffic_in`, `traffic_out`, `connect80`, `connect25`, `memory`, `swap`, `used_root`, `cpu_user`, `cpu_system`, `ping`)
#values
#(NOW(), $TRAFFIC_IN, $TRAFFIC_OUT, $CONNECT80, $CONNECT25, $MEM, $SWAP, $DISK_USED, $CPU_USER, $CPU_SYSTEM, $PINGIP);"
exit 0


Структура таблицы, куда забрасываются данные

 CREATE TABLE IF NOT EXISTS `smd` (
  `emp_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `time_stat` datetime NOT NULL,
  `traffic_in` int(11) DEFAULT NULL,
  `traffic_out` int(11) DEFAULT NULL,
  `connect80` int(11) DEFAULT NULL,
  `connect25` int(11) DEFAULT NULL,
  `memory` int(11) DEFAULT NULL,
  `swap` int(11) DEFAULT NULL,
  `used_root` int(11) DEFAULT NULL,
  `cpu_user` int(11) DEFAULT NULL,
  `cpu_system` int(11) DEFAULT NULL,
  `ping` int(11) DEFAULT NULL,
  PRIMARY KEY (`emp_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11799 ;

Страница просмотра

Вот тут то и сама засада - я не программист и сделать страницу, где бы можно было задать данные и в ответ получить график и средние значения, просто не умею. Поэтому пока просто смотрю нужное мне селектом в самой базе. Если же кто-то сможет написать страницу и выложить сюда её - это будет просто отлично и моё громадное спасибо!


См. так же:



Если эта страница оказалась для вас полезной, нажмите на кнопку. :)
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты