K „rotování“ logů Apache serveru se používá utilitka rotatelogs. Ta při správném nastavení zajistí například na každý den samostatný soubor s logy.
Instalace rotatelogs
Nejprve spustíme příkazy na aktualizaci balíčků.
sudo apt-get update
sudo apt-get upgrade
A následně rotatelogs nainstalujeme. Na Raspberry Pi je součástí balíčku apache2-utils.
sudo apt-get install apache2-utils
Konfigurace rotatelogs
Nyní máme všechno připraveno a můžeme začít s konfigurací.
Příkazem which zjistíme, kde máme rotatelogs nainstalován.
which rotatelogs
Vypíše se nejspíše /usr/sbin/rotatelogs. Tuto cestu využijeme a nastavíme ji do konfigurace logovacích souborů apache serveru.
V konfiguraci stránek (adresář sites-available) hledáme řádky, které začínají na CustomLog nebo ErrorLog.
Příklad takovýchto řádků:
CustomLog "/path/to/log/access_log" combined
ErrorLog "/path/to/log/error_log"
Tyto řádky změníme a přesměrujeme výstup do utility rotatelogs
CustomLog "|/usr/bin/rotatelogs -l /path/to/logs/access_log.%Y.%m.%d 86400" combined
ErrorLog "|/usr/bin/rotatelogs -l /path/to/logs/error_log.%Y.%m.%d 86400"
Toto nastavení zajistí, že na každý den bude samostatný soubor access_log a error_log. V něm pak budou přístupy jen z tohoto dne.
Možné konfigurace
CustomLog "|/usr/bin/rotatelogs -l /path/to/logs/access_log.%Y.%m.%d 86400" combined
Generuje na každý den nový soubor. Ukázka názvu souboru access_log.2019.06.12.
CustomLog "|/usr/bin/rotatelogs /path/to/logs/access_log 5M" combined
Generuje nový soubor v okamžiku, kdy původní dosáhl velikosti 5MB.
CustomLog "|/urs/bin/rotatelogs -n 15 /path/to/logs/access_log 5M" combined
Generuje nový soubor, když původní dosáhl 5MB a pojmenovává je access_log, access_log.1,... a celkem jich udrží 15.
Podmíněné logování
Občas bývá výhodné vytvořit samostatné logy pro konkrétní typy incidentů.
CustomLog "/path/to/logs/access_log-404" combined "expr=%{REQUEST_STATUS} eq 404"
Toto nastavení zajistí, že v konkrétním logu budou jen přístupy, které skončili HTTP statusem 404 Page Not Found (Požadovaný dokument nebyl nalezen, ale v budoucnosti může ale i nemusí být dostupný.).
CustomLog "/path/to/logs/access_log-403" combined "expr=%{REQUEST_STATUS} eq 403"
Zde se zase filtrují všechny přístupy se HTTP statusem 403 Forbidden (Požadavek byl legální, ale server odmítl odpovědět. Na rozdíl od 401 Unauthorized response zde nehraje žádnou roli autorizace.).
Zdroje:
Debian dokumentace rotatelogs
Apache dokumentace rotatelogs
Apache dokumentace logování
Apache dokumentace podmínek