Posiadając pod opieką kilka(dziesiąt) serwerów warto mieć spójną politykę logowania – co, gdzie, przez jaki czas i do jakiego pliku.
Wygodnym rozwiązaniem jest też stworzenie jednego serwera który będzie zapisywał logi zebrane ze wszystkich serwerów – nie musimy wtedy logować się na każdy serwer z osobna, możemy też napisać skrypt który będzie na bieżąco analizował logi i wysyłał powiadomienia.
Jest to też przydatne wtedy gdy jeden z naszych serwerów ulegnie awarii i konieczny jest restart – możemy wtedy przejrzeć wszystkie logi z momentu samej awarii.
Konfiguracja zarówno serwera zapisującego logi, jak i klienta który je wysyła jest banalnie prosta – zajmuje nie więcej niż 10 minut. Do dzieła!
Konfiguracja serwera – ip 35.222.9.184 (instance 1)
1) Instalujemy pakiet rsyslog
1 | dnf install rsyslog -y |
2) Edytujemy plik /etc/rsyslog.conf i odkomentowywujemy:
1 2 | module(load="imudp") # needs to be done just once input(type="imudp" port="514") |
3) Restartujemy serwer rsyslog:
1 | service rsyslog restart |
4) Otwieramy port 514 UDP na firewallu:
1 2 3 | firewall-cmd --permanent --add-port=514/udp firewall-cmd --reload |
Konfiguracja klienta (instance 2):
1) Instalujemy pakiet rsyslog:
1 | dnf install rsyslog -y |
2) Edytujemy plik /etc/rsyslog.conf i zmieniamy:
1 | *.info;mail.none;authpriv.none;cron.none /var/log/messages |
na
1 | *.info;mail.none;authpriv.none;cron.none @35.222.9.184 |
Oczywiście zamiast podanego powyżej ip podajemy adres ip naszego serwera który zbiera logi.
3) restartujemy rsyslog-a:
1 | service rsyslog restart |
Weryfikacja:
Na serwerze zbierającym logi otwieramy plik /var/log/messages i nasłuchujemy zmian:
1 | tail -f /var/log/messages |
Możemy na kliencie zainstalować dowolny pakiet ( np nano) – i zobaczymy że do naszego pliku dochodzą wpisy z zewnętrznego klienta (instance-2):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [googlecloud@instance-1 ~]$ sudo tail -f /var/log/messages Apr 20 05:53:36 instance-1 dnf[2355]: CentOS-8 - Base 23 kB/s | 3.8 kB 00:00 Apr 20 05:53:36 instance-1 dnf[2355]: CentOS-8 - Extras 8.6 kB/s | 1.5 kB 00:00 Apr 20 05:53:36 instance-1 dnf[2355]: CentOS-8 - PowerTools 31 kB/s | 4.3 kB 00:00 Apr 20 05:53:37 instance-1 dnf[2355]: Google Compute Engine 1.0 kB/s | 454 B 00:00 Apr 20 05:53:37 instance-1 dnf[2355]: Google Cloud SDK 1.7 kB/s | 454 B 00:00 Apr 20 05:53:37 instance-1 dnf[2355]: Metadata cache created. Apr 20 05:53:38 instance-1 systemd[1]: Started dnf makecache. Apr 20 05:56:29 instance-1 GCEGuestAgent[1122]: 2020-04-20T05:56:29.0043Z GCEGuestAgent Info: Updating keys for user googlecloud. Apr 20 05:59:14 instance-1 systemd[1]: Starting Cleanup of Temporary Directories... Apr 20 05:59:14 instance-1 systemd[1]: Started Cleanup of Temporary Directories. Apr 20 06:11:51 instance-2 systemd[1]: Started /usr/bin/systemctl start man-db-cache-update. Apr 20 06:11:52 instance-2 systemd[1]: Starting man-db-cache-update.service... Apr 20 06:11:53 instance-2 systemd[1]: Started man-db-cache-update.service. Apr 20 06:12:01 instance-2 systemd[1]: Started /run/user/0 mount wrapper. Apr 20 06:12:01 instance-2 systemd[1]: Created slice User Slice of UID 0. Apr 20 06:12:01 instance-2 systemd[1]: Starting User Manager for UID 0... Apr 20 06:12:01 instance-2 systemd[1]: Started Session 23 of user root. Apr 20 06:12:01 instance-2 systemd[3314]: Starting D-Bus User Message Bus Socket. |
I to tyle – jak widać całość działa poprawnie, a my mamy wszystko w jednym miejscu.