Dlaczego polegasz na dziennikach/var/log/messages dla logów aplikacji? Moim zdaniem logi aplikacji powinny być niezależne.
Załóżmy, że masz java, ruby, python, węzeł, aplikację golang (cokolwiek), wtedy możesz pompować dzienniki w kontenerze w coś takiego jak /var/log/myapp/myapp.log. RUN swój dziennik forwarder w pojemniku wysyłać ELK wszystko pod /var/log/myapp/myapp.log
Zazwyczaj nadawca pokaże nazwę hosta jako swojej container_id oparciu o zmiennej HOSTNAME
env. Na przykład:
[[email protected] ~]# env | grep HOSTNAME
HOSTNAME=1dfab5ea15cd
[[email protected] ~]#
Można również użyć coś jak Beaver lub log-courier wysyłać dzienniki.
Możesz obracać swoje dzienniki i pozbywać się starych dzienników, jeśli chodzi o miejsce na dysku.
Jeśli więc chcesz użyć polecenia docker logs
, aby przekierować do STDOUT i STDERR, będziesz chciał, aby twoja aplikacja zapisała coś w dzienniku, który identyfikuje kontener/aplikację. (Kontener może być nazwą hosta ponownie) Ale możesz przekierować na numer /var/log/app/application.log
na komputerze głównym. Coś jak:
containerid/<hostname>-application: INFO: <message>
Nie myśl jest jakaś inna droga ...
Można również przełączyć na Fluentd zamiast Logstash jako inną opcję.
"Dzienniki-dokowania -f" mogą wystarczyć, jeśli tak się zaczęło –