Where are system logs stored in Apple unified logging?

Mac-logfiler: En dybdegående guide til Unified Logging

15/01/1999

Rating: 4.58 (10841 votes)

Som IT-administrator eller superbruger har du næsten helt sikkert skullet tjekke en eller anden form for logfil, når du har undersøgt et problem. Logfiler fortæller historien om, hvad der sker på et system, så de kan være enormt nyttige både til fejlfinding og til at lære, hvorfor systemet opfører sig, som det gør. Med introduktionen af Apples Unified Logging-system har måden, vi tilgår disse oplysninger på, ændret sig markant.

How do I use a log command in Mac OS X?
The log command is built into macOS at /usr/bin/log. For full details on how to use it, type man log in Terminal to read the man (ual) page for the command. (Press q to exit.) In this section, we’ll cover the basics to get you started.

I denne guide dækker vi det grundlæggende i Apples samlede logningssystem, gennemgår hvordan man læser logfilerne ved hjælp af log-kommandoen, og giver nogle praktiske eksempler på, hvordan man filtrerer logbeskeder for at finde dem, der er vigtigst for dig.

Indholdsfortegnelse

Hvad er Unified Logging?

Da Unified Logging først blev introduceret på WWDC 2016, var det en ret radikal og dristig ændring. Indtil da blev de fleste – hvis ikke alle – logfiler på Apple-platforme registreret ved hjælp af standard Unix-logningssystemer, som normalt skrev til flade tekstfiler på disken, f.eks. i /var/log/. Mange husker sikkert /var/log/system.log som det primære sted at lede.

Men efterhånden som Apples platforme blev mere og mere komplekse gennem årene, steg mængden af logs, de genererede, også. Da Apple introducerede Unified Logging, kaldte de det "logning for fremtiden". Målet var at skabe et fælles logningssystem for alle platforme med følgende mål:

  • At levere en enkelt, effektiv logningsmekanisme for både bruger- og kernetilstand.
  • At maksimere informationsindsamling med minimal observatøreffekt (dvs. indsamle så meget data som muligt med mindst mulig påvirkning af ydeevnen).
  • At holde så meget logning tændt så meget af tiden som muligt.
  • At designe systemet med privatliv for øje fra starten.

I dag gemmes de mest nyttige systemlogs ikke længere i flade filer. De lagres nu i komprimerede, binære filer, og vi skal bruge log-kommandoen i Terminal til at udtrække de oplysninger, vi leder efter. Selvom nogle logfiler som /var/log/install.log stadig findes, giver de sjældent det fulde billede. For at få et komplet overblik over, hvad der sker på et system, skal du bruge log-kommandoen til at udforske den samlede log.

Grundlæggende brug af `log`-kommandoen

log-kommandoen er indbygget i macOS og findes i /usr/bin/log. For fulde detaljer kan du altid skrive man log i Terminal. Her dækker vi de mest essentielle kommandoer for at komme i gang.

Visning af historiske logs med `log show`

For at se logfiler fra en bestemt tidsperiode, bruger vi log show. Hvis du for eksempel vil se alle systemlogs fra de sidste 5 minutter, kan du køre:

sudo log show --last 5m

Du vil sandsynligvis blive overrasket over den enorme mængde beskeder. Det skyldes Apples mål om at logge så meget som muligt. Vi kan specificere forskellige tidsperioder med --last flaget:

  • --last 10m - De sidste 10 minutter.
  • --last 2h - De sidste 2 timer.
  • --last 3d - De sidste 3 dage.

Du kan også specificere et præcist tidsvindue med --start og --end flagene, efterfulgt af et tidsstempel.

Streaming af logs i realtid med `log stream`

Hvis du vil se logs, mens de sker – ligesom den gamle tail -f kommando – kan du bruge log stream:

sudo log stream

Dette er yderst nyttigt, når du skal fejlfinde et problem, mens det opstår. Tryk på Ctrl+C for at stoppe streamen. På grund af den store mængde data kan det dog være svært at finde det, man leder efter, uden filtrering.

Kunsten at Filtrere: Brug af Prædikater

Den store mængde logdata kan gøre det svært at finde nålen i høstakken. Det er her, prædikatfiltrering bliver et uundværligt værktøj. Ved at bruge prædikater kan vi bede logningssystemet om kun at vise os de beskeder, der matcher specifikke kriterier. Dette er langt mere effektivt end at hente alle logs og derefter bruge et værktøj som grep.

Et prædikat angives med --predicate flaget. De mest almindelige felter, vi filtrerer på, er:

  • process: Viser kun logs fra en specifik proces (f.eks. screensharingd).
  • subsystem: Viser kun logs fra et specifikt subsystem (f.eks. com.apple.TimeMachine). Et subsystem er et større funktionelt område af en app eller operativsystemet.
  • category: Bruges til at afgrænse specifikke områder inden for et subsystem.
  • eventMessage: Dette er selve "brødteksten" i logbeskeden.

Du kan kombinere flere prædikater med && (eller and) for at indsnævre din søgning yderligere.

Praktiske Eksempler på Filtrering

Lad os se på nogle konkrete eksempler, der viser styrken ved prædikater.

Time Machine-logs

For at se Time Machine-aktivitet fra den seneste time:

log show --predicate 'subsystem == "com.apple.TimeMachine"' --info --last 1h

Bemærk, at vi tilføjede --info flaget. Uden dette ville nogle af de informative beskeder, vi leder efter, muligvis ikke blive vist.

Where are system logs stored in Apple unified logging?
With the introduction of Apple Unified Logging, most useful system logs are no longer stored in flat files like /var/log/system.log. They are now stored in binary files and the log command is used to extract what we’re looking for. You could display all system logs for the last 5 minutes (this will have a lot of noise):

Skærmdelingsforsøg (VNC)

Hvis du vil se, hvem der har logget ind via skærmdeling, kan du søge i screensharingd processen.

For at se succesfulde VNC-logins inden for de sidste 24 timer:

log show --predicate 'process == "screensharingd" && eventMessage CONTAINS "Authentication: SUCCEEDED"' --last 24h

For at se mislykkede VNC-logins inden for de sidste 24 timer:

log show --predicate 'process == "screensharingd" && eventMessage CONTAINS "Authentication: FAILED"' --last 24h

Find årsagen til genstart

Denne kommando kan hjælpe med at identificere årsagen til en uventet genstart eller nedlukning:

log show --predicate 'eventMessage contains "Previous shutdown cause"' --last 72h

Du vil se en talkode. Kode 5 betyder en normal, korrekt nedlukning. Andre koder kan indikere problemer som kernel panics eller hardwarefejl.

Tabel over Almindelige Subsystemer

Det kan være svært at vide, hvilke subsystemer man skal søge efter. Her er en tabel med nogle almindelige filtre, der er nyttige for administratorer.

BeskrivelseFilterparametre
AirDropsubsystem: com.apple.sharing
category: AirDrop
Apple Push Notification Service (APNs)process: apsd
subsystem: com.apple.apsd
macOS Installer og Software Updateprocess: softwareupdated
subsystems: com.apple.SoftwareUpdate, com.apple.mac.install
MDM (Mobile Device Management)process: mdmclient
subsystem: com.apple.ManagedClient
Netværksubsystem: com.apple.network
Brugerloginprocess: loginwindow
subsystem: com.apple.login

Håndtering af Private Data: `<private>`

Når du gennemgår logs, vil du ofte støde på strenge, der siger <private>. Dette er en del af Apples fokus på privatliv. Systemet maskerer automatisk data, der potentielt kan identificere en bruger, netværket eller anden dynamisk information.

Et eksempel fra Open Directory kunne se sådan ud:

opendirectoryd: (...) Authentication succeeded for <private> (...)

Som standard er brugernavnet maskeret. Under fejlfinding kan det dog være nødvendigt at se disse private data. Dette kan aktiveres via en konfigurationsprofil, enten for specifikke subsystemer eller for hele systemet. Efter installation af en sådan profil, ville den samme logbesked vise det faktiske brugernavn:

opendirectoryd: (...) Authentication succeeded for ladmin (...)

Det anbefales kun at aktivere logning af private data for specifikke subsystemer og kun når det er absolut nødvendigt. For at skjule dataene igen, skal du blot fjerne konfigurationsprofilen.

Ofte Stillede Spørgsmål (FAQ)

Hvorfor kan jeg ikke længere finde alt i `/var/log/system.log`?

Apple skiftede til Unified Logging med macOS Sierra. Dette er et mere moderne, effektivt og binært system designet til at håndtere den enorme mængde logs, som moderne systemer genererer. Du skal bruge log-kommandoen for at få adgang til disse data.

Hvad er den største fordel ved at bruge prædikater i stedet for `grep`?

Prædikater filtrerer data ved kilden, før de overhovedet vises. Dette er markant hurtigere og mere ressourceeffektivt end at hente alle logs og derefter søge i dem med et tekstværktøj som grep.

Hvor længe gemmes logs typisk?

Unified Logging-systemet gemmer generelt logs i cirka 30 dage, men dette kan variere afhængigt af systemaktivitet og ledig diskplads.

Findes der en grafisk måde at se disse logs på?

Ja, du kan bruge programmet Konsol (Console), som findes i mappen /Programmer/Hjælpeprogrammer/. Konsol-appen giver en grafisk brugerflade til at se og filtrere logs. For avancerede forespørgsler og automatisering giver log-kommandoen i Terminalen dog langt større fleksibilitet og kraft.

Konklusion

Med log-kommandoen og prædikatfiltrering er mulighederne for at se, streame, indsamle og filtrere dine logs for at finde den information, du har brug for, enorme. Kommandoerne ovenfor er kun starten på, hvad log-kommandoen kan gøre for at fortælle historien om, hvad der sker på et system. Når du bruger lidt tid på at se og gennemgå logs, kan du begynde at identificere almindelige "rytmer" eller mønstre, hvilket gør det lettere at spotte uregelmæssigheder. Jo mere du lærer om dem, jo mere nyttige bliver logs til både fejlfinding og til at opdage, hvordan og hvorfor ting sker på et system - og det gør log-kommandoen til et essentielt værktøj for enhver Apple-administrator.

Hvis du vil læse andre artikler, der ligner Mac-logfiler: En dybdegående guide til Unified Logging, kan du besøge kategorien Teknologi.

Go up