Kuinka päivittää Docker Compose v2:een
Verkkotoimisto » Digitaalisia uutisia » Kuinka tarkastella Docker-asennuksesi tapahtumahistoriaa Mitä Docker-tapahtumat ovat?

Kuinka tarkastella Docker-asennuksesi tapahtumahistoriaa Mitä Docker-tapahtumat ovat?

Docker Engine kirjaa tapahtuman aina, kun demoni suorittaa tärkeitä toimia. Voit käyttää tapahtumalokia tunnistaaksesi, milloin toiminto tapahtui, ja seurataksesi objektien muutoksia ajan mittaan.

Tässä artikkelissa selitämme, mitä tapahtumiin tallennetaan ja milloin haluat ehkä tarkastella niitä. Näytämme sitten, kuinka tapahtumia voidaan seurata reaaliajassa Docker CLI:n ja REST API:n avulla.

Docker-tapahtumat kuvaavat Docker-demonisi suorittamia toimia. Suurin osa vuorovaikutuksista objektien, kuten säilöjen, kuvien, taltioiden ja verkkojen kanssa kirjaa tapahtuman ja luo lokin, jota voit käyttää aiempien muutosten tarkastamiseen.

On olemassa monia erilaisia ​​tapahtumia, jotka tunnistavat tiettyjä muutoksia ympäristössäsi:

  • Säilöjen luominen ja poistaminen
  • Säilön tilan tarkistuksen tilat
  • Komennot suoritetaan konttien sisällä docker exec
  • Vedä ja työnnä kuvia
  • Luo, tuhoa, liitä ja irrota taltioita
  • Docker Daemon -laajennusten ottaminen käyttöön ja poistaminen käytöstä

Näet täydellisen luettelon Dockerin dokumentaatiosta.

Jokainen tallennettu tapahtuma sisältää aikaleiman ja kohteen tunnuksen. Voit käyttää näitä tietoja kootaksesi historian ympäristösi muutoksista riippumatta siitä, oletko havainnut niiden alkuperäisiä laukaisimia vai et.

Tallennetut tapahtumat voivat myös auttaa diagnosoimaan ongelmia, kuten odottamattomia säilövirheitä. Lokin tarkastelu antaa sinun tunnistaa tarkan ajan, jolloin kontti pysähtyi, ja se tarjoaa datapisteen, jota voit korreloida muiden lokien kanssa. Tapahtumat voivat määrittää, milloin kontin kuntotarkastukset alkoivat epäonnistua, mikä vähentää kiinnostavaa ajanjaksoa, jonka aikana sinun on tarkastettava ulkoiset palvelut ongelman perimmäisen syyn selvittämiseksi.

Docker-tapahtumien lähettäminen Dockerin CLI:n avulla

La docker events CLI-komento lähettää tapahtumat Docker-daemonista pääteikkunaan. Tapahtumat näkyvät reaaliajassa, kunnes saat prosessin valmiiksi painamalla näppäinyhdistelmää Ctrl+C.

Komennon suorittaminen ilman argumentteja ei näytä lähtöä aluksi. Vain uusi toiminta näytetään, joten tuloste pysyy tyhjänä, kunnes tapahtuma tapahtuu. Voit aiheuttaa sellaisen käynnistämällä uuden säilön eri kuoressa:

$ docker run --rm hello-world

Useiden tapahtumien pitäisi nyt näkyä pääteikkunassa, joka suorittaa docker events tilattu:

2022-05-31T15:20:00.267970018+01:00 image pull hello-world:latest (name=hello-world)
2022-05-31T15:20:00.347054862+01:00 container create 4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378 (image=hello-world, name=nifty_morse)
2022-05-31T15:20:00.347805277+01:00 container attach 4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378 (image=hello-world, name=nifty_morse)
2022-05-31T15:20:00.621070053+01:00 container start 4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378 (image=hello-world, name=nifty_morse)
...

Jokainen tapahtuma näytetään omalla rivillään. Tapahtuman aikaleima näytetään ensin ja sen jälkeen kohteena oleva objektityyppi (esim image ou container) ja sitten suoritettu toiminto (esim create, attachet start). Loput viestistä sisältävät hyödyllisiä metatietoja objektista. Yllä oleva esimerkki paljastaa, että hello-world:latest kuva poimittiin ja siitä luotiin kontti.

Tulosteen muotoilu

Raaka tapahtumien luettelo on usein raskas. Voit alustaa tulosteen uudelleen käyttämällä --format lippu, joka hyväksyy Go-kuviomerkkijonon:

$ docker Events --format '{{ .Time }} {{ .Action }} {{ .Type}} {{ .ID }}'

Tämän esimerkin suorittaminen tuottaa tulosteen, joka näyttää tältä:

1654006800 pull image hello-world:latest
1654006800 create container 4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378
1654006800 attach container 4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378
1654006800 start container 4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378

Voit saada tapahtumat esitettäväksi JSON-objekteina käyttämällä {{ json . }} kuviomerkkijonona:

$ docker events --format '{{ json . }}' | jq { "status": "create", "id": "4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378", "from": "hello-world" {Action "A:create":", "container":ate ID": "4a6c8d34a183363db5dbfdcc3cab4c82c4a341d719df56ec2e7f879ee8f02378", "Attribuutit": { "image": "hello-world", "name": "nifty-world", "name": "nifty }Natime},1654006800:1654006800347054800al", XNUMX:XNUMX } XNUMX }

Tässä välitetään raaka JSON jq joten se on melko painettu päätteeseesi. Tämä helpottaa tietojen selailua.

Kun luot mukautetun muotoisia merkkijonoja, voit käyttää JSON-tulosteen ominaisuuksia viitteenä tuetuille paikkamerkeille. Useimmissa tapauksissa sinun on kirjoitettava esimerkiksi kunkin ominaisuuden ensimmäinen kirjain isolla time à {{ .Time }}.

Tapahtumasuodatus

Kiireisen Docker-daemonin tapahtumaloki voi nopeasti muuttua meluiseksi. Voit rajoittaa tapahtumat tiettyyn toimintoon, objektiin tai objektityyppiin -toiminnolla --filter lippu:

  • docker events --filter type=container - Hanki kaikki konttiin liittyvät tapahtumat.
  • docker events --filter event=create - Hanki kontin luontitapahtumia.
  • docker events --filter container=demo-container - Hae kaikki rekisteröidyt tapahtumat kutsutulle kontille demo-container (voit viitata säilön tunnukseen tai nimeen).

Lisäksi containervoit suodattaa kaikkien tuettujen objektityyppien nimien mukaan, kuten image, networket volume.

Useita suodattimia tuetaan toistettaessa --filter lippu. Erilliset suodattimet tulkitaan loogisiksi ET ehdot; samaa suodatinta käytetään useaan otteeseen OU lausekkeita. Tässä on esimerkki, joka korostaa create tapahtuma molemmille app-container et api-container säiliöt:

$ docker eventit --filter container=app-container --filter container=api-container --filter event=create

Pääsy historiallisiin tapahtumiin

docker events näyttää oletusarvoisesti vain tapahtumat, jotka on tallennettu komennon suorittamisen jälkeen. Voit sisällyttää historiallisia tapahtumia lisäämällä --since lippu. Tämä hyväksyy ihmisen luettavan aikalausekkeen tai absoluuttisen aikaleiman:

$ docker -tapahtumat --alkaen 1 h $ docker -tapahtumat --alkaen '2021-05-01T16:00:00'

Määritetyn ajan jälkeen tallennetut tapahtumat näkyvät välittömästi terminaalissasi. Uudet tapahtumat näkyvät edelleen reaaliajassa, kun niitä tallennetaan.

Voit sulkea pois tapahtumia tietyn ajan kuluttua -sovelluksella --until lippu. Se toimii samalla tavalla kuin --since. käyttämällä --until deaktivoi uusien tapahtumien reaaliaikaisen lähetyksen, koska ne olisivat pyydetyn ajanjakson ulkopuolella.

Suoratoista Docker-tapahtumia Daemon REST API:sta

Toinen tapa käyttää tallennettuja tapahtumia on käyttää Docker-daemon REST API:ta. Voit käyttää /events päätepiste suoratoistaaksesi reaaliaikaisia ​​tapahtumia sen jälkeen, kun olet ottanut API:n käyttöön Docker-isännässäsi. Tapahtumat palautetaan JSON-muodossa:

$curl http://127.0.0.1:2375/v1.41/events { "Tyyppi": "säilö", "Toiminto": "luo", "Näyttelijä": { "ID": "4a6c8d34a183363db5dbfdcc3cab4c82c4a341ftributec719ftributec56dftribute2" : { "image": "hello-world", "name": "nifty_morse" } }, "scope": "local", "time": 7, "timeNano": 879 }

API-päätepisteen tuki filter, sinceet until parametrit, jotka käyttäytyvät samalla tavalla kuin niiden CLI-vastineet. Näin voit noutaa kaikki viimeisen tunnin aikana tallennetut säilön luontitapahtumat:

$ curl http://127.0.0.1:2375/v1.41/events?since=1h&filters={'type':'container','action':'create'}

Tapahtumien lähettäminen ulkoiseen palveluun

Dockerissa ei ole sisäänrakennettua tapaa lähettää tapahtumia ulkoiseen palveluun. Tästä voi olla hyötyä, jos haluat, että kaikki säilön luomuksesi kirjataan olemassa olevaan valvonta- tai tarkastusalustaan.

Voit määrittää oman ratkaisusi luomalla järjestelmäpalvelun, joka on käynnissä koko ajan docker events. Sen pitäisi lähettää jokainen uusi tulosrivi ulkoiseen järjestelmääsi.

Kirjoita ensin Bash-skripti, joka toteuttaa tarvitsemasi toiminnot:

#!/bin/bash Docker Events --format '{{ .Time }} {{ .Action }} {{ .Type }} {{ .ID }}' | luettu tapahtuma do curl -X POST -H "Content-Type: application/json" -d '{"tapahtuma": "$event"}' https://example.com/tapahtumat valmis

Luo nyt uusi systemd huoltoyksikkö osoitteessa /etc/systemd/system/docker-events.service:

[Yksikkö] Description=Muokattu Docker-tapahtumien valvontapalvelu [Palvelu] Type=forking ExecStart=/usr/local/bin/docker-events.sh [Asenna] WantedBy=multi-user.target

viimein lataa systemd ladataksesi palvelusi, käynnistä ja aktivoi laite:

$ sudo systemctl daemon-reload $ sudo systemctl käynnistä docker-events $ sudo systemctl ota docker-events käyttöön

Palvelusi lähettää nyt jokaisen uuden tapahtuman valvonta-alustallesi. Palvelun käyttöönotto määrittää sen käynnistymään automaattisesti aina, kun isäntä käynnistyy uudelleen.

yhteenveto

Docker-tapahtumat luodaan aina, kun demoni muokkaa ympäristösi objekteja. Tapahtumalokin suoratoiston avulla voit seurata demonin toimintaa reaaliajassa. Tämä voi auttaa sinua korjaamaan ongelmia, tarkastamaan muutoksia ja varmistamaan vaatimustenmukaisuuden.

Koska tapahtumat haetaan suoraan Docker-palvelimelta, siihen ei pidä luottaa, jos joudut hakemaan tietoja tulevaisuudessa. Vain 1 merkintää säilytetään jatkuvasti, etkä voi käyttää tapahtumia Docker-isännän tiedostojärjestelmän kautta. Mekanismi soveltuu parhaiten nopeisiin kertaluonteisiin tehtäviin, joissa etsit erityistä tietoa viimeaikaisesta toiminnasta. Pitkäaikaista säilytystä varten sinun tulee käyttää omaa järjestelmäpalveluasi tapahtumien lähettämiseen ulkoiseen arkistoon.

★ ★ ★ ★ ★