# journalctl: фильтры и follow

Индекс LLMS: [llms.txt](/llms.txt)

---

Системный журнал systemd — это первое место, куда нужно смотреть, когда сервис упал или узел начал жрать CPU. `journalctl` умеет гораздо больше, чем вывести весь лог подряд: фильтровать по юнитам, приоритетам, временным окнам и читать в реальном времени. Ниже — рабочий набор, который я использую ежедневно.

## Follow in real time

Поведение, аналогичное `tail -f`, но с учётом структурированного формата journald:

```bash
journalctl -f
```

Флаг `-f` (short for `--follow`) выводит новые записи по мере их появления. По умолчанию показывает все юниты — удобно, когда не знаешь, где именно горит.

> [!TIP]
> Добавь `--no-pager`, чтобы вывод не перехватывался `less` и не блокировал терминал в скриптах и CI.

```bash
journalctl -f --no-pager
```

## Filter by unit

Юнит — самый частый фильтр. Один ключ `-u` и конкретное имя сервиса:

```bash
journalctl -u nginx.service
journalctl -u docker.service
```

Можно передать несколько юнитов — journalctl покажет записи из всех указанных:

```bash
journalctl -u nginx.service -u postgresql.service
```

> [!NOTE]
> Имя юнита указывается с суффиксом `.service`. Если забыть суффикс, journalctl может не найти совпадений или выдать неожиданный результат.

## Priority and time filters

Фильтр по приоритету задаётся через `-p` (или `--priority`). Уровни от 0 до 7:

| Приоритет | Значение |
|-----------|----------|
| 0 | emerg |
| 1 | alert |
| 2 | crit |
| 3 | err |
| 4 | warning |
| 5 | notice |
| 6 | info |
| 7 | debug |

Показать только ошибки и критические:

```bash
journalctl -p err
```

Временные окна — через `--since` и `--until`. Поддерживаются абсолютные даты и относительные выражения:

```bash
journalctl --since "1 hour ago"
journalctl --since today --until "2 hours ago"
journalctl --since "2025-01-15 08:00:00" --until "2025-01-15 12:00:00"
```

> [!WARNING]
> `--since` без `--until` показывает от указанного момента до настоящего. Если указать оба — окно закрытое. Проверяй порядок дат, иначе получишь пустой вывод.

## Combining flags

В реальной работе фильтры комбинируют. Типичный запрос — смотреть ошибки конкретного сервиса за последний час в реальном времени:

```bash
journalctl -u nginx.service -p err --since "1 hour ago" -f --no-pager
```

Ещё один частый паттерн — вывод последних N строк по юниту с фильтром приоритета:

```bash
journalctl -u postgresql.service -p warning -n 100 --no-pager
```

Здесь `-n 100` ограничивает вывод последними 100 записями.

Сводка по ключам из повседневного арсенала:

| Флаг | Назначение |
|------|------------|
| `-u <unit>` | Фильтр по юниту |
| `-f` | Follow (новые записи в реальном времени) |
| `-p <level>` | Минимальный приоритет |
| `--since <time>` | Начало временного окна |
| `--until <time>` | Конец временного окна |
| `-n <count>` | Последние N записей |
| `--no-pager` | Без постраничника |

> [!TIP]
> Если journalctl выдаёт пустой результат без ошибок — проверь, не переведён ли сервис в `inactive` или `failed`. Статус можно увидеть через `systemctl status <unit>`. Также убедись, что journald не ротировал нужные записи: `journalctl --disk-usage` покажет, сколько места занимает журнал.
