Quais são os conceitos de "buffer de anel do kernel", "nível de usuário", "nível de log"?

35

Muitas vezes vi as palavras "buffer do anel do kernel", "nível do usuário", "nível do log" e algumas outras palavras aparecerem juntas. por exemplo

/ var / log / dmesg Contém informações do buffer do anel do kernel.

/var/log/kern.log Contém apenas as mensagens do kernel de qualquer nível de log

/var/log/user.log Contém informações sobre todos os logs no nível do usuário

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

Por "nível", eu imaginaria uma hierarquia de vários níveis?

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

Eles estão relacionados ao nível de execução ou ao anel de proteção de alguma forma?

Tim
fonte

Respostas:

41

Sim, tudo isso tem a ver com o log. Não, nada disso tem a ver com nível de execução 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 são salvos até que o daemon syslog tenha a chance de iniciar 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 dmesgcomando e seu conteúdo também é salvo no /var/log/dmesgmomento em que o daemon syslog está sendo iniciado.

Todos os logs que não vêm do kernel são enviados à medida que são gerados para o daemon syslog, para que não sejam mantidos em nenhum buffer. Os logs do kernel também são capturados 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 na página de manual syslog (3) e são os seguintes:

  • LOG_EMERG : o sistema está inutilizável
  • LOG_ALERT : ação deve ser tomada 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 no nível de depuração

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

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

Celada
fonte
Obrigado. (1) O "nível do usuário" está relacionado ao "espaço do usuário"? (2) Pelo que você disse, /var/log/kern.loge /var/log/dmesgdeve ter o mesmo conteúdo que as mensagens do kernel? Mas o conteúdo deles não é o mesmo.
Tim
"nível de usuário" não é uma coisa, até onde eu sei. Existe o nível de syslog, que é o nível de "importância" de uma mensagem de syslog (listei os níveis) e não tem nada a ver com espaço do usuário x espaço do kernel. /var/log/kern.logdeve conter o dmesgconteúdo (talvez formatado de forma diferente) desde o momento da inicialização. A menos que tenha passado muito tempo desde a inicialização e esse conteúdo tenha sido rotacionado.
Celada
Minha segunda pergunta é: Enquanto dmesgimprime os valores atuais do buffer de anel do kernel, os valores anteriores / antigos do buffer são armazenados /var/log/dmesg. Portanto, a dmesgsaída é apenas um subconjunto recente de /var/log/dmesgconteúdo e eles são diferentes. Então o conteúdo de /var/log/dmesg(não dmesgcomo no seu comentário) é /var/log/kernel.logo mesmo?
Tim
Depende de quando! Logo após a inicialização, o /var/log/dmesgconteúdo provavelmente estará próximo do final de /var/log/kern.log. Muito mais tarde, não estará lá, terá girado para fora. Em geral, /var/log/kern.logconterá logs mais antigos do que qualquer instantâneo do buffer do anel de log do kernel e também logs mais recentes que o instantâneo.
Celada
17

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

/var/log/dmesg armazena o conteúdo do 'buffer do anel do kernel', um buffer de memória criado pelo kernel na inicialização no qual os dados de log gerados são armazenados assim que você passa pela fase do carregador de inicialização.

Um buffer de anel é um tipo especial de buffer que sempre possui um tamanho constante, removendo as mensagens mais antigas quando novas mensagens são recebidas. O texto armazenado no buffer de anel do kernel é o que você vê piscando na tela quando você inicializa um Unix. -como máquina no modo console (sem tela inicial, Plymouth). O log do kernel é armazenado em um buffer de memória, de modo que os logs de inicialização estejam em algum lugar, até que o sistema se inicialize até o ponto em que o syslogdaemon possa assumir o controle.

dmesgno Linux faz parte do util-linuxpacote essencial de ferramentas de manutenção do sistema publicado pelo kernel.org. De acordo com a dmesg(1)página do manual,

O dmesg é usado para examinar ou controlar o buffer de anel do kernel.

Consulte: http://www.computerhope.com/unix/dmesg.htm

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

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

Espero que isso ajude pelo menos na primeira parte da sua pergunta.

nomadrc
fonte