Инсталляция и настройка Net-SNMP на AIX5L 1


Все, кто пытался мониторить серверы под AIX наверняка столкнулись с тем,
что поставляемый в составе AIX агент не всегда отдает все то, что хотелось бы увидеть,
особенно это относится к LPAR-ам с uncapped CPU capacity

Например, лично мне вообще непонятно, для чего на LPAR мониторить загрузку всех
виртуальных процессоров. А если их у меня 64? А если при этом раздел стартует всего
с 6.4 логических процессоров в Uncapped режиме и при этом вес у раздела выставлен
в максимум? Что в таком случае даст мне мониторинг посредством стандартного snmp
агента? Ничего.
    Однажды я столкнулся с необходимостью отмониторить все эксплуатируемые мной *nix,
среди которых были Linux, UnixWare, HP-UX, и AIX, а так же некоторые параметры инстансов
Oracle. Если общую загрузку процессоров на железных хостах можно было получить с помощью
MRTG, тупо вычислив среднее, то нужную статистику от оракла, а так-же вменяемую статистику
по LPAR-ам стандартным агентом оказалось невозможно или слишком сложно и неудобно.
К примеру MRTG позволяет вообще невероятные вещи типа простейших формул, оперирующих
OID-ами и запуска скриптов через ssh с обработкой результатов, но у MRTG есть много разных
недостатков при куче его достоинств.
Разбираясь с snmpd на Linux я познакомился с продуктом Net-SNMP, который позволял
делать почти невозможное.
Я не буду второй раз делать работу за авторов и других участников проекта Net-SNMP по
написанию Tutorials и FAQs, замечу только, что они есть в нужном объеме на
http://www.net-snmp.org/
Упомяну кратко лишь о фичах, которые мне показались полезными и которые я использовал
для выполнения своих задач, а остальное, с помощью документации, каждый сможет сделать сам.
Кроме того, пройдусь по тонкостям установки пакета на AIX и опишу некоторые проблемы, с
которыми я сам столкнулся.

1. Инсталляция.  В общем случае и проще всего Net-SNMP ставится в бинарниках пакетом,
который можно стянуть с http://bullfreeware.com — там лежит версия 5.0.3.
В данном случае объяснять нечего: качаем, извлекаем из exe файла bff и устанавливаем
с помощью smit.
Первым делом я так и поступил, однако, почему-то агент из этого пакета отдавал мне лишь
малую часть метрик, среди которых не было HOST-RESOURCES, то есть загрузки процессоров,
файловых систем и др и пр.
    Пришлось заняться сборкой более свежей версии Net-SNMP из sources, для чего потребовалось:
    а) Загрузить исходники с http://www.net-snmp.org/download.html
) Загруженный файл я развернул в /tmp/1/
       # mkdir /tmp/1; cd /tmp/1
       # /usr/local/bin/tar xvfz /net/distr/net-snmp/net-snmp-5.4.2.1.tar.gz
    в) Установить из AIX Toolbox for Linux пакеты gcc, libgcc и gnu sed, а если у вас AIX 5.1 и старше,
то нужно еще поставить и gnu grep http://www.net-snmp.org/docs/README.aix.html
       Я пользовался rpm:
       # rpm -i sed-4.1.1-1.aix5.1.ppc.rpm
       # rpm -i gcc-4.0.0-1.aix5.3.ppc.rpm
       # rpm -i libgcc-4.0.0-1.aix5.3.ppc.rpm
    г) Пропишем пути, чтобы GNU sed и grep вызывались откуда надо:
       # PATH=/usr/linux/bin:$PATH; export PATH
    д) Приступим к сборке прям как доктор прописал:
       # cd 5.4.2.1
       # ./configure —enable-as-needed —without-kmem-usage
       # make
       # make test
       # make install
       У меня проблем при сборке по инструкции, и после установки всего, что я написал,
не возникало.  На этом инсталляцию можно считать законченой. Все бинарники
разлеглись по /usr/local/…

2. Настройка. Для настройки без особых изысков можно воспользоваться мастером
или взять snmpd.conf.example и расковырять его.
Я, честно говоря, не вспомню уже откуда я взял свой первый документированный snmpd.conf.
В любом случае, все что не сделает визард, можно будет дописать руками.
Запускаем визарда:

# snmpconf

и отвечаем на вопросы. В результате формируется файл snmpd.conf который можно подправить по желанию и положить в /usr/local/share/snmp/snmpd.conf
Чтобы не теряться я еще и линк сделал на этот файл в /etc/snmp/

# mkdir /etc/snmp; ln -s /usr/local/share/snmp/snmpd.conf /etc/snmp/snmpd.conf

Теперь нам нужно остановить родного агента:
# stopsrc -s snmpmibd
# stopsrc -s snmpd
И запустить Net-SNMP агента:
# /usr/local/sbin/snmpd

Пока вот так, а потом по желанию можно разложить скрипт в /etc/rc.d
или создать сервис с помощью mkssys

Что в extended у net-snmp можно разглядеть с помощью snmpwalk:

snmpwalk -v 2c -c public localhost UCD-SNMP-MIB::ucdavis

Какие фичи из snmpd.conf мне пригодились:
    а) disk — вместо прочесывания дерева entrprise в поисках нужной файловой системы для мониторинга % Used можно прописать
       disk /u01 100000 80%        например, после чего в UCD-SNMP-MIB::dskPath будут нужные filesystems и в UCD-SNMP-MIB::dskAvail и в UCD-SNMP-MIB::dskPercent нужные нам значения.

    б) load — позволяет получать среднюю загрузку процессора за 1, 5, 15 минут. Может быть полезно для алертов всяких от систем мониторинга.   
       load 90 70 40     то есть это пороги для 1, 5, 15 минутных интервалов
    в) exec — позволяет с помощью кода завершения запускаемой программы (шеллб перл) заполнять метрику.
       К сожалению, почему-то авторы в версии 5.4 объявили опцию deprecated и в 5.4.2 она уже не работает. Предлагается пользоваться вместо exec extend — ниже опишу и его.
       Пример:
       exec .1.3.6.1.4.1.2021.53 sarstats /opt/scripts/snmp/sarstats 4
       скрипт парсит вывод sar и значение из (в данном случае) 4 колонки отдает в качестве кода возврата
       Значение кода возврата можно (было) читать из .1.3.6.1.4.1.2021.53.100.1
    г) extend — делает то же самое, что и exec, только выдает более развернутый результат. OID можно не задавать, потому как в 1 стартовый OID NET-SNMP может сложить несколько метрик, закодировав названия в адреса OID.
       extend .1.3.6.1.4.1.2021.52 wio /opt/scripts/snmp/wio
       extend .1.3.6.1.4.1.2021.52 idle /opt/scripts/snmp/idle
       extend .1.3.6.1.4.1.2021.52 Entitled_capacity_percent /opt/scripts/snmp/sarstats 7
       extend wio /opt/scripts/snmp/wio

       Как он это делает и где искать результат?
       # snmpwalk -v 2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendObjects — это если не указывали OID
       ———————————-
       snmpwalk -v 2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendObjects
       NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 24
       NET-SNMP-EXTEND-MIB::nsExtendCommand."wio" = STRING: /opt/scripts/snmp/wio
       NET-SNMP-EXTEND-MIB::nsExtendArgs."wio" = STRING:
       NET-SNMP-EXTEND-MIB::nsExtendInput."wio" = STRING:
       NET-SNMP-EXTEND-MIB::nsExtendCacheTime."wio" = INTEGER: 5
       NET-SNMP-EXTEND-MIB::nsExtendExecType."wio" = INTEGER: exec(1)
       NET-SNMP-EXTEND-MIB::nsExtendRunType."wio" = INTEGER: run-on-read(1)
       NET-SNMP-EXTEND-MIB::nsExtendStorage."wio" = INTEGER: permanent(4)
           NET-SNMP-EXTEND-MIB::nsExtendStatus."wio" = INTEGER: active(1)
       NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."wio" = STRING: gY
       NET-SNMP-EXTEND-MIB::nsExtendOutputFull."wio" = STRING: gY
       NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."wio" = INTEGER: 1
       NET-SNMP-EXTEND-MIB::nsExtendResult."wio" = INTEGER: 0
       NET-SNMP-EXTEND-MIB::nsExtendOutLine."wio".1 = STRING: gY
       ———————————-      
       То есть, чтобы запросить результат определенной метрики, можно сделать так:

       # snmpget -v 2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendResult."wio"
       NET-SNMP-EXTEND-MIB::nsExtendResult."wio" = INTEGER: 0

       К сожалению, прочим системам мониторинга не объяснить, что нужный инстанс можно задавать словами…

       # snmptranslate  -Td NET-SNMP-EXTEND-MIB::nsExtendResult."wio"
       NET-SNMP-EXTEND-MIB::nsExtendResult."wio"
           nsExtendResult OBJECT-TYPE
         — FROM       NET-SNMP-EXTEND-MIB
         SYNTAX        Integer32
         MAX-ACCESS    read-only
         STATUS        current
         DESCRIPTION   "The return value of the command."
       ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) netSnmp(8072) netSnmpObjects(1) nsExtensions(3) nsExtendObjects(2) nsExtendOutput1Table(3) nsExtendOutput1Entry(1) nsExtendResult(4) 3 119 105 111 }

       # snmpget -v 2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendResult.3.119.105.111
       NET-SNMP-EXTEND-MIB::nsExtendResult."wio" = INTEGER: 0
      
       Посмотрим как разложились метрики, прописанные там,где мне хотелось:

       # snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.52
       UCD-SNMP-MIB::ucdavis.52.1.0 = INTEGER: 2
       UCD-SNMP-MIB::ucdavis.52.2.1.2.3.119.105.111 = STRING: "/opt/scripts/snmp/wio"
       UCD-SNMP-MIB::ucdavis.52.2.1.2.4.105.100.108.101 = STRING: "/opt/scripts/snmp/idle"
       UCD-SNMP-MIB::ucdavis.52.2.1.2.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = STRING: "/opt/scripts/snmp/sarstats"
           UCD-SNMP-MIB::ucdavis.52.2.1.3.3.119.105.111 = ""
       UCD-SNMP-MIB::ucdavis.52.2.1.3.4.105.100.108.101 = ""
       UCD-SNMP-MIB::ucdavis.52.2.1.3.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = STRING: "7"
       UCD-SNMP-MIB::ucdavis.52.2.1.4.3.119.105.111 = ""
       UCD-SNMP-MIB::ucdavis.52.2.1.4.4.105.100.108.101 = ""
       UCD-SNMP-MIB::ucdavis.52.2.1.4.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = ""
       UCD-SNMP-MIB::ucdavis.52.2.1.5.3.119.105.111 = INTEGER: 5
       UCD-SNMP-MIB::ucdavis.52.2.1.5.4.105.100.108.101 = INTEGER: 5
       UCD-SNMP-MIB::ucdavis.52.2.1.5.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = INTEGER: 5
       UCD-SNMP-MIB::ucdavis.52.2.1.6.3.119.105.111 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.2.1.6.4.105.100.108.101 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.2.1.6.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.2.1.7.3.119.105.111 = INTEGER: 1
           UCD-SNMP-MIB::ucdavis.52.2.1.7.4.105.100.108.101 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.2.1.7.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.2.1.20.3.119.105.111 = INTEGER: 4
       UCD-SNMP-MIB::ucdavis.52.2.1.20.4.105.100.108.101 = INTEGER: 4
       UCD-SNMP-MIB::ucdavis.52.2.1.20.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = INTEGER: 4
       UCD-SNMP-MIB::ucdavis.52.2.1.21.3.119.105.111 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.2.1.21.4.105.100.108.101 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.2.1.21.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.3.1.1.3.119.105.111 = STRING: "gY"
       UCD-SNMP-MIB::ucdavis.52.3.1.1.4.105.100.108.101 = ""
       UCD-SNMP-MIB::ucdavis.52.3.1.1.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = ""
       UCD-SNMP-MIB::ucdavis.52.3.1.2.3.119.105.111 = STRING: "gY"
       UCD-SNMP-MIB::ucdavis.52.3.1.2.4.105.100.108.101 = ""
       UCD-SNMP-MIB::ucdavis.52.3.1.2.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = ""
       UCD-SNMP-MIB::ucdavis.52.3.1.3.3.119.105.111 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.3.1.3.4.105.100.108.101 = INTEGER: 1
       UCD-SNMP-MIB::ucdavis.52.3.1.3.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = INTEGER: 1
           UCD-SNMP-MIB::ucdavis.52.3.1.4.3.119.105.111 = INTEGER: 0
       UCD-SNMP-MIB::ucdavis.52.3.1.4.4.105.100.108.101 = INTEGER: 98
       UCD-SNMP-MIB::ucdavis.52.3.1.4.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 = INTEGER: 0
       UCD-SNMP-MIB::ucdavis.52.4.1.2.3.119.105.111.1 = STRING: "gY"
       UCD-SNMP-MIB::ucdavis.52.4.1.2.4.105.100.108.101.1 = ""
       UCD-SNMP-MIB::ucdavis.52.4.1.2.25.69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116.1 = ""
      
       Что такое 119.105.111 ,
       105.100.108.101
       и 69.110.116.105.116.108.101.100.95.99.97.112.97.99.105.116.121.95.112.101.114.99.101.110.116 ?
       А это авторы взяли и посимвольно перекодировали названия метрик в числа по ASCII таблице.
       Красиво конечно, но брать именно оттуда, куда я положил, мне нравилось больше.
                 
3. Проблемы. Проблема была одна и довольно специфичная: при snmpwalk по всему дереву агент повисал и его приходилось перезагружать.
Позже я выяснил, на чем он виснет: пришлось запустить агента с выводом в лог дебаг информации

# /usr/local/sbin/snmpd -DALL

Оказалось, что один из сетевых принтеров, которые я когда-то конфигурил, стал недоступен и команда lpstat -v повисала, о чем и имелась запись в /var/log/snmpd.log
Коды возврата ограничены 256 и только целые, а потому и метрики не могут быть дробными и больше, потому приходится мудрить.
Остальные проблемы были связаны с невнимательным чтением документации и отсутствием богатого опыта работы с Net-SNMP+AIX у кого-либо из форумчан на aixportal.ru и соответственно подобной этой азбуки.

4. Итоги. В результате недельных мучений с Net-SNMP и WhatsUp я могу видеть графики реального использования процессоров на LPAR-ах (Entitled Capacity % & Physical CPU used), что дает мне возможность понимать, ограничивает ли производительность системы количество виртуальных процессоров, например.
Кроме того, чтобы иметь параметры БД Oracle на одной панели с параметрами системы, написал скрипт и для вытаскивания определенных параметров БД.
Пример:
—- /opt/scripts/snmp/sarstats —-
#!/bin/sh
STATS=`/usr/sbin/sar 1 1 |/usr/bin/tail -1`

case $1 in
                2) exit `echo $STATS|/usr/bin/awk ‘{print $2}’`;;
                3) exit `echo $STATS|/usr/bin/awk ‘{print $3}’`;;
                4) exit `echo $STATS|/usr/bin/awk ‘{print $4}’`;;
                5) exit `echo $STATS|/usr/bin/awk ‘{print $5}’`;;
                6) exit `echo $STATS|/usr/bin/awk ‘{print int($6*10)}’`;;
                7) exit `echo $STATS|/usr/bin/awk ‘{print int($7)}’`;;
esac
————————————
Если бы не 6 и 7 поле, можно было бы написать в одну строчку 🙂

—/etc/snmp/snmpd.conf————-
extend  CPU_idle /opt/scripts/snmp/sarstats 5
extend  Wait_IO /opt/scripts/snmp/sarstats 4
extend  PhysCPU /opt/scripts/snmp/sarstats 6
extend  CPU_EntC /opt/scripts/snmp/sarstats 7
extend  Ora_RspTime /opt/scripts/snmp/orastats somesid
————————————


Оставьте комментарий

Мысль на тему “Инсталляция и настройка Net-SNMP на AIX5L