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

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

Chase Hollander
Programista AEM w Arbory Digital

Agile Certified Professional, programista i konsultant z doświadczeniem w AEM

Kontakt z Chase na Linkedin

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

Powiązane artykuły

category
AEM Technical Help
tags
number of rows
1