Como alguém faz para monitorar estatísticas do memcached no OpenNMS?

2

Eu gostaria de compilar dados para tamanho e hits ...

    
por Nathan Milford 18.05.2009 / 15:48

5 respostas

5

Crie o seguinte script (e torne-o executável):

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

A minha é /usr/local/bin/memcached_stats.sh

Ele se conecta ao daemon memcached e lança uma versão sanitizada do comando stats do memcached e gera algo como:

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

Adicione o seguinte ao seu /etc/snmp/snmpd.conf e reinicie o snmpd:

extend .1.3.6.1.4.1.1.900.100 memcached /usr/local/bin/memcached_stats.sh

Isso cria uma tabela com base na saída do script em que cada linha obtém seu próprio nó.

Se você deseja confirmar isso, execute o seguinte:

snmpwalk -v2c -c public 127.0.0.1 .1.3.6.1.4.1.1.900.100

Você deve receber algo como:

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"

A partir disso, você pode extrapolar qual nó é qual stat, mas, para sua sorte, já fiz tudo isso.

Em datacollection-config.xml adicione o seguinte ao topo, mas depois de toda a configuração do 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>

Em seguida, na seção groups , adicione o seguinte:

<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>

E, finalmente, mais abaixo você quer encontrar as tags systemDef para Net-SNMP & Net-SNMP (UCD) e adicione o seguinte dentro das tags collect :

<includeGroup>memcached_stats</includeGroup>

Reinicie o OpenNMS e aí está ... quando o capsd analisar novamente os hosts, ele começará a coletar essas estatísticas

Abaixo está uma referência para os dados que podem ser obtidos do memcached:

  • pid: ID do processo deste processo do servidor
  • tempo de atividade: número de segundos que esse servidor está em execução
  • tempo: hora atual do UNIX de acordo com o servidor
  • versão: string de versão deste servidor
  • pointer_size: tamanho padrão dos ponteiros no sistema operacional host
  • rusage_user: tempo de usuário acumulado para este processo
  • rusage_system: tempo acumulado do sistema para este processo
  • curr_items: número atual de itens armazenados pelo servidor
  • total_items: número total de itens armazenados por este servidor desde que começou
  • bytes: número atual de bytes usados por este servidor para armazenar itens
  • curr_connections: número de conexões abertas
  • total_connections: número total de conexões abertas desde que o servidor começou a ser executado
  • connection_structures: número de estruturas de conexão alocadas pelo servidor
  • cmd_get: número cumulativo de solicitações de recuperação
  • cmd_set: número cumulativo de solicitações de armazenamento
  • get_hits: número de chaves que foram solicitadas e encontradas presentes
  • get_misses: número de itens que foram solicitados e não foram encontrados
  • despejos: número de itens válidos removidos do cache para liberar memória para novos itens
  • bytes_read: número total de bytes lidos por este servidor da rede
  • bytes_written: número total de bytes enviados por este servidor para a rede
  • limit_maxbytes: número de bytes que esse servidor pode usar para armazenamento
  • threads: número de threads de trabalho solicitados

Tudo o que resta é criar qualquer gráfico ou relatório que você queira.

(Funciona no CentOS 5.2, OpenNMS 1.5.93-1, net-snmp 5.3.1, memcached 1.2.2)

    
por 19.05.2009 / 19:16
2

Está embutido desde 1.7.4.

Veja o link

    
por 23.07.2010 / 11:52
1

Bom trabalho, Nathan! Apenas alguns comentários.

Você tornou isso um pouco mais difícil do que o necessário - o uso de um resourceType personalizado não é necessário para objetos escalares, ou seja, que aparecem apenas uma vez por nó. Se você eliminar o resourceType, basta migrar o último dígito de cada atributo "oid" de < mibObj > para seu atributo "instance" e alterar o atributo "ifType" de seu atributo < group > de "todos" para "ignorar".

Você definitivamente precisará tratar algumas dessas estatísticas como contadores (aumentando monotonicamente os valores, de modo que o delta entre duas amostras é o que realmente importa) especificando "contador" em vez de "inteiro" (ou "indicador"). , o que é equivalente, mas mais claro) para o seu tipo. Um bom mnemônico para lembrar o que é um medidor e o que é um contador é que um medidor representa, e. o número de pessoas em uma sala agora, enquanto que um contador representa, e. o número de pessoas que já passaram por uma catraca para entrar em uma sala. Então, "curr_items" deve ser um medidor e "total_items" deve ser um contador. Outros precisam mudar também, mas isso deve ser suficiente para você seguir em frente. Você precisará reiniciar e excluir todos os arquivos RRD que foram criados com o tipo errado; O OpenNMS irá recriar automaticamente os arquivos.

Finalmente, você poderia ter feito isso usando o coletor de HTTP, mas você não teria experimentado as alegrias de trabalhar com o SNMP;)

Uma última coisa - é geralmente preferível documentar esses tipos de "receitas" no wiki opennms.org em vez de em sites externos como o ServerFault. Isso porque daqui a alguns anos o esquema XML para coleta de dados SNMP pode mudar, e é bom poder atualizar as instruções de acordo sem precisar criar contas em um milhão de sites ou rastrear endereços de e-mail para um milhão de autores.

    
por 29.05.2009 / 01:14
1

Reformulei seu script: (requer netcat)

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

fyi: O OpenNMS > 1.7.4 agora tem monitoramento nativo do memcached. Verifique o wiki do OpenNMS para um artigo incompleto que eu escrevi.

    
por 09.09.2009 / 08:14
0

O protocolo memcache define o comando stat usando o qual você pode obter todas essas informações. Qualquer que seja a API que você esteja usando, ela deve ter ligação para esse comando.

    
por 18.05.2009 / 16:22