Mamy aplikację, która zapisuje trzy typy dzienników w trzech osobnych plikach: dzienniki dostępu, ogólne dzienniki aplikacji i dzienniki systemowe. Format (i cel) tych dzienników są bardzo różne. I mamy osobne moduły logforwarderów, które wysyłają je osobno do naszego scentralizowanego systemu rejestrowania.
Opierając się na zasadzie traktuj dzienniki jako strumienie zdarzeń , myślimy o przejściu z używania plików na standardowe wyjście. Chociaż znamy niektóre zalety tego podejścia, oznaczałoby to również, że otrzymalibyśmy scalony strumień różnych formatów dzienników, które musielibyśmy ponownie podzielić, zanim będziemy mogli wysłać je do naszego systemu centralnego (Kibana / Splunk / itp.) lub w środku.
Zastanawiamy się, czy istnieją jakieś narzędzia lub zalecenia dotyczące tego, jak powinniśmy podejść do tej sytuacji.
Odpowiedzi:
Nadal szukam metody łączenia / dzielenia, ale tymczasem to podejście zalecane przez dokumentację Kubernetes wydaje się rozsądnym rozwiązaniem: użyj kontenera bocznego dla każdego z osobnych dzienników .
„Wózek boczny” to każdy pojemnik dokowania, którego używasz obok innego kontenera dokowania, aby w jakiś sposób z nim pracować. W takim przypadku dla każdego z trzech dzienników miałbyś osobny pojemnik, który skanuje lub ogonuje dzienniki i dane wyjściowe na standardowe wyjście.
W ten sposób każdy z twoich log-sidecar-container ma swój własny log-docker z własnego standardowego wyjścia. Będąc tak oddzielnymi, możesz używać standardowych metod dokowania (i kubernetes itp.) Do rozdzielania lub agregowania. Oto, co ma do powiedzenia strona Kubernetes:
„Oddzielne strumienie dziennika” wynikają z wbudowanego tagowania, które doker stosuje do dzienników z różnych kontenerów, opisanych w dokumentacji dokera tutaj:
źródło
Pomysł połączenia ich w jeden strumień w celu ich późniejszego podzielenia wydaje się bolesny. Sam nie miałem powodu, aby to zrobić, ale od tego chciałbym zacząć:
Nie jest zbyt eleganckie, że trzeba trochę skonfigurować na hoście, ale jeśli używasz czegoś takiego jak ansible, w którym możesz uruchomić playbook i ustawić to podczas wdrażania w pudełku, nie powinno to być zbyt zły.
źródło