crower: (Crower)
crower ([personal profile] crower) wrote2014-05-19 02:10 pm
Entry tags:

и снова кактус

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

В snmp по-умолчанию температуры дисков нет. Unity температуру берёт через либу, но hddtemp был установлен только на одном из компов. Нашёл хинты, в соответствии с которыми snmpd исполняла hddtemp и выдавала по запросу температуру. Но сразу они не заработали (snmp выдавал в хексе "Доступ запрещён" - пришлось ещё повозиться чтобы расшифровать), потому что snmpd работает под одноимённым юзером, у которого доступа не было к запуску hddtemp. Решалась проблема другим хинтом:  sudo chmod u+s /usr/sbin/hddtemp


В итоге всё показалось красиво:


host@user# /usr/bin/snmpwalk -v2c -c community host .1.3.6.1.4.1.2021.8
iso.3.6.1.4.1.2021.8.1.1.1 = INTEGER: 1
iso.3.6.1.4.1.2021.8.1.1.2 = INTEGER: 2
iso.3.6.1.4.1.2021.8.1.2.1 = STRING: "hddtempsda"
iso.3.6.1.4.1.2021.8.1.2.2 = STRING: "hddtempsdb"
iso.3.6.1.4.1.2021.8.1.3.1 = STRING: "/usr/sbin/hddtemp -n /dev/sda"
iso.3.6.1.4.1.2021.8.1.3.2 = STRING: "/usr/sbin/hddtemp -n /dev/sdb"
iso.3.6.1.4.1.2021.8.1.100.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.100.2 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.101.1 = STRING: "33"
iso.3.6.1.4.1.2021.8.1.101.2 = STRING: "34"
iso.3.6.1.4.1.2021.8.1.102.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.102.2 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.103.1 = ""
iso.3.6.1.4.1.2021.8.1.103.2 = ""


Но почему-то кактус видеть данные не хотел. Может потому что они были типа STRING? Пробовал несколько вариантов шаблонов данных использовать и запрашивать где дерево, а где конечный счётчик - безуспешно:

05/19/2014 10:15:03 AM - CMDPHP: Poller[0] Host[5] DS[132] SNMP: v2: host, dsname: snmp_oid, oid: .1.3.6.1.4.1.2021.8.1.101, output: U
05/19/2014 10:15:03 AM - CMDPHP: Poller[0] Host[5] DS[132] WARNING: Result from SNMP not valid. Partial Result: U

В итоге плюнул на эту возню, нашёл чьё-то старое решение, в котором инфа запрашивается через Get Script Data: php-скрипт открывает сокет и читает данные прямо от hddtemp, слушающий свой порт. Последний пришлось к тому же прописать, чтобы слушал свой порт не только на локальном интерфейсе, а на всех. Он (hddtemp) выдаёт полную инфу (с типом диска) разделённую пайпом. Это намного приятнее, чем абстрактный sda (хотя можно было и более говорящий дескрипшн приклеить). Немного работы напильником и температурный режим всех винтов всех хостов теперь виден в кактусе.