Właśnie zaczynam pracę z Dockerem i Richtem, teraz próbuję wymyślić, jak skonfigurować moje pierwsze dokowane środowisko Apache 2 / PHP. Do tej pory korzystałem z pełnych maszyn wirtualnych systemu Linux, w których korzystałem z plików dziennika zapisywanych w katalogu / var / log / apache2, a następnie korzystałem z polecenia „logrotate”, aby każdego dnia przeskakiwać do nowego pliku.
Pliki dziennika były używane głównie do natychmiastowego wykrywania błędów (tj. Zaloguj się na serwerze i używaj mniej do otwierania bieżących plików access.log i error.log) oraz do fail2ban.
Jeśli mam rację, nie jest to możliwe w środowisku Dockera - głównie dlatego, że zwykle nie można zalogować się do kontenerów, aby przejrzeć dzienniki. Również dzienniki zostaną utracone, jeśli pojemnik zostanie usunięty.
Więc: Jaka jest najczęstsza metoda pracy z / emulate / replace access.log / error.log w takiej sytuacji? Jakie są typowe rozwiązania dla środowisk produkcyjnych i programistycznych?
Moje dotychczasowe pomysły obejmują używanie udziału NFS (powolne i mogą powodować kolizje nazw plików, jeśli nie są ostrożne) i logstash (nie jesteś pewien, czy jest to warte wysiłku i wykonalności dla mniejszych witryn, a nawet środowisk deweloperskich ?), Ale jestem pewien, że mądrzy ludzie wymyśliłeś lepsze rozwiązania?
Nie jestem pewien, czy to robi różnicę, ale obecnie opieram swój obraz Dockera na php: 5.6-apache .
źródło
docker attach <container name>
jest to dobry sposób, aby zobaczyć standardowe wyjście ze swojego kontenera. Ale uwaga: jeśli zrobisz ctrl + d lub ctrl + c, to ZAKOŃCZY (sigkill) twoje bieżące zadanie. Musisz więc odłączyć go prawidłowo za pomocą klawisza Escapectrl+p+q
. Jeśli chcesz po prostu wykonać powłokę w kontenerze, wolę użyćexec
powyższego polecenia.Co powiesz na zapisywanie dziennika dostępu i błędów na stderr i stdout?
https://mail-archives.apache.org/mod_mbox/httpd-users/201508.mbox/%3CCABx2=D-wdd8FYLkHMqiNOKmOaNYb-tAOB-AsSEf2p=ctd6sMdg@mail.gmail.com%3E
https://gist.github.com/afolarin/a2ac14231d9079920864
Scentralizowane rejestrowanie za pomocą ELK pozwoliłoby jednak na bardziej proaktywne monitorowanie. Ale sam już o tym pomyślałeś.
źródło
Do tej pory kilkakrotnie wymieniłem „ dzienniki dokerów ”.
Jestem absolutnym nowicjuszem Dockera, więc może to stanowić rozwiązanie mojego problemu - ale jak dotąd nie w pełni zrozumiałem koncepcję tego polecenia.
Wygląda na to, że Docker przechowuje wszystkie standardowe wyjścia w plikach JSON w / var / lib / docker / container / i daje mi szansę na dostęp do nich poprzez komendę logs.
Jak dotąd nie jestem pewien, jak właściwie wykorzystać dane wyjściowe.
źródło
Być może ta funkcja nie istniała po zadaniu pytania, ale argumentem run -v można zamontować katalog na hoście na katalogu w kontenerze.
W ten sposób pliki dziennika (lub inne) przetrwają po usunięciu kontenera i można uzyskać dostęp do plików tak, jakby apache był zainstalowany na hoście, a nie w kontenerze.
Alternatywnie, możesz w jakiś sposób wypchnąć zmodyfikowane pliki dziennika do centralnej lokalizacji. Aby to osiągnąć, stos Kibana używa bitów plików, ale powinno być możliwe niezależne uruchamianie bitów plików, jeśli nie obchodzi cię reszta stosu.
źródło
obraz dokera Wybrałem właśnie wszystkie pliki * .log do / dev / stdout i / dev / stderr, więc nie mogłem ich odczytać.
po usunięciu plików i ponownym uruchomieniu apache mogę pobrać dzienniki z / var / log / w oknie dokowanym.
źródło
W pliku konfiguracyjnym apache możesz dodać:
CustomLog / dev / stdout
ErrorLog / dev / stderr
i aby zobaczyć dzienniki, użyj poniższego polecenia:
logi dokerów kontener_id
źródło