Я бы хотел заняться сбором данных по размеру и хитам ...
Создайте следующий сценарий (и сделайте его исполняемым):
#!/bin/bash
exec 5<> /dev/tcp/127.0.0.1/11211
if [ $? -eq 0 ]; then
echo "stats" >&5
echo "quit" >&5
while read -u 5 -d $'\r' stat name value;
do
echo $value
done
exit 0
fi
exit 1
Мой /usr/local/bin/memcached_stats.sh
Он подключается к демону memcached и выводит очищенную версию команды memcached stats и выводит что-то вроде:
2754
2129139
1243545563
1.2.2
64
2299.898362
7336.774640
217721
7091925
1909177049
108
27653
633
234138327
7091925
220430936
13707391
352833
89610818966
1385141563315
2147483648
4
Добавьте следующее в свой /etc/snmp/snmpd.conf и перезапустите snmpd:
extend .1.3.6.1.4.1.1.900.100 memcached /usr/local/bin/memcached_stats.sh
Это создает таблицу на основе вывода скрипта, где каждая строка получает свой собственный узел.
Если вы хотите подтвердить это, запустите следующее:
snmpwalk -v2c -c public 127.0.0.1 .1.3.6.1.4.1.1.900.100
У вас должно получиться что-то вроде:
SNMPv2-SMI::enterprises.1.900.100.3.1.3.9.109.101.109.99.97.99.104.101.100 = INTEGER: 23
SNMPv2-SMI::enterprises.1.900.100.3.1.4.9.109.101.109.99.97.99.104.101.100 = INTEGER: 0
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.1 = STRING: "2754"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.2 = STRING: "2123005"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.3 = STRING: "1243539429"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.4 = STRING: "1.2.2"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.5 = STRING: "64"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.6 = STRING: "2290.369810"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.7 = STRING: "7308.630919"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.8 = STRING: "217652"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.9 = STRING: "7066934"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.10 = STRING: "1909286395"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.11 = STRING: "108"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.12 = STRING: "27628"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.13 = STRING: "633"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.14 = STRING: "233251848"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.15 = STRING: "7066934"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.16 = STRING: "219593496"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.17 = STRING: "13658352"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.18 = STRING: "348593"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.19 = STRING: "89233569948"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.20 = STRING: "1380956068373"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.21 = STRING: "2147483648"
SNMPv2-SMI::enterprises.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.22 = STRING: "4"
Исходя из этого, вы можете экстраполировать, какой узел и какой стат, но, к счастью для вас, я уже сделал все это.
В datacollection-config.xml добавьте в начало следующее, но после всего конфига rrd:
<resourceType name="MemcachedStats" label="memcached stats" resourceLabel="memcached">
<persistenceSelectorStrategy class="org.opennms.netmgt.collectd.PersistAllSelectorStrategy"/>
<storageStrategy class="org.opennms.netmgt.dao.support.IndexStorageStrategy"/>
</resourceType>
Тогда в группы раздел добавить следующее:
<group name="memcached_stats" ifType="all">
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.1" instance="MemcachedStats" alias="pid" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.2" instance="MemcachedStats" alias="uptime" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.3" instance="MemcachedStats" alias="time" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.4" instance="MemcachedStats" alias="version" type="string" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.5" instance="MemcachedStats" alias="pointer_size" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.4" instance="MemcachedStats" alias="rusage_user" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.7" instance="MemcachedStats" alias="rusage_system" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.8" instance="MemcachedStats" alias="curr_items" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.9" instance="MemcachedStats" alias="total_items" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.10" instance="MemcachedStats" alias="bytes" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.11" instance="MemcachedStats" alias="curr_connections" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.12" instance="MemcachedStats" alias="total_connections" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.13" instance="MemcachedStats" alias="connection_structures" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.14" instance="MemcachedStats" alias="cmd_get" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.15" instance="MemcachedStats" alias="cmd_set" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.16" instance="MemcachedStats" alias="get_hits" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.17" instance="MemcachedStats" alias="get_misses" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.18" instance="MemcachedStats" alias="evictions" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.19" instance="MemcachedStats" alias="bytes_read" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.20" instance="MemcachedStats" alias="bytes_written" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.21" instance="MemcachedStats" alias="limit_maxbytes" type="integer" />
<mibObj oid=".1.3.6.1.4.1.1.900.100.4.1.2.9.109.101.109.99.97.99.104.101.100.22" instance="MemcachedStats" alias="threads" type="integer" />
</group>
И, наконец, ниже вы хотите найти systemDef теги для Сеть-SNMP & Сеть-SNMP (UCD) и добавьте следующее в собирать теги:
<includeGroup>memcached_stats</includeGroup>
Перезапустите OpenNMS, и вот оно что ... когда capsd повторно сканирует хосты, он начнет собирать эту статистику.
Ниже приведена ссылка на данные, которые можно получить из memcached:
Все, что осталось, - это построить любые графики или отчеты, которые вам нужны.
(Работает на CentOS 5.2, OpenNMS 1.5.93-1, net-snmp 5.3.1, memcached 1.2.2)
Он встроен с версии 1.7.4.
Я реорганизовал ваш скрипт: (требуется netcat)
#!/bin/bash
echo -e "stats\nquit"|nc $1 11211 | while read -d $'\r' stat
name value;
do
echo $value
done
к сведению: OpenNMS> 1.7.4 теперь имеет собственный мониторинг memcached. Найдите в вики OpenNMS наполовину законченную статью, которую я написал.
Отличная работа, Натан! Всего несколько комментариев.
Вы сделали это немного сложнее, чем нужно - использование настраиваемого resourceType не обязательно для скалярных объектов, то есть появляющихся только один раз для каждого узла. Если вы отбросите resourceType, вам просто нужно будет перенести последнюю цифру каждого атрибута «oid» <mibObj> в его атрибут «instance» и изменить атрибут «ifType» вашего <group> со «all» игнорировать".
Вам определенно нужно будет рассматривать некоторые из этих статистических данных как счетчики (монотонно возрастающие значения, так что разница между двумя выборками действительно имеет значение), указав «counter» вместо «integer» (или «gauge», то есть эквивалентно, но более ясно) для их типа. Хорошая мнемоника для запоминания, что такое датчик, а что счетчик, - это то, что датчик представляет, например количество людей в комнате прямо сейчас, тогда как счетчик представляет, например, количество людей, которые когда-либо проходили через турникет, чтобы войти в комнату. Итак, curr_items должен быть датчиком, а total_items - счетчиком. Другие тоже нуждаются в изменении, но этого должно быть достаточно, чтобы вы начали. Вам нужно будет перезапустить и удалить все файлы RRD, которые были созданы с неправильным типом; OpenNMS автоматически воссоздает файлы.
Наконец, вы могли бы сделать это и с помощью сборщика HTTP, но тогда вы бы не испытали радости от работы с SNMP;)
И последнее - как правило, предпочтительнее документировать подобные «рецепты» на вики opennms.org, а не на внешних сайтах, таких как ServerFault. Это потому, что через несколько лет XML-схема для сбора данных SNMP может измениться, и приятно иметь возможность соответствующим образом обновлять инструкции без необходимости создавать учетные записи на миллионе сайтов или отслеживать адреса электронной почты для миллиона авторов.
Протокол memcache определяет stat
команда, с помощью которой вы можете получить всю эту информацию. Какой бы API вы ни использовали, он должен иметь привязку для этой команды.