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

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

Интеграция Open Source-решений  

Open Source в облачной среде

Облачные решения становятся всё более популярными в мире. Компании стремятся использовать их для

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

Автоматизация  

Нейросеть вам в руки! Как использовать ИИ для автоматизации задач

Использование ИИ для автоматизации задач помогает компании получить конкурентное преимущество, поскольку объединение

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

Рынок труда  

Специалист по этическому ИИ, инженер по квантовым вычислениям или аналитик по метавселенной?

Новые тенденции в развитии ИТ могут привести к возникновению новых специальностей в

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

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

Учитесь убеждать и побеждать

Издательство «БХВ», как всегда, порадовало своих читателей хорошими книжными новинками. Кроме популярных

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

Сетевая инфраструктура  

Как удаленная работа меняет подход к сетевой инфраструктуре?

С увеличением числа сотрудников, работающих из дома, организации сталкиваются с необходимостью создания

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

Мониторинг  

Какой мониторинг нужен сегодня?

По мнению экспертов ГК InfoWatch, действия сотрудников – самая распространенная причина инцидентов

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

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

Руководство для тех, кто увлечен ИИ, программированием. И дизайном

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

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

Мобильные приложения  

Искусственный интеллект в мобильных приложениях: возможности и перспективы

Обзор современных применений ИИ в мобильных приложениях, анализ перспектив развития этой технологии,

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

ИТ-образование  

Как сделать ИТ-образование эффективным?

Эксперты ИТ-отрасли отвечают на вопросы «СА». Обсуждаем ключевые аспекты для улучшения образовательных

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

Work-life balance  

Как айтишнику найти баланс между работой и личной жизнью?

Обсуждаем инструменты для эффективного управления временем, снижения уровня стресса и достижения гармонии. На

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

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

Всё самое нужное – под одной обложкой

Отличительная черта книжных новинок, выпущенных недавно издательством «БХВ» – это их универсальность. Не просто

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

ИТ-инфраструктура  

Системы мониторинга ИТ-инфраструктуры-2025

Без мониторинга ИТ-инфраструктуры не обходится ни одна компания, хотя бы потому, что

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

Открытое ПО  

Безопасность Open Source: рискуем или контролируем?

Компания «Кросс технолоджис» изучила, как используется ПО с открытым кодом в компаниях

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

Работа с нейросетью  

Скажи, есть ли у тебя AI, и я скажу, кто ты

Недавно сервис по поиску работы SuperJob выяснил, что каждый второй россиянин уже

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Друзья сайта  

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