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

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *