zabika.ru   1 ... 5 6 7 8

Выполнение лабораторной работы.

Лабораторная работа посвящена изучению основ взаимодействия команд в операционных системах семейства *nix, использованию перенаправления потоков ввода-вывода, регулярных выражений и написанию простых программ на языке командного интерпретатора. Выполнение лабораторной работы предусматривает работу с удалённым сервером. Для доступа к серверу используется терминальная программа PuTTY.

В лабораторной работе требуется:


  • организовать периодическое получение данных о работе определённых систем;

  • записывать их в файл для последующего анализа;

  • организовать получение текущих значений через веб-интерфейс;

  • в виде дополнительного задания — построить графики изменения наблюдаемых величин и предоставить к ним доступ через веб-интерфейс.

Поскольку, как правило, под решение практически любой задачи в Linux можно найти в Internet или готовое решение, или набор рецептов, то выполнение лабораторной работы предусматривает использование готовых скриптов для выполнения поставленных задач. С другой стороны, данные скрипты надо установить на конкретную систему, адаптировать их под задачу и обеспечить их выполнение в рамках выделенного виртуального сервера.

В лабораторной работе требуется получить, записать и проанализировать следующие значения:

  • число процессов в системе. Данный параметр может быть получен путём вывода полного списка выполняющихся в системе процессов и подсчёта числа строк в этом списке.

  • суммарный объем переданных и принятых через сетевой интерфейс venet0 данных в байтах. Эти значения содержатся в выводе команды netstat -i, в соответствующих полях выдаваемой таблицы.
  • Число переданных и принятых через порт удалённого коммутатора пакетов и байтов данных. Данные величины могут быть получены по протоколу SNMP с использованием программы snmpget.


Вызов программы snmpget имеет вид:

$ snmpget -c public -v 1 192.168.250.1 IF-MIB::ifDescr.2 \ > IF-MIB::ifInOctets.2 \ > IF-MIB::ifInUcastPkts.2 \ > IF-MIB::ifOutOctets.2 \ > IF-MIB::ifOutUcastPkts.2 IF-MIB::ifDescr.2 = STRING: eth0 IF-MIB::ifInOctets.2 = Counter32: 120684456 IF-MIB::ifInUcastPkts.2 = Counter32: 1215812 IF-MIB::ifOutOctets.2 = Counter32: 1559547791 IF-MIB::ifOutUcastPkts.2 = Counter32: 1341129

Здесь было произведено обращение к коммутатору 192.168.250.1, с которого были запрошены параметры:

IF-MIB::ifDescr.2 — имя 2-го сетевого интерфейса;

IF-MIB::ifInOctets.2 — число принятых интерфейсом байтов;

IF-MIB::ifInUcastPkts.2 — число принятых интерфейсом пакетов;

IF-MIB::ifOutOctets.2 — число переданных интерфейсом байтов;

IF-MIB::ifOutUcastPkts.2 — число переданных интерфейсом пакетов.

Вывод команды приведён выше.

IP-адрес коммутатора и номер сетевого интерфейса индивидуальны для каждого виртуального сервера, их можно найти в файле /root/SNMP.data . В случае отсутствия такого файла в системе эти данные должны быть получены у преподавателя.

В ходе лабораторной работы используются программы netstat и snmpget, которые можно установить из пакетов net-snmp-clients и net-tools. Для отображения графиков используется набор утилит RRDTOOLS из пакета
rrd-utils.


Для получения данных предлагается использовать следующие программы:

log-local.sh — получение и запись в файл локальной статистики.

#!/bin/bash # Script for logging current system status: # - number of processes # - RX and TX bytes over venet0 network interface # Log to this file: LOG_FILE=/var/www/stat/local.log # Timestamp: TS=`date '+%Y-%m-%d %H:%M:%S'` # Process number PROCNUM=`ps aux | wc -l` PROCNUM=$(($PROCNUM-1)) # netstat info NETBYTES=`netstat -i | grep '^venet0[[:blank:]]' | awk '{print "RX ",$4,"bytes, TX ",$8,"bytes."}'` # Log all to the file echo "$TS => Procs: $PROCNUM, $NETBYTES" >> "$LOG_FILE" #------------------------------------------------------------

log-snmp.sh — получение и запись в файл SNMP-статистики.


#!/bin/bash # Script for logging current SNMP information: # - RX and TX bytes over some network interface # Log to this file: LOG_FILE=/var/www/stat/snmp.log # Network interface number: N=8 # SNMP host HOST=192.168.222.100 # SNMP community COMMUNITY=public # MIBS MIB1="IF-MIB::ifDescr.$N" MIB2="IF-MIB::ifInOctets.$N" MIB3="IF-MIB::ifInUcastPkts.$N" MIB4="IF-MIB::ifOutOctets.$N" MIB5="IF-MIB::ifOutUcastPkts.$N" ############################# # Timestamp: TS=`date '+%Y-%m-%d %H:%M:%S'` # snmp info RES='' for MIB in $MIB1 $MIB2 $MIB3 $MIB4 $MIB5; do LINE=`snmpget -c $COMMUNITY -v 1 $HOST $MIB` NAME=`echo $LINE | sed "s/^IF-MIB::\([[:alnum:]]\+\).*/\1/"` VALUE=`echo "$LINE" | sed "s/^IF-MIB::[[:alnum:]]\+\.$N = [[:alnum:]]\+: //"` RES="$RES $NAME:$VALUE" done # Log all to the file echo "$TS => $RES" >> "$LOG_FILE" #------------------------------------------------------------

Запуск скриптов получения данных предполагается делать раз в минуту для получения локальной информации, и раз в две минуты — для получения информации с коммутатора через SNMP.

Для вывода данных по запросам браузера предлагается установить в систему для запуска с помощью lighttpd следующие скрипты:

cgi-local.sh — отображение локальной статистики.

#!/bin/bash # Simple CGI script echo Content-type: text/plain echo "" LOG_FILE=/var/www/stat/local.log # Show NUM lines if [ -n "$QUERY_STRING" ]; then NUM=$QUERY_STRING else if [ -n "$1" ]; then NUM=$1 else NUM=10 fi fi echo "Current statistic:" tail -n $NUM "$LOG_FILE" | sort -r #------------------------------------------------------------

cgi-snmp.sh — отображение SNMP-статистики.


#!/bin/bash # CGI script for SNMP statistic echo Content-type: text/plain echo "" LOG_FILE=/var/www/stat/snmp.log # Show NUM lines if [ -n "$QUERY_STRING" ]; then NUM=$QUERY_STRING else if [ -n "$1" ]; then NUM=$1 else NUM=10 fi fi echo "Current statistic:" tail -n $NUM "$LOG_FILE" | sort -r #------------------------------------------------------------

Скрипты, обеспечивающие вывод данных в табличной форме и построение графиков, доступны для скачивания на странице с примерами к данной лабораторной работе – http://lab-00.edu.cbias.ru/

Скрипты предполагается размещать в каталогах внутри /var/www,
с использованием для скриптов получения данных каталога /var/www/bin, для веб-интерфейса — /var/www/html, для хранения журналов — /var/www/stat. Для хранения графиков используется каталог /var/www/html/png.


Для запуска скриптов как веб-программ следует разрешить это в настройках lighttpd (расположенных в каталоге /etc/lighttpd/):

  • нужно подключить модуль mod_cgi веб-сервера, раскомментировав строку «include "conf.d/cgi.conf"» в файле modules.conf;

  • задать секцию параметров вида в подключеном файле конфигурации модуля mod_cgi (conf.d/cgi.conf):

cgi.assign = ( ".pl" => "/usr/bin/perl", ".rrd" => "/usr/bin/rrdcgi", ".sh" => "/bin/bash" )

  • и добавить расширения файлов скриптов в параметр
    static-file.exclude-extensions в файле lighttpd.conf:


    static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".sh", ".rrd" )

Изменения настроек вступают в силу после перезапуска lighttpd.

Для обеспечения безопасности системы должны соблюдаться определённые правила выполнения скриптов.

Сбор статистики должен выполняться от имени непривилегированного пользователя. Обычно для подобных задач создаётся отдельный псевдо-пользователь с ограниченными по сравнению с обычными пользователями системы правами. Псевдопользователь не должен иметь возможности удалённого входа в систему и не должен иметь возможности изменения скриптов.

Отображающие информацию скрипты выполняются веб-сервером. Пользователь, под которым работает веб-сервер, не должен иметь возможности записи как в файлы скриптов, так и в файлы логов.

Временные файлы, создаваемые веб-сервером, не должны быть доступны для записи или удаления остальным пользователям системы.

Остальные пользователи системы не должны иметь возможности чтения и записи файлов логов.

Для удобного доступа к различных скриптам в /var/www/html предлагается разместить индексный файл с названием index.html вида:

index

Текущая статистика

  • Простой скрипт статистики локальной системы
  • HTML-скрипт статистики локальной системы
  • Выдача графиков статистики локальной системы
  • Простой скрипт статистики интерфейса SNMP
  • HTML-скрипт статистики интерфейса SNMP
  • HTML-скрипт с выводом таблицей статистики интерфейса SNMP
  • Выдача графиков статистики интерфейса SNMP


<< предыдущая страница