Мониторинг состояния температурных датчиков с помощью протокола 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, с

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

02.12.2013г.
Просмотров: 3091
Комментарии: 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