gRPC og høyytelses-API-er · leksjon

Logging av gRPC-samhandlinger

Implementer strukturert logging av gRPC-forespørsler, -svar og -feil for å lette feilsøking og analyse.

Leksjon 1 av 411 trinn

Logging av gRPC-samhandlinger er en gratis leksjon i gRPC og høyytelses-API-er på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i gRPC og høyytelses-API-er, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i gRPC og høyytelses-API-er inneholder totalt 4 leksjoner.

Hvorfor loggføre gRPC-tjenestene dine?

I distribuerte systemer er det avgjørende å forstå hva som skjer inne i gRPC-tjenestene dine. Logger gir innblikk i hvordan applikasjonen oppfører seg.

  • Feilsøking: Finn raskt frem til problemer når noe går galt.
  • Overvåking: Følg med på tjenestenes tilstand, ytelse og bruksmønstre.
  • Revisjon: Registrer viktige hendelser av hensyn til sikkerhet og samsvar.

Uten gode logger kan feilsøking av komplekse gRPC-samhandlinger være som å lete etter en nål i en høystakk!

Forstå strukturert logging

Tradisjonelle logger bruker ofte ren tekst, som er vanskelig for maskiner å tolke. Strukturert logging skriver ut data i et konsekvent, maskinlesbart format, vanligvis JSON.

Det betyr at hver loggoppføring består av nøkkel-verdi-par, noe som gjør den:

  • Søkbar: Du kan enkelt filtrere etter bestemte felt, for eksempel userId og methodName.
  • Analyserbar: Du kan aggregere data for å oppdage trender eller avvik.
  • Automatiserbar: Du kan behandle logger med verktøy for dashbord og varsler.

Dette er en anbefalt praksis for moderne mikrotjenester, særlig med gRPC.

Loggføre starten på en gRPC-forespørsel

Når en gRPC-forespørsel kommer inn, er det et godt første steg å loggføre starten på den. Du bør registrere viktige detaljer, for eksempel metoden som kalles, og en unik identifikator for forespørselen.

I en virkelig applikasjon ville du brukt et loggingsrammeverk, for eksempel Logback eller Zap, til å skrive ut JSON. Her simulerer vi dette med System.out.println for demonstrasjonens skyld.

public class LogRequest {
  public static void main(String[] args) {
    String methodName = "/example.Service/Greet";
    String requestId = "req-a1b2c3d4";
    String clientIp = "192.168.1.100";

    // Simulate structured logging for an incoming gRPC request
    System.out.println("{ \"level\": \"INFO\", "
                     + "\"message\": \"gRPC Request Started\", "
                     + "\"method\": \"" + methodName + "\", "
                     + "\"requestId\": \"" + requestId + "\", "
                     + "\"clientIp\": \"" + clientIp + "\" }");
  }
}

Loggføre detaljer om forespørselsnyttelasten

Noen ganger trenger du å loggføre deler av selve forespørselsmeldingen. Dette kan være nyttig når du feilsøker bestemte inndata.

Viktig: Vær svært forsiktig med å loggføre sensitive data som passord, PII (personlig identifiserbar informasjon) eller økonomiske opplysninger. Masker eller utelat slike data fra loggene!

public class LogPayload {
  public static void main(String[] args) {
    String requestId = "req-a1b2c3d4";
    String userName = "Alice"; // Example non-sensitive payload data
    int userId = 123;

    // Simulate logging parts of the request payload
    System.out.println("{ \"level\": \"DEBUG\", "
                     + "\"message\": \"Request Payload Data\", "
                     + "\"requestId\": \"" + requestId + "\", "
                     + "\"user\": \"" + userName + "\", "
                     + "\"userId\": " + userId + " }");

    System.out.println("Remember: Avoid sensitive data in logs!");
  }
}

Loggføre slutten på et gRPC-svar

Når gRPC-tjenesten har behandlet en forespørsel og sendt et svar, bør du loggføre resultatet. Dette gjør det enklere å følge med på vellykkede operasjoner og måle ytelsen.

Viktige detaljer omfatter gRPC-statuskoden, for eksempel OK og NOT_FOUND, operasjonens ventetid og eventuelt et sammendrag av svaret.

public class LogResponse {
  public static void main(String[] args) {
    String methodName = "/example.Service/Greet";
    String requestId = "req-a1b2c3d4";
    String statusCode = "OK"; // gRPC status
    long latencyMs = 42; // milliseconds to process

    // Simulate structured logging for a gRPC response
    System.out.println("{ \"level\": \"INFO\", "
                     + "\"message\": \"gRPC Request Completed\", "
                     + "\"method\": \"" + methodName + "\", "
                     + "\"requestId\": \"" + requestId + "\", "
                     + "\"statusCode\": \"" + statusCode + "\", "
                     + "\"latencyMs\": " + latencyMs + " }");
  }
}

Håndtere og loggføre gRPC-feil

Feil er uunngåelige. Effektiv logging av dem er avgjørende for feilsøking. Skill mellom gRPC-statusfeil, som UNAVAILABLE og PERMISSION_DENIED, og unntak på applikasjonsnivå.

Loggfør alltid gRPC-statuskoden, en beskrivende feilmelding og helst en stakksporing for uventede applikasjonsfeil, på nivået ERROR.

public class LogError {
  public static void main(String[] args) {
    String methodName = "/example.Service/Greet";
    String requestId = "req-a1b2c3d4";
    String grpcStatus = "NOT_FOUND"; // gRPC specific status
    String errorMessage = "User with ID '123' not found.";

    // Simulate an error log for a gRPC status
    System.out.println("{ \"level\": \"WARN\", "
                     + "\"message\": \"gRPC Request Failed\", "
                     + "\"method\": \"" + methodName + "\", "
                     + "\"requestId\": \"" + requestId + "\", "
                     + "\"grpcStatus\": \"" + grpcStatus + "\", "
                     + "\"errorDetail\": \"" + errorMessage + "\" }");
    try {
      // Simulate an unexpected application exception
      throw new RuntimeException("Database connection failed!");
    } catch (Exception e) {
      System.out.println("{ \"level\": \"ERROR\", "
                       + "\"message\": \"Application Exception\", "
                       + "\"requestId\": \"" + requestId + "\", "
                       + "\"exceptionType\": \"" + e.getClass().getName() + "\", "
                       + "\"exceptionMessage\": \"" + e.getMessage().replace("\"", "\\\"") + "\" }");
    }
  }
}

Loggføring med korrelasjons-ID-er

I mikrotjenester kan én brukerforespørsel gå gjennom flere gRPC-tjenester. En korrelasjons-ID (eller sporings-ID) er en unik identifikator som sendes med forespørselen gjennom alle tjenestene.

Ved å ta med denne ID-en i hver loggoppføring som gjelder forespørselen, kan du enkelt spore hele flyten i en operasjon, selv om den går gjennom mange tjenester. gRPC-metadata er et ideelt sted å overføre disse ID-ene.

Loggføre gRPC-strømmingssamhandling

Logging av strømmende gRPC, enten server-, klient- eller toveisstrømming, krever en litt annen fremgangsmåte. I stedet for ett enkelt forespørsels-/svarpar har du en strøm av meldinger.

  • Loggfør starten og slutten på strømmen.
  • Loggfør hver enkeltmelding som sendes eller mottas, særlig ved feilsøking.
  • Loggfør eventuelle strømspesifikke feil, for eksempel at klienten kobler fra.

Dette gjør det enklere å forstå dataflyten over tid i én enkelt strøm.

Loggnivåer og tips om ytelse

Bruk passende loggnivåer (DEBUG, INFO, WARN, ERROR) for å styre detaljnivået. DEBUG brukes til detaljert utviklingsinformasjon, INFO til normal drift og ERROR til kritiske feil.

  • Ytelse: Overdreven logging kan påvirke ytelsen. Unngå å loggføre store nyttelaster ved høy trafikk.
  • Asynkron logging: Bruk loggingsrammeverk som støtter asynkrone skrivinger, for å unngå å blokkere applikasjonstrådene.
  • Utvalgslogging: For hendelser med svært høyt volum kan du vurdere å loggføre bare et utvalg av forespørslene.

Rask kontroll: Fordeler med logging

Du har lært om strukturert logging for gRPC. La oss teste forståelsen din.

Oppsummering: Effektiv gRPC-logging

Godt jobbet! De har lært hvordan De implementerer effektiv logging for gRPC-tjenestene Deres.

  • Strukturerte logger er avgjørende for moderne mikrotjenester.
  • Logg detaljer om forespørsler og svar, inkludert metode, ID, status og ventetid.
  • Logg alltid feil med relevante detaljer og stack-spor.
  • Bruk korrelasjons-ID-er til å spore forespørsler på tvers av tjenester.
  • Vær oppmerksom på sensitive data, og velg passende loggnivåer.

Deretter skal vi utforske distribuert sporing med OpenTelemetry for å få enda dypere innsikt i gRPC-applikasjonene Deres!

Gratis å komme i gang

Lær deg gRPC og høyytelses-API-er med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Logging av gRPC-samhandlinger» gratis?

Ja – hele teksten i «Logging av gRPC-samhandlinger» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av gRPC og høyytelses-API-er-kurset, kan du oppgradere til CoddyKit PRO. Kurset i gRPC og høyytelses-API-er inneholder totalt 4 leksjoner.

Hva lærer jeg i «Logging av gRPC-samhandlinger»?

Implementer strukturert logging av gRPC-forespørsler, -svar og -feil for å lette feilsøking og analyse. Du øver på gRPC og høyytelses-API-er med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med gRPC og høyytelses-API-er?

Ingen tidligere erfaring er nødvendig. gRPC og høyytelses-API-er på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Logging av gRPC-samhandlinger»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne gRPC og høyytelses-API-er-leksjonen?

Ja. Alle gRPC og høyytelses-API-er-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Logging av gRPC-samhandlinger
  2. Sporing med OpenTelemetry
  3. Overvåking av gRPC-metrikker
  4. Helsesjekk og beredskapsprober
← Tilbake til gRPC og høyytelses-API-er