Quais são os conceitos de “buffer de anel do kernel”, “nível de usuário”, “nível de registro”?

30

Muitas vezes eu vi as palavras "kernel ring buffer", "nível de usuário", "log level" e algumas outras palavras aparecem juntas. por exemplo,

/var/log/dmesg Contains kernel ring buffer information.

/var/log/kern.log Contains only the kernel's messages of any loglevel

/var/log/user.log Contains information about all user level logs

Eles são todos sobre logs? Como eles são relacionados e diferentes?

Por "nível", eu imaginaria uma hierarquia de múltiplos níveis?

O "nível do usuário" está relacionado ao "espaço do usuário"?

Eles estão relacionados ao runlevel ou anel de proteção de alguma forma?

    
por Tim 23.04.2015 / 17:05

2 respostas

36

Sim, tudo isso tem a ver com o registro em log. Não, nada disso tem a ver com runlevel ou "anel de proteção".

O kernel mantém seus logs em um buffer de anel. A principal razão para isso é que os logs da inicialização do sistema sejam salvos até que o daemon syslog tenha a chance de inicializá-los e coletá-los. Caso contrário, não haveria registro de nenhum registro antes da inicialização do daemon syslog. O conteúdo desse buffer de anel pode ser visto a qualquer momento usando o comando dmesg , e seu conteúdo também é salvo em /var/log/dmesg da mesma forma que o daemon syslog está sendo inicializado.

Todos os logs que não vêm do kernel são enviados conforme são gerados para o daemon syslog, portanto, eles não são mantidos em nenhum buffer. Os logs do kernel também são coletados pelo daemon syslog à medida que são gerados, mas também continuam sendo salvos (desnecessariamente, sem dúvida) no buffer de anel.

Os níveis de log podem ser vistos documentados no syslog (3) manpage e são os seguintes:

  • LOG_EMERG : o sistema está inutilizável
  • LOG_ALERT : a ação deve ser executada imediatamente
  • LOG_CRIT : condições críticas
  • LOG_ERR : condições de erro
  • LOG_WARNING : condições de aviso
  • LOG_NOTICE : condição normal, mas significativa
  • LOG_INFO : mensagem informativa
  • LOG_DEBUG : mensagem de nível de depuração

Cada nível é projetado para ser menos "importante" do que o anterior. Um arquivo de log que registra registros em um nível também registra registros em todos os níveis mais importantes também.

A diferença entre /var/log/kern.log e /var/log/mail.log (por exemplo) não tem a ver com o nível, mas com a facilidade ou categoria. As categorias também são documentadas na página do manual.

    
por 23.04.2015 / 17:42
15

Para responder pelo menos a primeira parte da sua pergunta sobre dmesg :

/var/log/dmesg armazena o conteúdo do 'kernel ring buffer', um buffer de memória criado pelo kernel na inicialização para armazenar os dados de log gerados assim que você passa da fase de bootloader.

Um buffer de anel é um tipo especial de buffer que é sempre um tamanho constante, removendo as mensagens mais antigas quando novas mensagens chegam. O texto armazenado no buffer de anel do kernel é o que você vê passando na tela quando inicializa uma máquina semelhante ao Unix no modo console (sem tela inicial, Plymouth). O log do kernel é armazenado em um buffer de memória para que os logs de inicialização tenham algum lugar para estar, até que o sistema tenha auto-inicializado até o ponto em que o daemon syslog possa assumir.

dmesg no Linux faz parte do pacote essencial util-linux das ferramentas de manutenção do sistema publicadas pelo kernel.org. De acordo com a página dmesg(1) man,

dmesg is used to examine or control the kernel ring buffer.

Veja: link

Em 'systemd' init, este comando pode ser usado para imprimir o buffer de anel do kernel:
# journalctl --dmesg or journalctl -k , thxs para correção @don_crissti

Emitindo o comando dmesg | grep -i ethernet por exemplo, irá analisar o buffer de anel do kernel para a string 'ethernet'.

Espero que isso ajude pelo menos com a primeira parte de sua pergunta.

    
por 23.04.2015 / 17:57

Tags