Возможно вы искали: 'Sly Spy: Secret Agent'

May 15 2025 18:13:56
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Мониторинг интерфейсов в сети с помощью netmond и rrdtool (rrdtool monitor statistic snmp)

Мониторинг интерфейсов в сети с помощью netmond и rrdtool (rrdtool monitor statistic snmp)

Ключевые слова: rrdtool, monitor, statistic, snmp, (найти похожие документы)

From: Кропачев Артемий <neon@insysnet.ru.>
Newsgroups: email
Date: Mon, 1 Sep 2006 14:31:37 +0000 (UTC)
Subject: Мониторинг интерфейсов в сети с помощью netmond и rrdtool

Введение

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

На мой взгляд, наиболее часто встречающимися задачами мониторинга
локальной сети являются:

* определение доступности/недоступности оборудования, серверов и сервисов
* проверка каналов передачи данных (доступность, загруженность)
* сохранение и просмотр статистики на интерфейсах коммутаторов и серверов (байты, пакеты и ошибки)
* сохранение и просмотр различных параметров сервисов и объектов
(например, загрузка CPU маршрутизаторов, размер свободного дискового
пространства на файловых серверах, количество подключённых модемных
пользователей на Cisco и другие).



Существует большое количество уже готовых систем мониторинга: nagios,
mrtg, zabbix,cacti. Настройка "полной" системы мониторинга является
достаточно сложной задачей и выходит за рамки данной статьи. Любой
системный администратор рано или поздно и ввиду различных задач
сталкивается с необходимостью анализа закономерностей сетевого трафика в
течении часов, суток, месяцев и т.п. Пожалуй, наиболее удобным способом
является просмотр графиков пакетных и байтовых нагрузок на каналах.
Данная статья ставит своей задачей донести до читателя мой личный опыт
по отображению статистики на интерфейсах серверов и оборудования в
наглядном виде (графики). Эта проблема может быть решена большим
количеством способов (например cacti, mrtg), но я реализовал именно
этот, чем и хочу поделиться.


Используемое программное обеспечение

Для решения поставленной задачи потребуются:

- netmond - сердце системы, выполняет опрос объектов


Домашняя страница производителя RINET Software Team находится по адресу http://soft.risp.ru/ ,
там имеется очень хорошая документация о продукте на русском языке.
Netmond представляет из себя некий серверный инструмент, позволяющий
собирать данные со всех объектов и сервисов сети в одном месте (сервере
мониторинга) и в удобном для использования виде (в нашем случае это
rrdtool, возможно хранить данные в SQL базах данных)

- rrdtool - средство сохранения (база данных) и отображения статистики (утилиты построения изображений)


За информацией о rrdtool можно обращаться на сайт http://www.rrdtool.org.
Есть очень неплохая статья про работу с этой базой http://www.bog.pp.ru/work/rrdtool.html
на русском языке. В man страницах подробно описаны все утилиты работы
см. man rrdtool. Стоит более подробно ознакомится с man страницами по
rrdcreate, rrdupdate, rrdgraph.

- Perl - скрипты для сохранения и отображения данных


- Apache - веб сервер


- Пакет Net-SNMP - для удобства проверки работы протокола snmp


Netmond будет выполнять роль системы получения данных по протоколу SNMP,
а так же будет сохранять данные загрузки интерфейсов в базу rrdtool
через внешний скрипт на Perl. Работа с сохранёнными данными возможна из
командной строки и средствами скриптов. Для удобства использования
написан скрипт отображения результатов в Web интерфейсе.

Настройка системы мониторинга производилась на базе операционной системы
FreeBSD (4.x, 5.x, 6.x), но всё ниже написанное, думаю, можно будет
перенести на Linux (изменится в основном способ установки ПО и место
размещения конфигурационных файлов).


Установка

Чтобы приступить к настройке системы ставим необходимое программное
обеспечение. Вся установка велась из портов FreeBSD. Если у кого-то есть
желание ставить из исходников или пакетов - пожалуйста.

Perl:

# cd /usr/ports/lang/perl5.8 && make install clean


Ставим rrdtool (на момент написания статьи версия 1.2.15):

# cd /usr/ports/net/rrdtool && make install clean


Ставим netmond:

# cd /usr/ports/net-mgmt/netmond && make install clean


Пакет Net-SNMP:

# cd /usr/ports/net-mgmt/net-snmp && make install clean


Ставим, настраиваем и запускаем www сервер apache.


Настройка netmond
------------------

Конфигурационный файл netmond лежит в файле
/usr/local/etc/netmon.conf.sample. Переименовываем его в netmon.conf и
редактируем:

# mv /usr/local/etc/netmon.conf.sample /usr/local/etc/netmon.conf
# vi /usr/local/etc/netmon.conf


Ниже будет дан пример конфигурационного файла с описанием.


RootDir "/var/netmon" # Каталог для сохранения данных
Polling 60 # Время опроса объектов мониторинга (в секундах)
Timeout 2 # Время ожидания ответа на запрос (в секундах)
Retries 3 # Количество переповторов
Saving 60 # Интервал периодического сохранения данных(60 секунд)
TimeFmt "%H:%M:%S" # Формат времени

# Группы доступа к netstate
Group "local" {
Permit "^localhost$"
Permit "^127\.0\.0\.1$"
Deny ".*"
}
Group "remote" {
Permit "^172\.21\.81\."
}

NetState {
Port 3333
# Порт netstate сервера
Timeout 30
Group "local"
Group "remote"
}

Save "make_dir" {
# метод сохранения для создания каталога
File ""
When "0" 0
}

Save "save_rrd_if" {
# Определяем метод сохранения статистики интерфейсов в rrd базу
Pipe "/usr/local/sbin/rrdsave"
# Вызываем скрипт /usr/local/sbin/rrdsave и передаём ему данные на стандартный вход (директива Pipe)
# Возможен вариант с Exec тогда данные будут переданы в командной строке
# После директивы Data идут данные, можно писать с новой строки в кавычках
# Передаём разницу показателей счётчиков байт, много- и моноадресных пакетов, ошибок, дропов на
# интерфейсе, для которого данный метод сохранения прописан в разделе объектов мониторинга
Data
"$DATADIR/rrdintn"
"60n"
"RRA:AVERAGE:0.5:1:10080 RRA:AVERAGE:0.5:5:10080 RRA:AVERAGE:0.5:60:10080 RRA:AVERAGE:0.5:3600:10080n"
"${ifOperStatus}:ifoperstatus:GAUGE:600:0:1.25n"
"${ifInOctets.delta}:ifinoctets:GAUGE:600:0:Un"
"${ifOutOctets.delta}:ifoutoctets:GAUGE:600:0:Un"
"${ifInErrors.delta}:ifinerrors:GAUGE:600:0:Un"
"${ifOutErrors.delta}:ifouterrors:GAUGE:600:0:Un"
"${ifInDrops.delta}:ifindrops:GAUGE:600:0:Un"
"${ifOutDrops.delta}:ifoutdrops:GAUGE:600:0:Un"
"${ifInUcastPkts.delta}:ifinucastpkts:GAUGE:600:0:Un"
"${ifOutUcastPkts.delta}:ifoutucastpkts:GAUGE:600:0:Un"
"${ifInNUcastPkts.delta}:ifinncastpkts:GAUGE:600:0:Un"
"${ifOutNUcastPkts.delta}:ifoutncastpkts:GAUGE:600:0:U"
}

# ****Здесь начинается раздел описания объектов мониторинга********

Object "Cisco_catalyst" {
# Определяем объект мониторинга - коммутатор Cisco
Address "172.21.80.11" # Адрес, по которому будем опрашивать
Method router "public"
# Определяем стандартный метод опроса router с известной строкой community
Save "make_dir"
Interface "FastEthernet0/1" {
# Определяем интерфейс на коммутаторе по его ifName
# Предопределяем методы сохранения данных на данном интерфейсе
# первый метод нужен для определения переменной DATATDIR
# Второй выполняет сохранение данных
Save "make_dir"
Save "save_rrd_if"
}
Interface 2 {
# Определяем интерфейс по значению ifIndex (по номеру)
Save "make_dir"
Save "save_rrd_if"
}
}

Object "Server" {
Address "172.21.8.1"
Method router "mysnmpcommunity"
Save "make_dir"

Interface "fxp0" {
Save "make_dir"
Save "save_rrd_if"
}
Interface "fxp1"{
Save "make_dir"
Save "save_rrd_if"
}
Interface "em0"{
Save "make_dir"
Save "save_rrd_if"
}

}




Структура конфигурационного файла подробно описана на сайте
производителя, я остановлюсь лишь на нескольких важных деталях. Весь
конфигурационный файл состоит из 5 основных частей:

1. Установка глобальных переменных.
2. Параметры работы netstate протокола.
3. Пользовательские методы опроса объектов и сервисов (в приведённом конфигурационном файле не используются)
4. Пользовательские методы сохранения данных.
5. Раздел описания объектов, сервисов и интерфейсов мониторинга.

Параметр Saving изменён с 300 на 60. Необходимо для правильного
сохранения минутных статистик в базу rrdtool. Переменная RootDir
содержит путь до каталога куда netmond будет сохранять полученные данные
прописанными методами сохранения. Следует предусмотреть достаточный
объём свободного места на разделе (Файл rrdtool для одного интерфейса в
нашем случае будет занимать порядка 3,5 Мб).

В примере конфига добавлено для примера два объекта мониторинга:
коммутатор Cisco и сервер на базе FreeBSD. В свойствах объекта
мониторинга задаётся его IP адрес, метод опроса, и методы сохранения
данных. Мы используем встроенный метод опроса router, который считывает
по SNMP статистику с интерфейсов и некоторую другую информацию. Методу
передаётся 1 параметр (выражение в кавычках после названия метода)-
строка community (что то типа пароля для доступа к данным по SNMP).

В параметрах объектов описано так несколько интерфейсов: один по
названию (по IfName), второй по номеру (по IfIndex). Кому как удобнее
пользоваться. Например, при установке службы SNMP в MS Windows у
интерфейсов вообще ifName отсутствует, так что приходится пользоваться
только вторым способом.

Для каждого интерфейса прописано 2 метода сохранения данных: "make_dir"
и "save_rrd_if".

Метод сохранения данных "save_rrd_if" передаёт данные собранные
встроенным методом опроса "router" (показатели счётчиков байт, пакетов,
дропов, ошибок), имя файла rrdtool базы куда надо данные поместить
(берётся из переменной netmond "DATADIR"), а так же параметры базы
rrdtool необходимые для её создания и последующего обновления на вход
скрипта /usr/local/sbin/rrdsave. Если файл базы не существует скрипт его
создаёт, если существует - то добавляет/обновляет в нём данные.

Опишу подробнее строки с данными (после директивы Data):

- "$DATADIR/rrdintn"


путь до файла, в нашем случае rrdint, переменная
DATADIR содержит путь до каталога, где хранятся данные данного
объекта/сервиса/интерфейса (в нашем случае для интерфейса).

- "60n"


время в секундах, как часто будет обновляется база. Параметр
необходим при создании базы.

- "RRA:AVERAGE:0.5:1:10080 RRA:AVERAGE:0.5:5:10080 RRA:AVERAGE:0.5:60:10080 RRA:AVERAGE:0.5:3600:10080n"


RRA строки - параметр создания базы: определяем количества ячеек тип.

Общий формат:

RRA:функция-консолидации:x-доля:отсчетов-на-ячейку:число-ячеек


Функции консолидации определяют как и какие отсчёты группировать в одну
ячейку (у нас методом усреднения, возможны так же MAX, MIN, TOTAL,
LAST). Создаём 10080 ячеек под минутные отчёты (1 отсчёт по 60 секунд),
10080 ячеек под 5 минутные (5 отсчётов), сколько же под часовые (60
отсчётов) и т.д.. Если кому жалко место на диске, можно без проблем
значительно уменьшить количество ячеек. Например вот так:

"RRA:AVERAGE:0.5:1:1440 RRA:AVERAGE:0.5:5:2016 RRA:AVERAGE:0.5:60:720 RRA:AVERAGE:0.5:3600:365n"


- "${ifOperStatus}:ifoperstatus:GAUGE:600:0:1.25n"


передаём OperStatus для интерфейса в виде переменой ${ifOperStatus},
сохраняем как есть (тип GAUGE), максимальное значние 1.25.

- "${ifInOctets.delta}:ifinoctets:GAUGE:600:0:Un"


переедем переменную разницы счётчиков входящих байт между опросами. В
базе имя столбца будет названо как ifinoctets.

Думаю с остальными строками уже понятно

- "${ifOutOctets.delta}:ifoutoctets:GAUGE:600:0:Un" (исходящий байты)
- "${ifInErrors.delta}:ifinerrors:GAUGE:600:0:Un" (ошибки)
- "${ifOutErrors.delta}:ifouterrors:GAUGE:600:0:Un"
- "${ifInDrops.delta}:ifindrops:GAUGE:600:0:Un" (дропы)
- "${ifOutDrops.delta}:ifoutdrops:GAUGE:600:0:Un"
- "${ifInUcastPkts.delta}:ifinucastpkts:GAUGE:600:0:Un" (моноадресные пакеты)
- "${ifOutUcastPkts.delta}:ifoutucastpkts:GAUGE:600:0:Un"
- "${ifInNUcastPkts.delta}:ifinncastpkts:GAUGE:600:0:Un" (многоадресные пакеты)
- "${ifOutNUcastPkts.delta}:ifoutncastpkts:GAUGE:600:0:U"


Метод "make_dir" необходимо вызывать до метода "save_rrd_if" для того
лишь, чтобы определить переменную DATADIR. В противном случае без вызова
метода File она будет не определена.


Скрипт для сохранения данных в rrdtool

Далее необходимо создать скрипт сохранения данных в базу rrd
/usr/local/sbin/rrdsave. Вот его листинг:


#!/usr/local/bin/perl
my (@ds,$line,$exe);
my $FileName=<STDIN>;
my $TimeStep=<STDIN>;
my $RRAString=<STDIN>;
chomp($RRAString,$TimeStep,$FileName);
$FileName=~s/"//g;
my $rrdtoolpath='/usr/local/bin/rrdtool';
my $num=-1;
while ( defined( $line=<STDIN> ) ) {
chomp($line); $num++; $ds[$num]=$line;
};
if( -e($FileName) ) {
$exe=$rrdtoolpath.' update '.$FileName.' --template';
my $dsname=''; my $value='';
foreach my $ds1 (@ds) {
my @prom=split/:/,$ds1;
$dsname=$dsname.$prom[1].':';
$value=$value.$prom[0].':';
};
$value=~s/:$//; $dsname=~s/:$//;
$exe=$exe.' '.$dsname.' N:'.$value;
system($exe);
} else {
$exe=$rrdtoolpath.' create '.$FileName.' --step '.$TimeStep;
foreach my $ds1 (@ds) {
$ds1=~s/^.+?://;
$exe=$exe.' DS:'.$ds1;
};
$exe=$exe.' '.$RRAString;
system($exe);
system('/bin/chmod 644 '.$FileName);
};




Изменим права доступа на данный скрипт:

# chmod 755 /usr/local/sbin/rrdsave


Запуск приложения

Приложение готово к запуску, запускаем кому как удобно:

# /usr/local/sbin/netmond
# /usr/local/etc/rc.d/netmond.sh start


(предварительно добавив в rc.conf 'netmond_enable="YES"')

# /usr/local/sbin/netmondctl start


Проверяем наличие процесса в памяти (# ps auxw|grep netmond), отсутствие
ошибок в /var/log/messages, а так же наличие каталогов в RootDir:

# cd /var/netmon && ls


Единственный минусом можно назвать факт, что каталоги создались с
правами 750. Для возможности работы системы отображения необходима
возможность пользователю www иметь доступ к файлам, хранящимся в
каталогах в /var/netmon. Для этого необходимо сменить права доступа на
все подкаталоги, находящиеся в /var/netmon на 755. Самый быстрый (но не
самый правильный) вариант:

# chmod -R 755 /var/netmon


Следует отметить, что все скрипты вызываемые из методов сохранения
запускаются с правами пользователя netmon, так что необходимо
предусмотреть возможность записи в каталоги с интерфейсами:

# cd /var/netmon
# chown -R netmon *


Через пару минут после запуска netmond можно проверить наличие файлов
rrdint в подкаталогах интерфейсов. При желании можно посмотреть
содержимое фалов следующим образом:

# rrdtool fetch rrdint AVERAGE[[/CODE]], где rrdfilename - имя созданного файла.


Вот часть результат вывода данной команды:

ifoperstatus ifinoctets ifoutoctets ifinerrors ifouterrors ifindrops ifoutdrops ifinucastpkts ifoutucastpkts ifinncastpkts ifoutncastpkts
1156826040: nan nan nan nan nan nan nan nan nan nan nan
1156826100: nan nan nan nan nan nan nan nan nan nan nan
1156826160: nan nan nan nan nan nan nan nan nan nan nan
1156826220: nan nan nan nan nan nan nan nan nan nan nan
1156826280: nan nan nan nan nan nan nan nan nan nan nan


Информацию о файле можно посмотреть вот так:

# rrdtool info rrdint


Вот чать результата вывода команды:

filename = "rrdint"
rrd_version = "0003"
step = 60
last_update = 1156912412
ds[ifoperstatus].type = "GAUGE"
ds[ifoperstatus].minimal_heartbeat = 600
ds[ifoperstatus].min = 0.0000000000e+00
ds[ifoperstatus].max = 1.2500000000e+00
ds[ifoperstatus].last_ds = "UNKN"


Работа с netstate

Приведу немного изменённую цитату с http://soft.risp.ru :

Netmond хранит все накопленные данные о текущем состоянии сети у себя в
памяти, в специально предназначенных контейнерах - переменных VARIABLE.
Значения VARIABLE могут вводиться в программу по результатам работы
системы сбора данных, а выводиться с помощью разнообразных методов
сохранения SAVE. Однако вывод данных с помощью SAVE выполняется только
по инициативе самого Netmond (периодически или в зависимости от каких-то
условий) совершенно конкретных значений, предусмотренных конфигурацией
программы. Что может быть очень удобно при решении задач накопления и
долговременного хранения данных, но, например, практически не пригодно
для задачи получения мгновенной актуальной картины состояния всей сети в
реальном времени. Для решения задачи вывода любых данных в произвольные
моменты времени в Netmond встроен специальный сервер NetState, который
обеспечивает авторизованным сетевым клиентам асинхронный доступ ко всему
массиву переменных VARIABLE на чтение.

Весь массив переменных VARIABLE представляется в виде иерархии имен
переменных и их владельцев, разделенных специальным символом `!':

Обьект!Подобьект!Переменная = Значение

Возможно получение текущих и предыдущих значений переменных, а также
выбор интересующих переменных по REGEX-маскам на их имена.

Netstate сервер удобен для проверки правильности работы программы, а так
же получения всех текущих переменных, например текущее показание
счётчика байт на интерфейсе, состояние объекта (UP,DOWN), значение
пользовательских переменных и т.п.

Подключение к netstate выполняется по команде:

# telnet 127.0.0.1 3333


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

NetState server ready (timeout 30 sec.)
Compress: ZLIB 1.2.2
!


В процессе отладки системы неплохо бы узнать основные команды. Приведу
их в примерах

Any ;* - покажет все переменные которые держит в памяти netmond.

Object NAME - покажет имена всех объектов. Приведу часть вывода сервера
на эту команду:

!OBJECT
Server-Proxy!NAME = "Server-Proxy"
!OBJECT
Catalyst11!NAME = "Catalyst11"
!OBJECT
Catalyst25!NAME = "Catalyst25"
!OBJECT
Catalyst34!NAME = "Catalyst34"
!OBJECT
Catalyst45!NAME = "Catalyst45"
!OBJECT
Catalyst46!NAME = "Catalyst46"


Interface STATUS - покажет статус интерфейсов (DOWN,UP)

Object Cisco - покажет переменные которые есть у объекта "Cisco"

Interface Cisco!1 - покажет данные по интерфейсу "1" у объекта "Cisco"

Any Cisco!1!IfIndex - покажет значение переменной IfIndex на
интерфейсе/сервисе "1" объекта "Cisco".


Настройка агентов SNMP

Еще хотелось бы отметить, что для работы процесса съёма статистики с
сетевого оборудования (сервера, коммутаторы, маршрутизаторы) необходимо
настроить их SNMP программное обеспечение и определить comminuty string,
которым уже будет пользоваться Method router. Приведу примеры
минимальной настройки для оборудования и некоторых сервисов для снятия
статистики по SNMP.

Маршрутизаторы и коммутаторы Cisco:

# conf t
(config)# snmp-server enable informs
(config)# snmp-server community public ro (public доступ на чтение ?ro?)


Cisco PIX Firewall:

# conf t
(config)# snmp-server enable
(config)# snmp-server community public


Утилита bsnmpd из состава FreeBSD 5-STABLE и 6-STABLE:
Настраиваем файл /etc/snmpd.conf.

host := 172.21.81.3
system := 1 # FreeBSD
read := "public"
%snmpd
begemotSnmpdDebugDumpPdus = 2
begemotSnmpdDebugSyslogPri = 7
begemotSnmpdCommunityString.0.1 = $(read)
begemotSnmpdCommunityDisable = 1
begemotSnmpdPortStatus.[$(host)].161 = 1
begemotSnmpdPortStatus.127.0.0.1.161 = 1
begemotSnmpdLocalPortStatus."/var/run/snmpd.sock" = 1
begemotSnmpdLocalPortType."/var/run/snmpd.sock" = 4
sysObjectId = 1.3.6.1.4.1.12325.1.1.2.1.$(system)


Добавляем в rc.conf строку bsnmpd_enable="YES" и запускаем:

# /etc/rc.d/bsnmpd start


Проверяем /var/log/messages на наличие/отсутствие ошибок.

Пакет Net-SNMP из портов:

Правим файл /usr/local/share/snmp/snmpd.conf, оставляем/добавляем запись
про community string:

rocommunity public 172.21.81.3


Добавляем в rc.conf строку snmpd_enable="YES" и запускаем:

# /usr/local/etc/rc.d/snmpd.sh start


Служба SNMP в Microsoft Windows

Для начала устанавливаем службу: Пуск(Start)/ Настройка(Settings)/
Панель Управления (Control Panel)/ Установка удаление программ (Add or
remove programs)/ Установка компонентов Windows (Add/remove Windows
Components)/ Средства управления и наблюдения (Management and Monitoring
Tools)/ Протокол SNMP (Simple Network Management Protocol). После
установки необходимо выполнить настройку службы Пуск/ Настройка/ Панель
управления/ Администрирование/ Службы. Находим службу "Служба SNMP"
("SNMP Service"), можно сразу выполнить переход на закладку
"Безопасность". Добавляем новое имя сообщества (community string) по
кнопке "Добавить" для чтения.


Проверка работы SNMP агентов

После запуска агентов SNMP необходимо выполнить проверку работы. Я делаю
это через snmpwalk из пакета Net-SNMP вот так:

% snmpwalk -v версия_протокола cc communitystring IP
% snmpwalk -v 1 -c public 172.21.81.3


Если данные идут (на экране появится моного информации), значит служба
работает как надо. Если не идут: либо не правильно задана community
string, либо агент snmp не запущен, либо данному хосту нельзя забирать
данные по SNMP.

Для того чтобы определить IfIndex для интерфейсов, например в MS
Windows, я делаю следующее: читаю ifTable (кому удобнее можете все
данные по snmp прочитать) нахожу там что-то вроде:

IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.65539 = INTEGER: 65539
IF-MIB::ifDescr.1 = STRING: MS TCP Loopback interface
IF-MIB::ifDescr.65539 = STRING: Realtek RTL8139 Family PCI FastEthernet NIC


Тут видно что имеется 2 интерфейса - Loopback и rl, имеющие ifIndex=1 и
65539 соответственно.


Мониторинг интерфейсов, имеющих IfIndex больше 65535
-----------------------------------------------------

С такой задачей я столкнулся только при мониторинге серверов MS Windows.
Причина в том, что netmond отказывается принимать интерфейсы в
конфигурационном файле, имеющие IfIndex больше 65535, узнать об этом
можно будет после запуска в файле /var/log/messages будет строка вроде
"interface index out of range". Лекарство нашлось только маленькой
правкой кода netmond в файле parseconf.y. Находим там поиском 2 строки
содержащие "interface index out of range" и правим в условиях:
if ($2 < 1 || $2 > 65535) цифру 65535 на что то вроде 655350 (может не совсем
правильно, но я сделал так).

После этого пересобираем netmond.

# cd /usr/ports/net-mgmt/netmond
# make patch
# cd work/netmond-2.2-b6
# vi parseconf.y
# cd /usr/ports/net-mgmt/netmond
# make install clean


Сохранение в rrdtool других числовых значений

Для того чтобы сохранять какие-то другие числовые параметры (загрузка
CPU Cisco маршрутизаторов, свободная память, количество процессов и
т.п.) в rrdtool необходимо сначала их получать, то есть написать
соответствующий метод опроса (см. http://soft.risp.ru), чтобы определить
переменную в netmond. Если числовое значение считывается по SNMP через
известный идентификатор, то можно в конфигурационном файле netmond
прописать:


Save "save_var" {
# Создаём новый пользовательский метод сохранения данных в rrdtool
# метод принимает 2 аргумента, первый имя создаваемого файла
# второй строка с сохраняемыми данными
# количество ячеек RRA определено в методе сохранения
Pipe "/usr/local/sbin/rrdsave"
Data
"$DATADIR/$1n"
"60n"
"RRA:AVERAGE:0.5:1:10080 RRA:AVERAGE:0.5:60:10080n"
"$2"
}

Object "Cisco" {
Address "10.1.1.1"
Method router "public"
Save "make_dir"
Interface 1 { Save "make_dir" Save "save_rrd_if" }
Interface 2 { Save "make_dir" Save "save_rrd_if" }
# Прописываем переменную которую нам надо считать по SNMP
# ВНИМАНИЕ ЭТО ВСЕГО ЛИШЬ ПРИМЕР ИДЕНТИФИКАТОРА
$testvar 1.3.6.1.2.1.2.1.0
# Получаем значение переменной
Method SNMP "public" {$testvar}
# Вызываем метод сохранения, передав ему 2 параметра через пробел
# имя файла лучше давать такое же как название переменой
# строка ${testvar}:testvar:GAUGE:600:0:U уже была рассмотрена выше
Save "save_var" "testvar ${testvar}:testvar:GAUGE:600:0:U"
}




После запуска netmond должен будет создать файл testvar в каталоге
объекта "Cisco".Можно будет просмотреть какие данные будут положены в
файл:

# rrdtool fetch testvar AVERAGE


Построение графиков из командной строки

Таким образом, мы имеем систему сбора числовых параметров и сохранения
их в rrdtool базу. Теперь самое дело отобразить полученные значения.
Отображение можно сделать средствами командной строки (подробнее man
rrdgraph). Я приведу пример скрипта для построения графиков байтовой
загрузки для файлов интерфейсов, созданных методом "save_rrd_if":


#!/bin/sh
/usr/local/bin/rrdtool graph $1
--end $4 --start $3
--width 600 --height 400
--imgformat PNG --title "Image PNG"
--color BACK#FAFAFA
DEF:ifin=$2:ifinoctets:AVERAGE
DEF:ifout=$2:ifoutoctets:AVERAGE
CDEF:ifin1=ifin,60,/
CDEF:ifout1=ifout,60,/
VDEF:sumin=ifin1,TOTAL
VDEF:sumout=ifout1,TOTAL
VDEF:maxin=ifin1,MAXIMUM
VDEF:maxout=ifout1,MAXIMUM
VDEF:avgin=ifin1,AVERAGE
VDEF:avgout=ifout1,AVERAGE
AREA:ifin1#00FF00:In
GPRINT:maxin:Max=%lf%s
GPRINT:avgin:Avg=%lf%s
GPRINT:sumin:Sum=%lf%sl
LINE1:ifout1#0000FFSurprisedut
GPRINT:maxout:Max=%lf%s
GPRINT:avgout:Avg=%lf%s
GPRINT:sumout:Sum=%lf%sl




Синтаксис использования:

% /path/to/script /путь_до_создаваемого_изображения /путь_до_rrd_файла
начальное_время_на_графике конечное_время_на_графике

Время задаётся в формате, который воспринимает rrdtool. Я пользуюсь
временем в таком виде: -1m (минуту назад), -54m (54 минуты назад), -12d
(12 дней назад), now (текущий момент) и т.п. Пример использования
данного скрипта:

% script /tmp/graph.png /var/netmon/Cisco/Interface1/rrdint -1d now


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

Чтобы построить график, например, по моноадресным пакетом, достаточно
будет поменять 2 строки, задать другой источник данных (другой столбец в
нашем случае):

Находим строки:

DEF:ifin=$2:ifinoctets:AVERAGE
DEF:ifout=$2:ifoutoctets:AVERAGE


Меняем на:

DEF:ifin=$2: ifinucastpkts:AVERAGE
DEF:ifout=$2: ifoutucastpkts:AVERAGE


Название столбцов можно посмотреть у файла через rrdtool fetch или
rrdtool info.

Чтобы построить данные из одного столбца, или одной переменной (как у
нас в примере testvar) скрипт придётся модифицировать.

Покажу пример как это сделать:


#!/bin/sh
/usr/local/bin/rrdtool graph $1
--end $4 --start $3
--width 600 --height 400
--imgformat PNG --title "Image PNG"
--color BACK#FAFAFA
DEF:varname=$2:testvar:AVERAGE
LINE1:varname#0000FF:line




Параметры скрипта те же самые, только изменены несколько параметров
подписи данных на графике. Думаю, по данным примерам легко написать
скрипты под другие задачи.


Пример Web оболочки для работы с графиками

Описанный выше способ построения графиков не всегда удобен. Некоторые
задачи администрирования требуют просмотра многих графических
зависимостей за короткий промежуток времени, поэтому мне пришлось
написать под свои нужды некоторый web интерфейс на Perl для удобной
работы с графиками загрузки интерфейсов сети. Скачать пример можно вот с
http://neon.heavennet.ru/shownetmon.tar.gz (~13 Kb). Данный архив
содержит 2 каталога (cgi-bin,data) и описание по установке. Принцип
работы скрипта сводится к следующему: получив запрос от пользователя
скрипт подключается к netstate порту у netmond и считывает имена всех
интерфейсов, объектов и сервисов, а так же DATADIR для них. Скрипт на
основании этих данных строит дерево объктов мониторинга с интерфейсами и
пользователю остаётся лишь выбрать требуемый интерфейс для просмотр
графика. Скиншот смотреть Здесь (~80 Кб).

Настройка скрипта отображения данных:

Копируем содержимое каталога cgi-bin (файл shownetmon) в соответствующий
каталог web сервера.

Даём право на запуск пользователю www:

# chmod 755 /usr/local/www/cgi-bin/shownetmon


В скрипте shownetmon устанавливаем адрес netstate порта у netmond:

$main::config{'netstateaddress'} = "127.0.0.1"; # Адресс NETSTATE сервера
$main::config{'netstateport'} = 3333; # Порт NETSTATE сервера


Устанавливаем в скрипе каталог куда будут скаладыватся созданные изображения:

$main::config{'imgdir'} = "/usr/local/www/data/img"; # Путь до создаваемых изображений
$main::config{'webimgdir'} = "/img"; # Путь до изображений в www


Создаём каталог /usr/local/www/data/img. Даём пользователю www
возможность записи в него:

# chmod 777 /usr/local/www/data/img


или

# chown www /usr/local/www/data/img
# chmod 755 /usr/local/www/data/img


Копируем папку data/shownetmon в соответствующий каталог web сервера.
Даём права доступа пользователю www на все файлы в этой папке.

Запускаем netmond если не запущен.

Проверяем есть ли возможность с хоста заходить на порт NetSTATE.

# telnet 127.0.0.1 3333


Если не удаётся подключится, то смотрим настройки firewall и конфиг
netmon.conf на предмет netstate групп.

Устанавливаем модуль Net-Telnet для perl если он отсутствует:

# cd /usr/ports/net/p5-Net-Telnet


Обращаемся http://IP/cgi-bin/shownetmon, предварительно включив JavaScript.


Заключение

В заключении хотел бы отметить нагрузку на компьютер, создаваемую
созданной системой. Данная система разворачивалась на компьютерах с
различной тактовой частотой CPU.Как показал опыт Intel Pentium 166 мог
сохранять и отображать статистику примерно по 200 интерфейсам. Компьютер
на базе Intel 867 Мгц справляется без труда с 500 интерфейсами (больше
просто не было), не нагружая систему больше 1%. Лишь на момент
сохранения нагрузка слегка возрастает на 1-5 секунд. Если учесть, что
обновление данных в базах rrdtool идёт раз в минуту, можно сказать, что
полученная система требует куда меньше ресурсов системы, чем старушка
mrtg.

P.S.: Текст статьи находится по ссылке http://neon.heavennet.ru/netmond_rrdtool.html
536 Прочтений •  [Мониторинг интерфейсов в сети с помощью netmond и rrdtool (rrdtool monitor statistic snmp)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Мониторинг интерфейсов в сети с пом... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка