Editar 02/06/2016
Se você estiver tentando encontrar "Mensagens de registro iniciais" em geral, verifique /var/log/upstart/
. É aí que o Upstart salva stdout
e stderr
dos serviços do Upstart. Obrigado à resposta de leopd por apontar isso.
Se você estiver procurando mensagens de log do próprio Upstart, configuradas initctl log-priority
e emitidas por initctl emit
, continue lendo!
Versão curta
As entradas do log devem realmente aparecer no dmesg. Apesar disso, eles não aparecem por padrão no /var/log
.
Se você também quiser /var/log
, adicione $KLogPermitNonKernelFacility on
à configuração do rsyslogd. Sugiro a criação de um arquivo personalizado /etc/rsyslog.d/60-custom.conf
para evitar a edição /etc/rsyslog.conf
, pois é gerenciado pelo dpkg. Agora, as mensagens do Upstart devem aparecer /var/log/syslog
, assim que você definir o Upstart log-priority
como info
ou não.
Versão longa
Levei dias para rastrear, mas aparentemente o Upstart (1.5) não registra no syslog, ou seja, não chama a função glibc syslog()
. Em vez disso, o Upstart registra no buffer de anel do kernel, que é o que o dmesg lê. Agora, eu não achava que era possível que os processos de espaço do usuário gravassem nesse buffer, mas aparentemente eles podem escrever /dev/kmsg
, e é exatamente isso que o Upstart faz. Então essa é a primeira parte do quebra-cabeça.
A segunda parte é que existe uma crença generalizada de que as mensagens gravadas no buffer de anel do kernel são automaticamente copiadas para o syslog pelo kernel (pelo menos é o que eu sempre pensei). Acontece que isso é realmente feito por um daemon de espaço do usuário, tradicionalmente o klogd, que opera em conjunto com o syslogd. Obviamente, o rsyslogd substitui o syslogd, mas aparentemente ele também substitui o klogd (mais ou menos: veja as notas no final).
A terceira parte é que as mensagens gravadas no buffer do anel do kernel do espaço do usuário realmente parecem diferentes das mensagens gravadas do espaço do kernel: elas têm um recurso diferente. dmesg tem algumas opções que interagem com este: -x
vai mostrar a facilidade (e a prioridade), enquanto -u
e -k
contam dmesg para mostrar apenas mensagens de instalações de usuário e mensagens de instalações kernel, respectivamente.
Agora, aqui está o argumento decisivo: por padrão, o rsyslogd ignora as mensagens com um recurso que não seja do kernel ao ler mensagens do buffer de anel do kernel. A opção de configuração relevante é $KLogPermitNonKernelFacility
, que está desativada por padrão e precisa ser ativada se você quiser que o rsyslogd processe essas mensagens. Observe que o restante da configuração do rsyslogd tratará todas as mensagens do buffer de anel do kernel como tendo o kern
recurso, independentemente do recurso que eles tinham no buffer de anel do kernel.
Mais Informações
syslog
O código pode gravar no syslog chamando a função glibc syslog()
, descrita em man 3 syslog
. Aparentemente, essas funções escrevem para /dev/log
. O código pode ler do syslog lendo /dev/log
, e é isso que syslogd
e suas substituições fazem. rsyslogd
lê /dev/log
usando seu imuxsock
módulo de entrada.
Buffer de anel do kernel
O espaço do kernel grava nesse buffer chamando a função kernel printk()
, então às vezes é chamado de buffer printk. O espaço do usuário pode gravar nele, escrevendo para /dev/kmsg
. O espaço do usuário pode ler desse buffer por vários métodos: ele pode ler /proc/kmsg
(o que o dmesg faz por padrão), ou pode ler /dev/kmsg
ou pode chamar a chamada do sistema syslog()
, descrita em man 2 syslog
e completamente diferente da função glibc syslog()
descrita no man 3 syslog
. O glibc realmente fornece um invólucro para a chamada do sistema syslog()
, chamada klogctl()
, para ajudar a aliviar essa confusão.
Tradicionalmente, klogd
lê de uma dessas interfaces e chama a função glibc syslog()
para copiá-las para o syslog. O rsyslogd lê uma dessas interfaces através de seu imklog
módulo de entrada, mas o AFAIK não se incomoda em chamar a glibc syslog()
, e é por isso que não é exatamente como o klogd; apenas processa a saída, imklog
assim como processa a saída de qualquer outro módulo de entrada. Há a ressalva adicional de que toda imklog
saída tem kern
facilidade, independentemente das mensagens da instalação no buffer de anel do kernel.
Referências
dmesg
mas não fazia sentido sem o contexto fornecido aqui.