Como o SNMP obtém o uso da CPU no Linux?

2

Uma chamada SNMP para obter o uso da CPU para uma caixa Linux acaba de ler o arquivo / proc / stat?

    
por nivek 11.01.2016 / 19:01

2 respostas

8

Suspiro 1 . Felizmente você não precisa de /proc/stat

man 5 proc :

/proc/loadavg

The first three fields in this file are load average figures giving the number of jobs in the run queue (state R) or waiting for disk I/O (state D) averaged over 1, 5, and 15 minutes. They are the same as the load average numbers given by uptime(1) and other programs. The fourth field consists of two numbers separated by a slash (/). The first of these is the number of currently runnable kernel scheduling entities (processes, threads). The value after the slash is the number of kernel scheduling entities that currently exist on the system. The fifth field is the PID of the process that was most recently created on the system.

Mas é provável que você precise consultar a fonte do link para determinar o que eles realmente usam:

net-snmp-5.7.3 / agent / mibgroup / ucd-snmp / loadave.c:

#elif defined(linux)
{
    FILE           *in = fopen("/proc/loadavg", "r");
    if (!in) {
        NETSNMP_LOGONCE((LOG_ERR, "snmpd: cannot open /proc/loadavg\n"));
        return (-1);
    }

Nota de rodapé 1. Às vezes você realmente não pode escolher com quem você trabalha.

Em resposta aos seus comentários, novamente, suspiro . Como somente o kernel está ciente do que está realmente fazendo, qualquer monitoração, de uma forma ou de outra, precisa interagir com o kernel para recuperar tais informações. A interface comum para interagir com o kernel é /proc/ embora outros métodos possam ser planejados também ( auditd e kerneltap vem à mente). Mas estes dificilmente são "mais leves" ...

Sempre haverá uma certa quantidade de efeito de observador e o impacto causado pelo monitoramento.

O único método de impacto zero é não fazer nenhum monitoramento. E quem tem pager pode alegar que, como nenhum alerta foi observado, o sistema também não está desligado. Eu chamaria isso de uma vitória!

    
por 11.01.2016 / 19:54
2

HBrujin tem a resposta para sua pergunta direta, mas o problema real que está sendo resolvido aqui merece alguma discussão adicional.

Como você provavelmente já ouviu os comentários até agora, a maioria das pessoas está perplexa com a atitude de seu colega de trabalho. Isso ocorre porque a pesquisa de /proc para informações do sistema é bastante onipresente. Tímido de uma chamada de biblioteca direta para pesquisar o kernel (usando uma linguagem compilada), a única maneira de obter o estado do kernel é pesquisá-lo a partir de /proc ou /sys .

A maior parte da automação do sistema é realizada por meio de scripts em linguagens de nível superior. Alguns deles fornecerão wrappers de bibliotecas que ignoram a necessidade de ler informações de /proc , mas o shell script simplesmente não funciona e não pode. Isso contradiz diretamente a posição de seu colega de trabalho destacada no comentário acima, "a objeção é a leitura de / proc geralmente" .

O seu colega de trabalho está mal informado e precisa deixar isso de lado. Se outros são forçados a operar por esses padrões, eles não podem fazer o trabalho deles. Todo o valor da Internet de experiência prática está trabalhando contra eles aqui. As únicas pessoas que comprarão esse absurdo são os gerentes que não conhecem melhor.

    
por 12.01.2016 / 00:51

Tags