Когда
/var/log начинает раздуваться, виноват почти всегда один-два шумных сервиса. Но в journald нет привычных файлов - значит нужно считать по-другому. Значит будем брать сервис, считать объем его логов и сравниваем во времени.1️⃣ Сколько логов пишет сервис. Пример для nginx:
journalctl -u nginx --since "1 hour ago" | wc -c
Получаем объем логов за час (в байтах).
2️⃣ Быстрый топ шумных сервисов
systemctl list-units --type=service --no-legend | awk '{print $1}' |
while read -r svc; do
size=$(journalctl -u "$svc" --since "1 hour ago" 2>/dev/null | wc -c)
echo "$size $svc"
done | sort -nr | head
Результат:
12345678 docker.service
9876543 nginx.service
1234567 ssh.service
Сразу видно, кто генерирует больше всего логов.
3️⃣ Контроль роста. Сохраняем текущее состояние:
journalctl -u nginx --since "1 hour ago" | wc -c > /tmp/nginx.size
Через время:
old=$(cat /tmp/nginx.size)
new=$(journalctl -u nginx --since "1 hour ago" | wc -c)
echo "Рост: $((new - old)) байт"
4️⃣ Скрипт
#!/usr/bin/env bash
SINCE="10 min ago"
THRESHOLD=1000000 # 1 MB
systemctl list-units --type=service --no-legend | awk '{print $1}' |
while read -r svc; do
size=$(journalctl -u "$svc" --since "$SINCE" 2>/dev/null | wc -c)
if (( size > THRESHOLD )); then
echo "ALERT: $svc → $size bytes за $SINCE"
fi
done
BashTex 📱 #systemd #logs