Linux: Lendo Logs com dmesg

dmesg é uma ferramenta muito útil, principalmente para consultarmos os logs que aparecem de forma muito rápida ao ligamos o computador. Estou falando daquele monte de texto branco em um fundo preto que surge rapidamente e desaparece antes do início do sistema operacional. Não se preocupe se viu um erro escrito em vermelho; fica tudo gravado para podermos analisar posteriormente com dmesg.

O que é dmesg?

dmesg é uma ferramenta que coleta e grava eventos no Ring Buffer. Esses eventos são mais conhecidos pelo termo logs e são gravados dentro de uma estrutura conhecida como ring buffer ou buffer circular.

dmesg também serve para gerenciar(manipular) o buffer ring.

 

O que é Ring Buffer?

ring, em inglês, significa anel ou círculo. Lembra do Filme Senhor dos Anéis? o título original é Lord of the rings.

Ring Buffer ou Buffer Circular é uma porção de buffer(memória) com tamanho limitado. Buffer recebe o termo circular(ring) porque está em constante movimento; lembra, um anel não tem fim. Mas não acabamos de mencionar acima que o buffer circular tem tamanho limitado? Sim, o termo infinito aqui não é referente ao seu tamanho e sim a constante “entrada e saída de dados”. Quando o Buffer Circular está cheio, para que um log seja registrado é preciso que log o mais velho seja excluído.

No site kernel.org  é mencionado que há dois índices no Buffer Circular:

  • Cabeça(head)
  • Rabo(tail). Rabo ficou um termo meio chulo? poderia chamar de cauda?

A cabeça é alimentada quando itens são adicionados ao buffer. Em contrapartida, itens são removidos pela ponta traseira(rabo ou tail).

Para liberar espaço para que logs entrem pela ponta de cima é necessário que seja excluído itens na ponta de baixo. O mais antigo sai para entrar o mais novo.

 

Opções da Ferramenta dmesg

  • -C ou clear: limpa o ring buffer
  • -c ou read-clear: limpa o ring buffer mas antes exibe seu conteúdo
  • -D: desabilita a exibição de mensagens no console(tela)
  • -k ou kernel: exibe mensagens do kernel
  • -H ou human: exibe os logs em um formato mais humanizado, mais fácil de ler.
  • -L ou color: Exibe o texto com cores
  • -l ou level: restringe o resultado para o nível dado. Exemplo, “dmesg level=warn,err” irá exibir erros e warn(alerta) somente.
  • -T ou ctime: exibe timestamps de forma humanizada ou com leitura mais facilitada para nós humanos.
  • -f ou facility: Mostra logs filtrados por recursos, tais como: kern, user, mail, syslog….
  • -u ou userspace: exibe mensagens do userspabe(área do usuário)
  • -w ou follow: espera por novas mensagens. Como se fosse um “tail -f”

 

Bom, aqui  há outras opções que acabei não listando; ou porque são óbvias ou de pouco uso. Por exemplo, “dmesg -h” todos sabemos que exibirá a ajuda do comando e “dmesg -V” exibirá a versão.

 

Usando dmesg

Sempre irei resumir o resultado, visto o texto ser imenso. Lembre-se de usar sudo

 

  1. Usando apenas o comando dmesg sem opções
    elder@server01:~$ sudo dmesg
    .............
    [ 17.987459] audit: type=1400 audit(1623068593.744:4): apparmor="STATUS" operation="profile_load" profile="unconfined" name="man_groff" pid=466 comm="apparmor_parser"
    [ 18.011908] audit: type=1400 audit(1623068593.768:5): apparmor="STATUS" operation="profile_load" profile="unconfined" name="nvidia_modprobe" pid=467 comm="apparmor_parser"
    [ 18.011920] audit: type=1400 audit(1623068593.768:6): apparmor="STATUS" operation="profile_load" profile="unconfined" name="nvidia_modprobe//kmod" pid=467 comm="apparmor_parser"
    [ 18.501822] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
    [ 18.539774] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready
    [ 18.539786] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready
    [ 18.575565] IPv6: ADDRCONF(NETDEV_UP): enp0s8: link is not ready
    [ 18.581808] e1000: enp0s8 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
    [ 18.582360] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s8: link becomes ready
    [ 18.665038] Process accounting resumed
    [ 21.027535] drbd meuRes: Starting worker thread (from drbdsetup-84 [585])
    [ 21.067719] drbd meuRes: conn( StandAlone -> Unconnected ) 
    [ 21.067741] drbd meuRes: Starting receiver thread (from drbd_w_meuRes [587])
    [ 21.081587] drbd meuRes: receiver (re)started
    [ 21.081593] drbd meuRes: conn( Unconnected -> WFConnection )
  2. Vendo o log usando -H para uma leitura mais “facilitada”
    elder@server01:~$ sudo dmesg -H
    [jun 7 09:22] Linux version 4.19.0-14-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 
    [  +0,000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.19.0-14-amd64 root=UUID=08d9728a-0edf-4f23-b06a-6
    [  +0,000000] x86/fpu: x87 FPU will use FXSAVE
    [  +0,000000] BIOS-provided physical RAM map:
    .........
    [  +0,000000] NX (Execute Disable) protection: active
    [  +0,000000] SMBIOS 2.5 present.
    [  +0,000000] DMI: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    [  +0,000000] Hypervisor detected: KVM
    [  +0,000000] kvm-clock: Using msrs 4b564d01 and 4b564d00
    [  +0,000000] kvm-clock: cpu 0, msr 317ec001, primary cpu clock
    [  +0,000000] kvm-clock: using sched offset of 12757932036 cycles
    [  +0,000032] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 8
    [  +0,000029] tsc: Detected 2825.826 MHz processor
    
  3. Limpar o ring Buffer
    elder@server01:~$ sudo dmesg --clear
    

    Se tentar ver novamente o conteúdo verá que está vazio

  4. Usando a opção seguir(fallow) para acompanharmos em tempo real a ferramenta dmesg sendo alimentada
    elder@server01:~$ sudo dmesg -H --follow
    [jun 7 12:18] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
    [  +0,000171] ata6.00: ATA-6: VBOX HARDDISK, 1.0, max UDMA/133
    [  +0,000002] ata6.00: 15369 sectors, multi 128: LBA48 NCQ (depth 32)
    [  +0,000146] ata6.00: configured for UDMA/133
    [  +0,000499] scsi 5:0:0:0: Direct-Access     ATA      VBOX HARDDISK    1.0  PQ: 0 ANSI: 5
    [  +0,009127] sd 5:0:0:0: [sdd] 15369 512-byte logical blocks: (7.87 MB/7.50 MiB)
    [  +0,000008] sd 5:0:0:0: [sdd] Write Protect is off
    [  +0,000002] sd 5:0:0:0: [sdd] Mode Sense: 00 3a 00 00
    [  +0,000009] sd 5:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
    [  +0,002530] sd 5:0:0:0: [sdd] Attached SCSI disk
    [  +0,009650] sd 5:0:0:0: Attached scsi generic sg4 type 0

    Acima eu adicionei um HD  e me foi gerado o log. Todo o log acima é da inserção do HD. Se tivesse inserido um pen drive ou outro dispositivo qualquer também teria o log acrescentado.

  5. Vamos remover o HD inserido acima e acompanhar em tempo realOlha o texto de log referente à remoção:
    [jun 7 12:20] ata6: SATA link down (SStatus 0 SControl 300)
    [  +5,519376] ata6: SATA link down (SStatus 0 SControl 300)
    [jun 7 12:21] ata6: SATA link down (SStatus 0 SControl 300)
    [  +0,000028] ata6.00: disabled
    [  +0,000042] ata6.00: detaching (SCSI 5:0:0:0)
    [  +0,004108] sd 5:0:0:0: [sdd] Synchronizing SCSI cache
    [  +0,000023] sd 5:0:0:0: [sdd] Synchronize Cache(10) failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
    [  +0,000001] sd 5:0:0:0: [sdd] Stopping disk
    [  +0,000014] sd 5:0:0:0: [sdd] Start/Stop Unit failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
    

    Para sairmos do acompanhamento em tempo real basta teclarmos “Control + c”

 

Facility: Recursos de Log

Podemos usar -f ou facility para  ver logs filtrando por:

kern mensagens de kernel
user mensagens aleatórias de nível de usuário
mail sistema de correio
daemon deamons de sistema
auth mensagens de segurança/autorização
syslog mensagens geradas internamente pelo syslogd
lpr subsistema de impressora de linha
news subsistema de notícia de rede

Exemplos:

elder@server01:~$ sudo dmesg -f kern
elder@server01:~$ sudo dmesg -f user

Níveis de Logs

Podemos usar -l ou level para ver logs filtrando pela prioridade:

emerg sistema está inutilizável
alert ação deve ser tomada imediatamente
crit condições críticas
err condições de erro
warn condições de aviso
notice condição normal, mas significativa
info informativo
debug mensagens de nível de depuração

Exemplos:

elder@server01:~$ sudo dmesg -l warn
[10686.048120] ata6.00: disabled
elder@server01:~$ sudo dmesg -l notice
[10530.268995] scsi 5:0:0:0: Direct-Access     ATA      VBOX HARDDISK    1.0  PQ: 0 ANSI: 5
[10530.278122] sd 5:0:0:0: [sdd] 15369 512-byte logical blocks: (7.87 MB/7.50 MiB)
[10530.278130] sd 5:0:0:0: [sdd] Write Protect is off
[10530.278141] sd 5:0:0:0: [sdd] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[10530.280671] sd 5:0:0:0: [sdd] Attached SCSI disk
[10530.290321] sd 5:0:0:0: Attached scsi generic sg4 type 0
[10686.052270] sd 5:0:0:0: [sdd] Synchronizing SCSI cache
[10686.052294] sd 5:0:0:0: [sdd] Stopping disk

 

elder@server01:~$ sudo dmesg -l info
[10530.268177] ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[10530.268348] ata6.00: ATA-6: VBOX HARDDISK, 1.0, max UDMA/133
[10530.268350] ata6.00: 15369 sectors, multi 128: LBA48 NCQ (depth 32)
[10530.268496] ata6.00: configured for UDMA/133
[10675.152758] ata6: SATA link down (SStatus 0 SControl 300)
[10680.672134] ata6: SATA link down (SStatus 0 SControl 300)
[10686.048092] ata6: SATA link down (SStatus 0 SControl 300)
[10686.048162] ata6.00: detaching (SCSI 5:0:0:0)
[10686.052293] sd 5:0:0:0: [sdd] Synchronize Cache(10) failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[10686.052308] sd 5:0:0:0: [sdd] Start/Stop Unit failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK

 

Conclusão

A ferramenta dmesg, assim como qualquer outra para monitoramento de logs, é essencial e útil para a vida de um sysadmin.

Quer ver qual nome seu pen drive recebeu, se sdd, sde…? Pode executar um “sudo dmesg follow” antes de conectar o pen drive; depois que conectar o pen drive verá na tela o rótulo que este receberá.

Uma outra função útil é deixarmos executando um “dmesg follow”  para vermos nos logs o porquê que um pen drive não está sendo reconhecido.

 

 

Fontes: manual dmesg, kernel.org, computerhope.com

Deixe um comentário

O seu endereço de e-mail não será publicado.