Как можно отслеживать статистику memcached в OpenNMS?

Я хотел бы собрать данные для размера и хитов...

5 ответов

Создайте следующий скрипт (и сделайте его исполняемым):

#!/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 config:

<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 для Net-SNMP и Net-SNMP (UCD) и добавить следующее в теги сбора:

<includeGroup>memcached_stats</includeGroup>

Перезапустите OpenNMS, и вот, у вас это есть... когда capsd повторно проверит хосты, он начнет собирать эту статистику

Ниже приведена ссылка на данные, которые можно получить из memcached:

  • pid: идентификатор процесса этого серверного процесса
  • uptime: количество секунд, которое этот сервер работал
  • время: текущее время UNIX в соответствии с сервером
  • версия: строка версии этого сервера
  • pointer_size: размер указателей по умолчанию на операционной системе хоста
  • rusage_user: накопленное время пользователя для этого процесса
  • rusage_system: накопленное системное время для этого процесса
  • curr_items: текущее количество элементов, хранящихся на сервере
  • total_items: общее количество элементов, хранящихся на этом сервере с момента его запуска
  • bytes: текущее количество байтов, используемых этим сервером для хранения элементов
  • curr_connections: количество открытых соединений
  • total_connections: общее количество соединений, открытых с момента запуска сервера
  • connection_structures: количество структур соединений, выделенных сервером
  • cmd_get: совокупное количество поисковых запросов
  • cmd_set: совокупное количество запросов на хранение
  • get_hits: количество ключей, которые были запрошены и найдены в подарок
  • get_misses: количество элементов, которые были запрошены и не найдены
  • выселения: количество допустимых элементов, удаленных из кэша, чтобы освободить память для новых элементов
  • bytes_read: общее количество байтов, прочитанных этим сервером из сети
  • bytes_written: общее количество байтов, отправленных этим сервером в сеть
  • limit_maxbytes: количество байтов, которые этот сервер может использовать для хранения
  • threads: количество рабочих потоков, запрошенных

Осталось только построить любой график или отчет, какой бы вы ни захотели.

(Работает на CentOS 5.2, OpenNMS 1.5.93-1, net-snmp 5.3.1, memcached 1.2.2)

Он встроен в 1.7.4.

Смотрите http://www.opennms.org/wiki/Memcached_Monitor

Отличная работа, Натан! Всего несколько комментариев.

Вы сделали это немного сложнее, чем нужно - использование настраиваемого resourceType не обязательно для скалярных объектов, т. Е. Которые появляются только один раз на узел. Если вы удаляете resourceType, вам просто нужно перенести последнюю цифру каждого атрибута "oid" в его атрибут "instance" и изменить атрибут "ifType" вашего с "all" игнорировать".

Вам определенно нужно будет обрабатывать некоторые из этих показателей как счетчики (монотонно увеличивающиеся значения, так что на самом деле имеет значение дельта между двумя выборками), указав "counter" вместо "integer" (или "gauge", то есть эквивалентно, но более понятно) для их типа. Хорошая мнемоника для запоминания, что такое датчик и что такое счетчик, состоит в том, что датчик представляет, например, количество людей в комнате прямо сейчас, тогда как счетчик представляет, например, количество людей, которые когда-либо проходили через турникет, чтобы войти в комнату. Таким образом, "curr_items" должен быть индикатором, а "total_items" должен быть счетчиком. Другие тоже должны измениться, но этого должно быть достаточно, чтобы вы начали. Вам нужно будет перезапустить и удалить все файлы RRD, созданные с неправильным типом; OpenNMS автоматически воссоздает файлы.

Наконец, вы могли бы сделать это, используя HTTP Collector, но тогда вы бы не испытали радости от работы с SNMP;)

И последнее: обычно предпочтительнее документировать эти "рецепты" в вики opennms.org, а не на внешних сайтах, таких как ServerFault. Это связано с тем, что через несколько лет схема XML для сбора данных SNMP может измениться, и приятно иметь возможность соответствующим образом обновлять инструкции, не создавая учетные записи на миллионах сайтов и не отслеживая адреса электронной почты миллионов авторов.

Я пересмотрел ваш скрипт: (требуется netcat)

#!/bin/bash
echo -e "stats\nquit"|nc $1 11211 | while read  -d $'\r' stat
    name value;
        do
            echo $value
        done

fyi: OpenNMS> 1.7.4 теперь имеет встроенный мониторинг memcached. Проверьте OpenNMS Wiki для полу-готовой статьи, которую я написал.

Протокол memcache определяет stat команда, с помощью которой вы можете получить всю эту информацию. Какой бы API вы не использовали, он должен иметь привязку для этой команды.

Другие вопросы по тегам