# Principais Parâmetros do Journalctl

# Introdução
Não sei você, eu uso Linux diariamente no trabalho e mesmo assim não consigo memorizar todos os parâmetros dos comandos que preciso no terminal. Então, a tarefa de ir pesquisar na internet é relativamente comum. E não tem nada de errado com isso, nosso cérebro não consegue fixar todos os detalhes de tudo. Quando preciso pesquisar uma lista rápida com as principais utilizações de um determinado comando, sempre adiciono o seguinte termo na busca: “*cheat sheet* + o nome do comando”. Esse termo poderia ser traduzido como folha de dicas, e normalmente me traz um resumo com vários exemplos de aplicação daquele determinado comando. Recentemente, resolvi escrever as minhas próprias listas e mantê-las em um controle local usando o Obsidian (aplicação para organizar notas, textos e afins). Esse ato de pesquisa e escrita, reforça muito mais o aprendizado e facilita a minha busca quando eu necessitar. Nesse artigo publicarei minhas notas acerca do comando `journalctl`.

# Descrição

Ferramenta para visualizar os registros do sistema gerados pelo systemd. O arquivo de configuração para esse utilitário está localizado em `/etc/systemd/journald.conf`. As configurações encontradas nesse arquivo são os valores padrões, mesmo estando comentadas.

# Exemplos de utilização

Ao rodar o comando `journactl` sem parâmetros, é possível navegar pelos registros usando o padrão do `less`. Caso se queira remover esse comportamento, basta usar o parâmetro `--no-pager`.

## Ordem reversa

```bash
journalctl -r
```

## Mais recentes n linhas

```bash
journalctl -n 25
```

## Tempo real

```bash
journalctl -f
```

## Padrão UTC

Por padrão, os logs são exibidos no horário da máquina. Para exibir em UTC, use o seguinte parâmentro:

```bash
journalctl --utc
```

## Logs do kernel

```bash
journalctl -k
```

## Logs de um boot específico

Para listar as sessões de boot:

```bash
journalctl --list-boots
```

Exemplo de saída:

```bash
  -5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
  -4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
  -3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
  -2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
  -1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
   0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST

```

Para visualizar a sessão -2:

```bash
journalctl -b -2
```

## Logs de uma unidade de serviço

```bash
journalctl -u service_name
```

## Log de um intervalo de tempo

```bash
journalctl --since=yesterday --until=now
journalctl --since "2020-07-10"
journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"
journalctl --since "-1h30min" (logs desse último intervalo)
journalctl --since "1 hour ago"
```

## Logs baseado em UID, GID e PID

```bash
journalctl _PID=1234
```

## Logs de apenas erros

```bash
journalctl -p 3 -xb
```

`-p 3`: filtra logs de prioridade 3, correspondente aos erros
`-x `: evidencia informações adicionais quando disponíveis
`b`: referente ao último boot

Ao invés do número, pode ser usada a string referente à prioridade do logs:

"emerg" (0), "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6), "debug" (7)

```bash
journalctl -p warning -b0
```

## Checar uso de disco pelos logs


```bash
journalctl --disk-usage
```

## Limpar logs

Arquivar os logs correntes e começar um novo:

```bash
journalctl --rotate
```

Deletar logs mais antigos:

```bash
journalctl --vacuum-time=2d
```

## Restringir tamanho do log

```bash
journalctl --vacuum-size=100M
```

## Restringir número de arquivos de log

```bash
journalctl --vacuum-files=5
```

## Configuração para controle de espaço

Para não precisar intervir manualmente a todo momento que o log ocupar muito espaço, aqui vão alguns campos para alterar no arquivo `/etc/systemd/journald.conf`:


| **Configuração**  | **Descrição**                                |
| ----------------- | -------------------------------------------- |
| SystemMaxUse      | máximo espaço ocupado em disco               |
| SystemMaxFileSize | máximo tamanho individual por arquivo de log |
| SystemMaxFiles    | número máximo de arquivos de log             |

Para surtir efeito as novas configurações, reinicie o serviço:

```bash
systemctl restart systemd-journald
```
