Мониторинг состояния температурных датчиков с помощью протокола SNMP::Журнал СА 102009
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

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

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6228
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6934
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4219
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3009
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3807
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3825
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6319
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3172
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3462
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7279
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10647
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12368
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14000
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9126
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7079
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5389
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4617
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3428
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3156
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3402
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3027
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Мониторинг состояния температурных датчиков с помощью протокола SNMP

Архив номеров / 2009 / Выпуск №10 (83) / Мониторинг состояния температурных датчиков с помощью протокола SNMP

Рубрика: Администрирование /  Серверная

ВАДИМ ШПУРИК, разработчик программного обеспечения, фрилансер. Область интересов и приложения творческих усилий: создание интеллектуальных мультиагентных систем; изучение интеллектуального поведения искусственных объектов

Мониторинг состояния
температурных датчиков с помощью протокола SNMP

Как разработать пользовательское расширение к ядру Net-SNMP-демона (SNMP-агент) для сбора данных с температурных датчиков.

Использование SNMP-технологии требует, чтобы все объекты были подключены к физической сети, имели стек протоколов TCP/IP и соответствующий SNMP-агент. Случается, что контролируемые объекты не имеют не только необходимого программного обеспечения, но даже сетевого интерфейса. Для связи системы мониторинга с такими объектами необходимо создание промежуточного программного обеспечения – SNMP-агента, который, с одной стороны, обеспечивает связь с SNMP-менеджером, установленным на станции мониторинга, а с другой – опрашивает контролируемые объекты (датчики). Информация, которую система мониторинга запрашивает от агентов, хранится в специальной информационной базе данных MIB (Management Information Base). Обычно производитель аппаратного или программного обеспечения разрабатывает MIB-файл со своим собственным набором переменных, которые должны быть присоединены к дереву MIB. В SNMP каждой переменный присваивается уникальный идентификатор объекта (Object Identifier, OID). Пространство имён OID является иерархическим и контролируется организацией по распределению номеров в Интернете (Internet Assigned Numbers Authority, IANA).

SNMP используется для получения от сетевых устройств информации об их статусе и других характеристиках, которые хранятся в базе данных MIB. SNMP позволяет применять дополнительные агенты для поддержки баз MIB различных производителей. Агент взаимодействует с контролируемым ресурсом по нестандартному интерфейсу, а с менеджером – по стандартному протоколу через сеть. Таким образом, основная задача при создании SNMP-агента состоит в реализации функции, поддерживающей обработку запросов к заданному OID.

Генерирование кода шаблона

Предполагается, что перед началом работ произведена установка пакета Net-SNMP версии 5.4.2.1 (http://www.net-snmp.org/download.html).

Создадим новый каталог для кода шаблона SNMP-агента (далее Агент):

$ cd ~

$ mkdir sensTable

$ cd sensTable

Переменные, доступные через SNMP, организованы в иерархии и описаны соответствующим MIB. Вопросы, связанные с использованием языка абстрактной синтаксической нотации ASN.1 (http://www.amazon.com/s/ref?url=search-alias%3Dstripbooks&field-keywords=ASN.1) (стандарт ISO 8824:1987, рекомендации ITU-T X.208) и написанием MIB, выходят за рамки данного повествования, поэтому будем считать, что есть некий заранее созданный MIB-файл, например, SENSOR-MIB.mib.txt, в котором нас будет интересовать объект с именем sensTable. Об этом объекте речь пойдет ниже.

Для целей создания Агента в качестве временной замены файла SENSOR-MIB.mib.txt был использован MIB-файл реального устройства Poseidon 3262 (http://www.hw-group.com/products/poseidon/poseidon_3262_en.html).

Воспользуемся утилитой mib2c (http://www.net-snmp.org/docs/man/mib2c.html) пакета Net-SNMP для генерации шаблона Агента:

$ env MIBS="/usr/share/snmp/mibs/SENSOR-MIB.mib.txt" mib2c -c mib2c.mfd.conf \ sensTable

На все вопросы программы mib2c следует давать ответы, предусмотренные в ней по умолчанию (DEFAULT). Единственное исключение составляет вопрос Which method would you like to use to gather data about available rows? (какой метод вы хотели бы использовать, чтобы накапливать данные о доступных строках таблицы). На этот вопрос следует выбрать ответ «2) container-cached», который сообщит программе mib2c о вашем желании использовать в Агенте поддержку кэширования.

После ответа на все вопросы программа mib2c сгенерирует шаблон кода Агента:

writing to defaults/table-sensTable.m2d

Starting MFD code generation...

writing to sensTable.h

| +-> Processing table sensTable

writing to defaults/node-sensName.m2d

writing to defaults/node-sensState.m2d

writing to defaults/node-sensString.m2d

writing to defaults/node-sensValue.m2d

writing to defaults/node-sensValueRaw.m2d

writing to defaults/node-sensID.m2d

writing to defaults/node-sensUnit.m2d

writing to defaults/node-sensIndex.m2d

writing to sensTable.c

writing to sensTable_data_get.h

writing to sensTable_data_get.c

| |   +-> Processing nonindex sensName

| |   +-> Processing nonindex sensState

| |   +-> Processing nonindex sensString

| |   +-> Processing nonindex sensValue

| |   +-> Processing nonindex sensValueRaw

| |   +-> Processing nonindex sensID

| |   +-> Processing nonindex sensUnit

writing to sensTable_data_set.h

writing to sensTable_data_set.c

writing to sensTable_oids.h

writing to sensTable_enums.h

writing to sensTable_interface.h

writing to sensTable_interface.c

writing to sensTable_data_access.h

writing to sensTable_data_access.c

writing to sensTable-README-FIRST.txt

writing to sensTable-README-sensTable.txt

writing to sensTable_Makefile

writing to sensTable_subagent.c

running indent on sensTable_data_access.h

running indent on sensTable_subagent.c

running indent on sensTable_interface.c

running indent on sensTable_enums.h

running indent on sensTable_data_access.c

running indent on sensTable_interface.h

running indent on sensTable_data_set.c

running indent on sensTable_data_get.h

running indent on sensTable.h

running indent on sensTable.c

running indent on sensTable_data_set.h

running indent on sensTable_data_get.c

running indent on sensTable_oids.h

Результатом диалога с mib2c будет сгенерированный этой утилитой набор файлов, среди которых в первую очередь заслуживают внимания sensTable-README-FIRST.txt и sensTable-README-sensTable.txt.

Файл sensTable-README-FIRST.txt содержит указания о том, какие последующие действия следует предпринять, а из файла sensTable-README-sensTable.txt можно получить подробные сведения о тех шагах, которые были проделаны на этапе генерации шаблона.

В частности, следуя указаниям из файла sensTable-README-FIRST.txt, получим TODO-лист необходимых, по мнению mib2c, работ, которые нужно выполнить для получения работоспособного Агента:

$ grep -n "TODO:" *.[ch] | sed 's/\([^ ]*\)\(.*\)TODO\(.*\)/\3 (\1)/' | sort –n

:099:x: ******************************** (sensTable.h:205:)

:100:r: Review all context structures (sensTable.h:62:)

:101:o: |-> Review sensTable registration context. (sensTable.h:65:)

:110:r: |-> Review sensTable data context structure. (sensTable.h:71:)

:120:r: |-> Review sensTable mib index. (sensTable.h:121:)

:121:r: |   |-> Review sensTable max index length. (sensTable.h:135:)

:130:o: |-> Review sensTable Row request (rowreq) context. (sensTable.h:143:)

:131:o: |   |-> Add useful data to sensTable rowreq context. (sensTable.h:164:)

:180:o: Review sensTable cache timeout. (sensTable_data_access.h:40:)

:199:x: *********************************(sensTable.h:206:)

:200:r: Implement sensTable data context functions. (sensTable_data_get.c:41:)

:210:o: |-> Perform extra sensTable rowreq initialization. (eg DEFVALS) (sensTable.c:134:)

:211:o: |-> Perform extra sensTable rowreq cleanup. (sensTable.c:151:)

:230:M: Implement sensTable get routines. (sensTable_data_get.c:18:)

:231:o: |-> Extract the current value of the sensID data. (sensTable_data_get.c:476:)

:231:o: |-> Extract the current value of the sensName data. (sensTable_data_get.c:167:)

:231:o: |-> Extract the current value of the sensState data. (sensTable_data_get.c:235:)

:231:o: |-> Extract the current value of the sensString data. (sensTable_data_get.c:303:)

:231:o: |-> Extract the current value of the sensUnit data. (sensTable_data_get.c:528:)

:231:o: |-> Extract the current value of the sensValue data. (sensTable_data_get.c:371:)

:231:o: |-> Extract the current value of the sensValueRaw data. (sensTable_data_get.c:424:)

:240:M: Implement sensTable mapping routines (if any). (sensTable_data_get.c:19:)

:299:x: ******************************** (sensTable.h:207:)

:300:o: Perform sensTable one-time module initialization. (sensTable.c:43:)

:301:o: Perform sensTable one-time table initialization. (sensTable.c:78:)

:302:o: |->Initialize sensTable user context (sensTable.c:82:)

:303:o: Initialize sensTable data. (sensTable_data_access.c:57:)

:345:A: Set up sensTable cache properties. (sensTable_data_access.c:132:)

:350:M: Implement sensTable data load (sensTable_data_access.c:173:)

:351:M: |-> Load/update data in the sensTable container. (sensTable_data_access.c:244:)

:352:M: |   |-> set indexes in new sensTable rowreq context. (sensTable_data_access.c:280:)

:352:r: |   |-> populate sensTable data context. (sensTable_data_access.c:299:)

:380:M: Free sensTable container data. (sensTable_data_access.c:419:)

:390:o: Prepare row for request. (sensTable_data_access.c:444:)

:399:x: ******************************** (sensTable.h:208:)

:499:x: ******************************** (sensTable.h:209:)

:510:o: Perform sensTable pre-request actions. (sensTable.c:168:)

:511:o: Perform sensTable post-request actions. (sensTable.c:194:)

Следует подчеркнуть, что данный документ никоим образом не подменяет собой официальной документации на пакет Net-SNMP, а предполагает и настоятельно рекомендует предварительное с ней ознакомление.

С общим описанием процесса написания Агента можно ознакомиться здесь http://www.net-snmp.org/wiki/index.php/TUT:Writing_a_Subagent.

Итак, у нас теперь есть шаблон Агента и перечень необходимых работ.

Структура данных

В реальных условиях температурные датчики (могут быть) подключены к Ethernet посредством шлюза Modbus/TCP. Показания температурных датчиков запрашивает и получает отдельный процесс, который сохраняет полученные значения в базе данных. Будем считать, что текущие показания записываются в файл в формате csv и с заданной периодичностью обновляются.

Структура записи csv-файла отображает поля таблицы sensTable:

$ snmptranslate -m /usr/share/snmp/mibs/SENSOR-MIB.mib.txt -Tp -IR sensTable

+--sensTable(3)

   |

   +--sensEntry(1)

      |  Index: sensIndex

      |

      +-- ---- INTEGER   sensIndex(1)

      |        Textual Convention: PositiveInteger

      |        Range: 1..2147483647

      +-- -R-- String    sensName(2)

      |        Textual Convention: SensorName

      |        Size: 0..15

      +-- -R-- EnumVal   sensState(4)

      |        Textual Convention: SensorState

      |        Values: invalid(0), normal(1),

               alarmstate(2), alarm(3)

      +-- -R-- String    sensString(5)

      |        Textual Convention: SensorString

      |        Size: 0..10

      +-- -R-- INTEGER   sensValue(6)

      |        Textual Convention: SensorValue

      +-- -R-- INTEGER   sensValueRaw(7)

      |        Textual Convention: SensorValue

      +-- -R-- INTEGER   sensID(8)

      |        Textual Convention: SensorID

      |        Range: 0..65535

      +-- -R-- EnumVal   sensUnit(9)

               Textual Convention: UnitType

               Values: celsius(0), fahrenheit(1),

               kelvin(2), percent(3), volt(4),

               miliamper(5), nounit(6), pulse(7), switch(8)

Например, строка csv-файла:

1,"Sensor 241",1,"22.6",226,0,14991,0

содержит следующие данные:

sensIndex – 1;

sensName – Sensor 241;

sensState – 1 (normal);

sensString – 22.6;

sensValue – 226;

sensValueRaw – 0;

sensID – 14991;

sensUnit – 0 (celsius).

Предположим, что в нашем распоряжении есть шесть датчиков и файл sensor.csv, хранящий их текущие значения:

1,"Sensor 241",1,"22.6",226,0,14991,0

2,"Sensor 242",1,"11.4",114,0,14992,0

3,"Sensor 243",1,"2.2",22,0,14993,0

4,"Sensor 244",1,"21.5",215,0,14994,0

5,"Sensor 245",1,"20.6",206,0,14995,0

6,"Sensor 246",1,"24.0",240,0,14996,0

Далее необходимо обеспечить периодическое обновление данных в файле sensor.csv. Для отладки Агента нет необходимости использовать аппаратные датчики и шлюз. Их вполне можно заменить программной симуляцией. Другими словами, необходима программа, которая будет имитировать выдачу текущих значений датчиков путем генерации значений температур в заданном диапазоне и записывать эти значения в файл sensor.csv.

Для решения этой задачи можно использовать следующий скрипт:

#!/bin/bash

CSVPATH="/home/snmp/sensTable/"

CSVFILE=${CSVPATH}"sensor.csv"

SENSOR[1]="1,\"Sensor 241\",1,\"24.5\",245,0,14991,0"

SENSOR[2]="2,\"Sensor 242\",1,\"36.6\",366,0,14992,0"

SENSOR[3]="3,\"Sensor 243\",1,\"12.2\",122,0,14993,0"

SENSOR[4]="4,\"Sensor 244\",1,\"21.5\",215,0,14994,0"

SENSOR[5]="5,\"Sensor 245\",1,\"20.6\",206,0,14995,0"

SENSOR[6]="6,\"Sensor 246\",1,\"31.7\",317,0,14996,0"

if [ ! -f ${CSVFILE} ]

then

  for index in 1 2 3 4 5 6    # Six lines.

  do

    printf "%s\n" "${SENSOR[index]}" >> ${CSVFILE}

  done

else

cat $CSVFILE | awk -F"," '

BEGIN {

    srand(systime())

    #        [min,max] values

    SENS[1] = "21,34"  # 21.0 .. 34.9

    SENS[2] = "10,15"  # 10.0 .. 15.9

    SENS[3] = "1,6"    # 1.0 .. 6.9

    SENS[4] = "0,0"    # do nothing

    SENS[5] = "0,0"    # do nothing

    SENS[6] = "23,29"  # 23.0 .. 29.9

}

function randint(n) { return int(n * rand()) }

{

   split(SENS[NR], temp, ",")

   min = temp[1]

   max = temp[2]

   if (min == max) {

      SENS[NR] = $0

   } else {

        grad = min + randint(max-min)

        fraction = randint(9)

        split($0, sens, ",")

        gsub("\"", "", sens[2])

        SENS[NR] = sprintf("%s,\"%s\",%s,\"%d.%1d\",%d%1d,%s,%s,%s",

                   sens[1],sens[2],sens[3],

                   grad,fraction,grad,fraction,

                   sens[6],sens[7],sens[8])

   }

}

END {

    for (x in SENS) {

      printf "%s\n", SENS[x] | "sort > '$CSVFILE'"

    }

}'

fi

Текст скрипта следует поместить в файл sensor.sh. Вариантов реализации данного скрипта может быть множество, поэтому простор для творчества оставлен открытым.

Периодичность обновления (цикл опроса датчиков) можно обеспечить при помощи cron:

$ crontab -e

В файл добавим следующие строки:

SHELL=/bin/bash

*/10 * * * * /home/snmp/sensTable/sensor.sh > /dev/null 2>&1

В результате программа sensor.sh будет выполняться каждые 10 минут, что соотвествует длительности реального цикла опроса температурных датчиков.

Задача Агента состоит в том, чтобы по запросу прочитать этот csv-файл и выдать запрашиваемые менеджером данные.

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

Теперь необходимо расширить сгенерированный программой mib2c код шаблона Агента для чтения данных из файла sensor.csv. Для этого потребуется написать несколько фрагментов кода на языке С и добавить их в файл sensTable_data_access.c. Полный текст этого файла находится в архиве, который можно скачать по адресу: www.samag.ru раздел «Исходный код».

Требуемые изменения были сохранены в файле patchfile.patch:

$ diff sensTable_data_access.c.orig sensTable_data_access.c > patchfile.patch

где sensTable_data_access.c.orig – исходный файл, сгенерированный программой mib2c, а sensTable_data_access.c – модифицированная версия.

Файл patchfile.patch можно использовать для получения обновленной версии файла sensTable_data_access.c:

$ patch sensTable_data_access.c.orig -i patchfile.patch -o sensTable_data_access.c

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

$ make -f sensTable_Makefile

 В файле sensTable_Makefile есть две заслуживающие особого внимания команды:

  •  net-snmp-config --base-cflags;
  •  net-snmp-config --agent-libs

которые выдают полезную для дальнейшего совершенствования Агента информацию об используемых библиотеках и файлах заголовков:

$ net-snmp-config --base-cflags

-DNETSNMP_ENABLE_IPV6 -march=i586 -mtune=i686

-fmessage-length=0 -O2 -Wall

-D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables

-fasynchronous-unwind-tables -g -fno-strict-aliasing

-fstack-protector-all -Ulinux

-Dlinux=linux -I/usr/include/rpm -D_REENTRANT -D_GNU_SOURCE

-DPERL_USE_SAFE_PUTENV

-DDEBUGGING -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE

-D_FILE_OFFSET_BITS=64

-I/usr/lib/perl5/5.10.0/i586-linux-thread-multi/CORE

-I/usr/include

$ net-snmp-config --agent-libs

-L/usr/lib -lnetsnmpagent -lnetsnmphelpers -lnetsnmpmibs

-lnetsnmp -lz -Wl,-E -Wl,

-rpath,/usr/lib/perl5/5.10.0/i586-linux-thread-multi/CORE

Перечень динамических библиотек, используемых «свежеиспеченным» Агентом:

$ ldd sensTable

linux-gate.so.1 =>  (0xffffe000)

libnetsnmpagent.so.15 => /usr/lib/libnetsnmpagent.so.15 (0xb7f75000)

libnetsnmphelpers.so.15 => /usr/lib/libnetsnmphelpers.so.15 (0xb7f4b000)

libnetsnmpmibs.so.15 => /usr/lib/libnetsnmpmibs.so.15 (0xb7d7d000)

libnetsnmp.so.15 => /usr/lib/libnetsnmp.so.15 (0xb7cb3000)

libz.so.1 => /lib/libz.so.1 (0xb7c9d000)

libc.so.6 => /lib/libc.so.6 (0xb7b41000)

libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0xb79da000)

libwrap.so.0 => /lib/libwrap.so.0 (0xb79cf000)

libperl.so => /usr/lib/perl5/5.10.0/i586-linux-thread-multi/CORE/libperl.so (0xb775b000)

libnsl.so.1 => /lib/libnsl.so.1 (0xb7741000)

libdl.so.2 => /lib/libdl.so.2 (0xb773c000)

libm.so.6 => /lib/libm.so.6 (0xb7713000)

libcrypt.so.1 => /lib/libcrypt.so.1 (0xb76dc000)

libutil.so.1 => /lib/libutil.so.1 (0xb76d8000)

libpthread.so.0 => /lib/libpthread.so.0 (0xb76be000)

librpm-4.4.so => /usr/lib/librpm-4.4.so (0xb7627000)

librpmio-4.4.so => /usr/lib/librpmio-4.4.so (0xb7545000)

libpopt.so.0 => /lib/libpopt.so.0 (0xb753c000)

libsensors.so.3 => /usr/lib/libsensors.so.3 (0xb7504000)

/lib/ld-linux.so.2 (0xb7fcc000)

librpmdb-4.4.so => /usr/lib/librpmdb-4.4.so (0xb73fb000)

librt.so.1 => /lib/librt.so.1 (0xb73f1000)

libbz2.so.1 => /lib/libbz2.so.1 (0xb73e1000)

libselinux.so.1 => /lib/libselinux.so.1 (0xb73c4000)

libsysfs.so.2 => /lib/libsysfs.so.2 (0xb73b7000)

Конфигурирование и запуск Агента

Оригинальная документация на пакет Net-SNMP гласит:

Enable AgentX in your Net-SNMP (UCD-SNMP) daemon

configuration (in SuSE it is /etc/snmp/snmpd.conf).

There should be line "master agentx". Restart snmpd.

После добавления строки «master agentx» в файл /etc/snmp/snmpd.conf остается только перезапустить snmpd:

# service snmpd start

Проверим результат запуска:

# ps fax | grep snmpd | grep -v grep

18959 ?         SNl    0:21 /usr/sbin/snmpd -r -A -LF d /var/log/net-snmpd.log -p /var/run/snmpd.pid

Запуск Агента в режиме отладки:

# cd /home/snmp/sensTable

# ./sensTable -f -DsensTable,verbose:sensTable,internal:sensTable

Запуск Агента в нормальном режиме:

# ./sensTable -f &

Проверим результат запуска:

# ps fax | grep sensTable | grep -v grep

10033 ?         S        0:02 ./sensTable -f

Запросим у Агента информацию:

# snmpwalk -v2c localhost -c public .1.3.6.1.4.1.21796.3.3.3

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.1 = STRING: "Sensor 241"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.2 = STRING: "Sensor 242"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.3 = STRING: "Sensor 243"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.4 = STRING: "Sensor 244"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.5 = STRING: "Sensor 245"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.6 = STRING: "Sensor 246"

SNMPv2-SMI::enterprises.21796.3.3.3.1.4.1 = INTEGER: 1

SNMPv2-SMI::enterprises.21796.3.3.3.1.4.2 = INTEGER: 1

SNMPv2-SMI::enterprises.21796.3.3.3.1.4.3 = INTEGER: 1

SNMPv2-SMI::enterprises.21796.3.3.3.1.4.4 = INTEGER: 1

SNMPv2-SMI::enterprises.21796.3.3.3.1.4.5 = INTEGER: 1

SNMPv2-SMI::enterprises.21796.3.3.3.1.4.6 = INTEGER: 1

SNMPv2-SMI::enterprises.21796.3.3.3.1.5.1 = STRING: "24.5"

SNMPv2-SMI::enterprises.21796.3.3.3.1.5.2 = STRING: "36.6"

SNMPv2-SMI::enterprises.21796.3.3.3.1.5.3 = STRING: "12.2"

SNMPv2-SMI::enterprises.21796.3.3.3.1.5.4 = STRING: "21.5"

SNMPv2-SMI::enterprises.21796.3.3.3.1.5.5 = STRING: "20.6"

SNMPv2-SMI::enterprises.21796.3.3.3.1.5.6 = STRING: "31.7"

SNMPv2-SMI::enterprises.21796.3.3.3.1.6.1 = INTEGER: 245

SNMPv2-SMI::enterprises.21796.3.3.3.1.6.2 = INTEGER: 366

SNMPv2-SMI::enterprises.21796.3.3.3.1.6.3 = INTEGER: 122

SNMPv2-SMI::enterprises.21796.3.3.3.1.6.4 = INTEGER: 215

SNMPv2-SMI::enterprises.21796.3.3.3.1.6.5 = INTEGER: 206

SNMPv2-SMI::enterprises.21796.3.3.3.1.6.6 = INTEGER: 317

SNMPv2-SMI::enterprises.21796.3.3.3.1.7.1 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.7.2 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.7.3 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.7.4 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.7.5 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.7.6 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.8.1 = INTEGER: 14991

SNMPv2-SMI::enterprises.21796.3.3.3.1.8.2 = INTEGER: 14992

SNMPv2-SMI::enterprises.21796.3.3.3.1.8.3 = INTEGER: 14993

SNMPv2-SMI::enterprises.21796.3.3.3.1.8.4 = INTEGER: 14994

SNMPv2-SMI::enterprises.21796.3.3.3.1.8.5 = INTEGER: 14995

SNMPv2-SMI::enterprises.21796.3.3.3.1.8.6 = INTEGER: 14996

SNMPv2-SMI::enterprises.21796.3.3.3.1.9.1 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.9.2 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.9.3 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.9.4 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.9.5 = INTEGER: 0

SNMPv2-SMI::enterprises.21796.3.3.3.1.9.6 = INTEGER: 0

# snmpwalk -v2c localhost -c public .1.3.6.1.4.1.21796.3.3.3.1.2

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.1 = STRING: "Sensor 241"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.2 = STRING: "Sensor 242"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.3 = STRING: "Sensor 243"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.4 = STRING: "Sensor 244"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.5 = STRING: "Sensor 245"

SNMPv2-SMI::enterprises.21796.3.3.3.1.2.6 = STRING: "Sensor 246"

# snmpwalk -v2c localhost -c public .1.3.6.1.4.1.21796.3.3.3.1.6.1

SNMPv2-SMI::enterprises.21796.3.3.3.1.6.1 = INTEGER: 245

Разумеется, что значение OID в команде snmpwalk от .1.3.6.1.4.1.21796.3.3.3. специфично исключительно для используемого здесь MIB-файла.

Конфигурирование Nagios

Процесс установки и конфигурирования Nagios (http://www.nagios.org) подробно рассматривался во многих публикациях, поэтому здесь предполагается, что Nagios (включая Nagios check_snmp plugin) уже установлен в системе, и нам остается только внести необходимые изменения в его конфигурационные файлы.

В файле /etc/nagios/nagios.cfg необходимо раскоментировать строку:

cfg_file=/etc/nagios/objects/switch.cfg

и внести необходимые изменения. Содержимое файла /etc/nagios/objects/switch.cfg:

define host{

       use             generic-switch

       host_name       poseidon      

       alias           Poseidon 3262 

       address         127.0.0.1     

       hostgroups      switches      

       }

define hostgroup{

       hostgroup_name  switches              

       alias           Network Switches      

       }

define service{

       use                     generic-service

       host_name               poseidon

       service_description     Sensor_1

       check_command           check_snmp!-C public -o .1.3.6.1.4.1.21796.3.3.3.1.5.1

       }

define service{

       use                     generic-service

       host_name               poseidon

       service_description     Sensor_2

       check_command           check_snmp!-C public -o .1.3.6.1.4.1.21796.3.3.3.1.5.2

       }

define service{

       use                     generic-service

       host_name               poseidon

       service_description     Sensor_3

       check_command           check_snmp!-C public -o .1.3.6.1.4.1.21796.3.3.3.1.5.3

       }

define service{

       use                     generic-service

       host_name               poseidon

       service_description     Sensor_4

       check_command           check_snmp!-C public -o .1.3.6.1.4.1.21796.3.3.3.1.5.4

       }

define service{

       use                     generic-service

       host_name               poseidon

       service_description     Sensor_5

       check_command           check_snmp!-C public -o .1.3.6.1.4.1.21796.3.3.3.1.5.5

       }

define service{

       use                     generic-service

       host_name               poseidon

       service_description     Sensor_6

       check_command           check_snmp!-C public -o .1.3.6.1.4.1.21796.3.3.3.1.5.6

       }

Перезапустим Nagios, кликнем по ссылке Service Detail и посмотрим на результаты наших усилий (см. рисунок).

Результаты наших усилий

Результаты наших усилий

В столбце Status Information можно наблюдать значения температур, полученные от каждого датчика.

В основе системы мониторинга лежит элементарная схема взаимодействия агента и менеджера. На основе этой схемы могут быть построены системы практически любой сложности с большим количеством агентов и менеджеров разного типа.

Пользуясь API, предоставляемым Net-SNMP, разработчик может создавать законченную систему мониторинга, которая может контролировать специфическое оборудование.

Агент в SNMP – обрабатывающий элемент, который обеспечивает менеджерам, входящим в систему мониторинга, доступ к значениям переменных MIB и тем самым дает им возможность реализовать функции по наблюдению за устройствами.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru