Logowanie JSON & Datadog
Dlaczego warto używać JSON do logowania
Jeśli nie korzystasz obecnie z logowania JSON, prawdopodobnie polegasz na logach w postaci zwykłego tekstu i wyrażeniach regularnych, aby nadać im sens. To może działać na początku, ale zacznie się łamać, tracić strukturę i stawać się coraz gorsze w miarę rozwoju systemów. Rejestrowanie JSON jest standardem. W nowoczesnych aplikacjach posiadanie ustrukturyzowanych, łatwych do przeanalizowania logów nie jest już opcjonalne. Zapewnia poziom spójności między usługami, jednocześnie zachowując elastyczność.
Datadog nie bez powodu zaleca rejestrowanie JSON. Gdy dzienniki są emitowane jako prawidłowy JSON, preprocesor Datadog automatycznie analizuje dzienniki i mapuje je na szereg zarezerwowanych atrybutów, które zmniejszają obciążenie i zapewniają spójną ekstrakcję pól. Nie jest wymagana dodatkowa konfiguracja, ponieważ te zarezerwowane atrybuty zapewniają najbardziej odpowiednie pola, ułatwiając integrację z innymi systemami, filtrowanie dzienników, wydajne wyszukiwanie i konfigurowanie alertów. Kluczowe zarezerwowane atrybuty obejmują host, usługę, status, identyfikator śledzenia, identyfikator zakresu i inne, które są niezbędne do obserwacji i rozwiązywania problemów.
Jak to skonfigurować
Z mojego doświadczenia wynika, że istnieje wiele zasobów na temat tego, jak najlepiej skonfigurować logowanie JSON. Głównym punktem odniesienia była dokumentacja Datadog: https://docs.datadoghq.com/logs/log_collection/java/?tab=logback. Uznałem ją za najlepszą, ponieważ Datadog był głównym narzędziem obserwacyjnym, z którego korzystaliśmy, a oni byliby w stanie łatwiej rozwiązywać problemy, gdyby wystąpiły jakiekolwiek problemy.
Korzystając z dokumentacji Datadog jako przewodnika, zacząłem od utworzenia pliku konfiguracyjnego logback-spring.xml. To tutaj odbywa się większość pracy. Początkowo eksperymentowałem z różnymi koderami JSON i dodawałem pola, które uważałem za przydatne. W końcu zdałem sobie sprawę z siły prostoty: czysta, minimalna konfiguracja jest łatwiejsza w utrzymaniu i mniej podatna na awarie.
<springProfile name="json-logs">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
Po dodaniu wymaganych zależności Logback i dodaniu tego kodu do mojego pliku logback-spring.xml, ostatnim ważnym krokiem jest ustawienie "json-logs" jako aktywnego profilu Spring w YAML aplikacji. Zapewnia to, że rejestrowanie JSON jest włączone w całym środowisku i działa spójnie we wszystkich usługach.
Jeśli te kroki zostały wykonane poprawnie, powinieneś być w stanie przejrzeć logi i zobaczyć wyniki. Powinny one znajdować się w dzienniku klucz-wartość podobnym do tego:
{"@timestamp":"2025-1-13T13:02:27.512333-02:00","@version":"1","message":"Tomcat initialized with port 8080(http)",
"logger_name":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer","thread_name":"main","level":"INFO",
"level_value":20000,"appName":"json-logs"}
W tym momencie dzienniki w Datadog powinny być uporządkowane, korelacja śladów powinna działać dla dzienników z identyfikatorami śladów, a atrybuty powinny być bardziej szczegółowe i spójne.
Typowe błędy & Porady
- Użyj appendera plików, jeśli jest to najlepsze rozwiązanie dla twojego systemu. W naszym środowisku appender konsoli lepiej odpowiadał naszym potrzebom
- Nie daj się złapać na różnorodność opcji kodera JSON; prostsze jest zwykle lepsze, przynajmniej na początku
- Sprawdź istniejące reguły przetwarzania dzienników w agencie Datadog. Reguły te mogą zakłócać działanie dzienników JSON i uniemożliwiać ich prawidłowe analizowanie lub dostarczanie. Upewnij się, że starsze rejestratory nie są w konflikcie z twoją konfiguracją.
- Aby uzyskać większą kontrolę, warto rozważyć utworzenie wielu profili Spring. Pozwala to na przełączanie między poziomami lub formatami rejestrowania w różnych środowiskach bez konieczności zmiany kodu aplikacji
- Jeśli śledzenie nie działa dla wielu dzienników w Datadog, dzieje się tak, ponieważ automatycznie próbkują śledzenie dla wielu dzienników. JSON działa, nie martw się, ale możesz ustawić go na inną szybkość
Dzięki odpowiedniej konfiguracji logowanie JSON w Datadog staje się niezawodne i znacznie łatwiejsze w utrzymaniu. Usuwając starsze założenia i utrzymując prostą konfigurację, zyskujesz uporządkowane dzienniki, spójne pola, korelację śledzenia oraz łatwiejsze filtrowanie i ostrzeganie. Logowanie JSON to nie tylko najlepsza praktyka; jest ono niezbędne do poprawy obserwowalności w nowoczesnych aplikacjach.
O autorze
Podoba ci się to, co usłyszałeś? Masz pytania dotyczące tego, co jest dla Ciebie odpowiednie? Chętnie porozmawiamy! Skontaktuj się z nami