systeemd

Master journalctl begrijpt systemd logs

Master journalctl begrijpt systemd logs
Systemd is de nieuwe tool voor het beheren van services. Het is oorspronkelijk gemaakt door Red Hat en maakt het mogelijk om services beter te beheren via een gecentraliseerd proces dat services controleert en start als dat nodig is. Maar systemd omvat ook een containersysteem, een cron-systeem, een manier om op een veilige manier tijdelijke mappen aan services aan te bieden en ook een logboeksysteem - daar gaan we ons hier op richten.

Logboeken begrijpen is belangrijk: als u ooit op een server valt die een bug heeft of is gehackt, is uw enige manier om te begrijpen wat er is gebeurd meestal via logbestanden. De belangrijkste applicatie die we gaan gebruiken is journalctl vandaar de naam van het artikel. Dus luister goed, want op de juiste dag ben je misschien blij om te weten hoe het werkt.

Waar worden systemd-logboeken opgeslagen? En in welk formaat het is opgeslagen??

We gaan ervan uit dat je een normaal systeem hebt, omdat systemd kan worden aangepast om op uitzonderlijke plaatsen te zijn. Ook sommige Linux-distributies zoals Ubuntu 16.04 heeft standaard permanente logging uitgeschakeld, waardoor systemd zijn werk niet correct kan doen. Als je zo'n distributie hebt, bewerk dan /etc/systemd/journald.conf bestand, verander Storage=auto naar Storage=persistent en tot slot, reboot.

Dus normaal gesproken vindt u de logbestanden van systemd in /var/log/journal. Het journaalsysteem is zelf een service genaamd system-journald.onderhoud.  Laten we proberen de bestanden in deze map op te sommen:

# ls /var/log/journal/ -R
/var/log/journaal/:
15e43c1734090ac7fbea6b40fcd99d31
 
/var/log/journal/15e43c1734090ac7fbea6b40fcd99d31:
[email protected]~
systeem@62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.logboek
[email protected]~
gebruiker-1000@2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.logboek
gebruiker-1000.logboek
[veel andere bestanden zoals die hierboven...]

Omdat ik wil dat je blijft lezen, moest ik de uitvoer inkorten omdat deze veel bestanden bevat (in mijn voorbeeld meer dan 60 bestanden), sorry daarvoor! In de verleiding om er misschien een te openen?

# head --bytes=512 /var/log/journal/15e43c1734090ac7fbea6b40fcd99d31/[email protected]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.logboek
?s,q?n/FLz???Ulz?ik?]????
?_?b???z????O?y1KN ?ik?eO??W?jij?  ?=?x0?L?d?7??X4n#?e? d3l?
p??o|MFO:?!qs?.tK??R?\??1?|5  ????$?g??#?S??;??B7???????t???Y????mN?q????ZQ
?Yv?e?????BD?C?? wF??d|
?2?? 7???????[??niet?=8????c?2=p?&?"   ?0
????*????_??  ???
5?????yk?G? ?6?|??jij??w: #12?Y??
3      TU;???'?jX??2?X'?=??[[e-mail beveiligd]
[e-mail beveiligd]?_?>??3S???,lR?.?$?g?L???zo?/E??M1??q???

Hé, kijk, dat ziet er niet echt uit als de gebruikelijke logbestanden die je goed ziet? Maak je geen zorgen, dit bestand is niet beschadigd, je hebt zojuist een aspect van systemd ontdekt: systemd slaat bestanden op in een binair formaat. Daarom is het zo klein mogelijk: gestructureerde gegevens zoals tijd of locatie worden direct binair opgeslagen, wat over het algemeen minder bytes in beslag neemt dan tekst. Maar dat is niet de enige reden.

systemd slaat niet alleen logregels op. De bedoeling is om het monitoren en verkennen van logboeken eenvoudiger te maken. Om u bij deze taak te helpen, zijn logberichten in feite een regel tekst vergezeld van gegevens zoals de ernst van het logbestand (waarschuwing, fout, enz.), of zelfs velden die alleen nuttig zijn voor uw toepassing (URL gevraagd bijvoorbeeld).

# journalctl --output=uitgebreide --all
PRIORITEIT=6
_UID=0
_GID=0
_CAP_EFFECTIVE=3ffffffffff
_BOOT_ID=ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID=bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME=linux
SYSLOG_FACILITY=3
SYSLOG_IDENTIFIER=systeemd
EENHEID=dnf-makecache.onderhoud
_TRANSPORT=journaal
_PID=1
_COMM=systeem
_EXE=/usr/lib/systemd/systemd
_CMDLINE=/usr/lib/systemd/systemd --switched-root --system --deserialize 76
_SYSTEMD_CGROUP=/init.reikwijdte
_SYSTEMD_UNIT=init.reikwijdte
_SYSTEMD_SLICE=-.plak
_SELINUX_CONTEXT=system_u:system_r:init_t:s0
CODE_FILE=src/core/taak.c
CODE_LINE=795
CODE_FUNCTION=job_log_status_message
MESSAGE_ID=a76e08846f5f0971371dbb11126e62e1
MESSAGE=Gestart met dnf makecache.
# journalctl --catalog --lines=3000 --pager-end "_TRANSPORT=kernel"    RESULT=klaar
_SOURCE_REALTIME_TIMESTAMP=1532886335471422

Ik heb je verteld dat er veel velden zijn (hier zijn er 25 velden, of 29 tellende tijdstempels), al het bovenstaande fragment is alleen voor een enkel logbericht! Het grote voordeel is dat u een zoekopdracht kunt uitvoeren door op elk veld in dit logbericht te filteren. Hiermee kunt u echt geavanceerd filteren.

Een van de meest voor de hand liggende filters die u zou willen, is filteren op de service. Zoals je hierboven kunt zien, is er een UNIT-veld, zodat je eenvoudig kunt filteren om alleen logberichten van één service te krijgen. Daar vertel ik je later meer over.

Maar deze hoeveelheid gegevens betekent ook iets anders: in bijna alle gevallen open je een logbestand nooit handmatig en kom je nooit in de map /var/log/journal. Je gebruikt journalctl voor elke taak die te maken heeft met loggen. Er is niet zoiets als logrotatie, alles wordt beheerd door logberichttijd.

Het aantal velden hangt ook af van hoe goed de integratie van systemd in uw applicatie is. Hoe meer velden een logbericht bevat, hoe beter het is. Voor basissysteemservices zorgde systemd al voor een goede integratie, maar voor andere applicaties en services varieert de kwaliteit van integratie sterk. Normaal gesproken zou dit in de loop van de tijd beter moeten worden naarmate mensen wennen aan systemd.

Oké, nu is het tijd om de functies van journalctl te ontdekken.

Meest gebruikte commando's voor journalctl

Het eerste commando waar je misschien naar wilt kijken, is het commando dat de logboeken van de Linux-kernel laat zien. Ja, systemd regelt ook de opslag van kernel-logs, dus je kunt ook de logs van eerdere laarzen ophalen. Hier is de opdracht:

# journalctl --catalog --lines=3000 --pager-end "_TRANSPORT=kernel"

Het toont je een pager waar je de laatste berichten kunt zien. U kunt met de pijltjestoetsen (↑ / ↓) of Page Up / Page Down . naar de laatste 3.000 regels scrollen. De vlag -catalog instrueert journalctl om context rond logregels weer te geven, net zoals computer opnieuw opstart of, in andere contexten, een service die stopt / start. Ik plaats deze vlag altijd omdat context er altijd toe doet, het helpt om te weten in welke situatie de logregel verscheen, zodat je kunt raden waarom je deze logregel hebt gekregen.

Nu wil je misschien alleen de logregels van de huidige opstart zien:

# journalctl --catalog --lines=35000 --pager-end --boot "_TRANSPORT=kernel"

Merk op dat het -boot commandoregelargument in alle situaties werkt, niet alleen met kernel logs. Als u liever vanaf het begin begint:

# journalctl --catalog --boot "_TRANSPORT=kernel"

Ik weet niet of dit bij jou het geval is, maar ik heb genoeg kernel logs! En wat dacht u van een algemeen overzicht van uw machine??

# journalctl --catalog --lines=3000 --pager-end

Wauw, er gebeuren veel dingen op je systeem! Een beetje filteren zou hier handig zijn. Een van de meest gebruikte filters is het matchen van een specifieke service (zoals uw SSH-server of HTTP-server), de bestandsnaam van de systemd-eenheid voor de SSH-service is sshd.dienst, dus:

# journalctl --catalog --lines=3000 --pager-end --unit=sshd.onderhoud

Dat is cool, nietwaar? Nou, het is alleen bruikbaar als je de naam van de service kent - maar in veel gevallen weet je de naam van die service niet. Als u zich in een dergelijke situatie bevindt, wilt u misschien een lijst van de services, hun beschrijvingen en hun status:

# systemctl list-units --type=service

Oké, dit probleem is nu opgelost. Maar soms krijg je een foutmelding die je krijgt van een extern systeem zoals je eigen website of van een applicatie op je desktop. U zult dus waarschijnlijk een specifiek woord of zin in het logbericht willen zoeken. Sinds systemd v237 is het nu mogelijk.

In journalctl is de zoekopdracht niet hoofdlettergevoelig als het woord dat u zoekt helemaal in kleine letters is. Dus als u het woord port zoekt, zal het ook het woord port zoeken met hoofdletters. Een voorbeeld:

# journalctl --catalog --lines=3000 --pager-end --grep="port"

Als u nu een woord als CPU zoekt, zoekt het alleen naar CPU met hoofdletters, het zoekt niet naar CPU.

# journalctl --catalog --lines=3000 --pager-end --grep="CPU"

U herinnert zich de foutmelding van het externe systeem? Over het algemeen bevatten deze berichten een tijdstempel. Om het logbericht te filteren, wil je misschien dat tijdstempel gebruiken. journalctl kan alle logberichten sinds een bepaalde datum en tijd weergeven met het argument -since:

# journalctl --catalog --since = "2018-07-30 09:30:00"

Als dat externe systeem op afstand is of UTC-tijdstempels gebruikt, wilt u filteren op basis van een UTC-datum en -tijd en in de terminal de UTC-tijdstempels weergeven, zodat u het niet in uw hoofd hoeft te converteren, dat is meestal echt verwarrend. Om dit te doen, moet u UTC toevoegen na de tijdreeks in -since argument. U moet dan de vlag -utc . toevoegen. Dus bijvoorbeeld:

# journalctl --catalog --since = "2018-07-30 10:45:00 UTC" --utc

Merk op dat u alleen de vlag -utc kunt gebruiken, in dit geval worden in principe alle datums en tijden in de UTC-tijdzone weergegeven.

# journalctl --catalog --lines=3000 --pager-end --utc

Logboeken worden beter beheerd met journalctl

Zoals u bij alle voorgaande opdrachten kunt zien, maakt systemd journaling filteren en dus debuggen eenvoudiger omdat u door alle logregels kunt selecteren met één enkele opdracht, journalctl. Sommigen van jullie kenden waarschijnlijk oude tijden waarin je elk bestand in /var/log handmatig moest openen om een ​​algemeen idee te krijgen van het probleem en van wat er is gebeurd. Met alle tips die je hier hebt geleerd, heb je solide tools om je logberichten te bekijken zoals JIJ dat wilt.

Doom installeren en spelen op Linux
Inleiding tot Doom De Doom-serie is ontstaan ​​in de jaren 90 na de release van de originele Doom. Het was meteen een hit en vanaf die tijd heeft de g...
Vulkan voor Linux-gebruikers
Met elke nieuwe generatie grafische kaarten zien we game-ontwikkelaars de grenzen van grafische betrouwbaarheid verleggen en een stap dichter bij foto...
OpenTTD versus Simutrans
Je eigen transportsimulatie maken kan leuk, ontspannend en buitengewoon aanlokkelijk zijn. Daarom moet je ervoor zorgen dat je zoveel mogelijk spellen...