2016-05-12 24 views
6

Używam grayloga jako centralnego serwera rejestrowania i używam aplikacji gel4 log4j2-appender do wysyłania komunikatów dziennika do grayloga. To działa dobrze. Teraz utworzyłem obraz dokowany mojej aplikacji i mogę uruchomić moje oprogramowanie jako kontener dokowania.Jaka jest najlepsza praktyka wysyłania logów do graylog z aplikacji JVM, która działa w kontenerze dokowania?

Za pomocą okna dokowanego loguję się również do stdout (append konsoli), aby uzyskać logi aplikacji do docker (dzienniki dokowania {containerId}).

Teraz zadaję sobie pytanie, czy mogę zaoszczędzić na nośniku log4j2 gelf i zamiast tego użyć sterownika/wtyczki Docker dla gelf. (patrz https://docs.docker.com/engine/admin/logging/overview/)

Jaka jest tutaj najlepsza praktyka? Myślę, że za pomocą wtyczki dziennika docker wysłałbym całą wiadomość tekstową do grayloga, a graylog musiałby wyodrębnić informacje meta z tego łańcucha (więc muszę podać te dane meta w komunikacie dziennika, na przykład poziomie logu). Może to spowodować większe zużycie zasobów po stronie grayloga i nie jest również możliwe skonfigurowanie okna dokowanego do wysyłania komunikatów o błędach tylko do grayloga. Prowadzi to do większego ruchu w sieci. Korzystając z programu log4j2 gelf-appender, mogę podać niektóre dane meta oprócz komunikatu dziennika, nie uwzględniając go w głównym komunikacie dziennika i nie będzie potrzeby wyodrębniania po stronie grayloga. Możliwe jest również skonfigurowanie, które wiadomości powinny być wysyłane do grayloga na poziomie log_log. Czy ja się mylę? Jakie jest najlepsze rozwiązanie lub jakie są plusy i minusy każdego sposobu wysyłania logów do grayloga?

Odpowiedz

4

Polecam używanie istniejącego aplikatora GELF dla używanej struktury logowania (na przykład logstash-gelf) zamiast rejestrować wszystko na standardowe wyjście i używać sterownika rejestrowania GELF w Dockerze.

Korzystanie z właściwego aplikatora GELF z natywnym środowiskiem rejestrowania Java umożliwia korzystanie z zaawansowanych funkcji, takich jak MDC, w celu wzbogacenia wiadomości z cennymi informacjami strukturalnymi bez konieczności ponownej analizy wiadomości po ich otrzymaniu po stronie serwera. Dzięki sterownikowi rejestrowania Docker GELF otrzymywałeś tylko komunikaty dziennika line-per-line, co szczególnie w aplikacjach Java może być bolesnym problemem (pomyślmy o wielowierszowych śladach stosu).

Większość szkieletów logowania obsługuje pola statyczne, dzięki czemu można np. "Wstrzyknąć" identyfikator kontenera Docker.