Topp 10 Docker logging gotchas hver Docker bruker bør vite

En av de første kommandoene Docker brukere lære etter «docker run» er «docker logger» — men visste du at kommandoen «docker logger» ikke alltid fungerer? Det høres kanskje fantastisk ut, men det er sant. Vi vil lære mer om årsakene senere.

Docker endret ikke bare måten applikasjoner distribueres, men også arbeidsflyten for loggbehandling. I stedet for å skrive logger til filer, containere skrive logger til konsollen (stdout/stderr) Og Docker Logging Drivere videresende logger til bestemmelsesstedet. En sjekk mot Docker Github problemer viser raskt at brukerne har ulike problemer når du arbeider Med Docker logger.

Docker Logging Drivers overview

Administrere logger med Docker synes Å Være vanskelig og trenger dypere kunnskap Om Docker Logging Driver implementeringer og alternativer for å overvinne problemer som folk rapporterer. Så hva er topp 10 Docker logging gotchas, hver Docker bruker bør vite?

la oss starte med en oversikt Over Drivere For Docker-Logging og alternativer for å sende logger til sentraliserte Logghåndteringsløsninger som Elastic Stack (tidligere ELK Stack) eller Sematext Cloud.

i De tidlige Dagene Av Docker var beholderlogger bare tilgjengelige via Docker remote API, dvs. via» docker logs » – kommandoen og noen få avanserte loggavsendere. Senere introduserte Docker loggdrivere som plugins, for å åpne Docker for integrasjoner med ulike logghåndteringsverktøy. Disse logging drivere er implementert som binære plugins i docker daemon. Nylig ble plugin-arkitekturen utvidet til å kjøre logging plugins som eksterne prosesser, som kunne registrere seg som plugins og hente logger via Linux FIFO-filer. Foreløpig logging drivere levert med docker binærfiler er binære plugins, men dette kan endres i nær fremtid.

Drivere For Docker-Logging mottar beholderlogger og videresender Dem til eksterne mål eller filer. Standard logging driver er «json-fil». Den lagrer container logger I JSON format på lokal disk. Docker har en plugin arkitektur for logging drivere, så det er plugins for åpen kildekode verktøy og kommersielle verktøy tilgjengelig:

  • Journald – lagring av beholderlogger i systemjournalen
  • Syslog – Driver – støtter UDP, TCP, TLS
  • Fluentd – støtter tcp – eller Unix-socket-tilkoblinger til fluentd
  • Splunk-HTTP/HTTPS-videresending Til Splunk-server
  • gelf-UDP log videresending Til Graylog2

for en komplett logghåndteringsløsning må flere verktøy være involvert:

  • Loggparser til strukturlogger, vanligvis en del av logg avsendere (fluentd, rsyslog, logstash, logagent,…)
  • Logg indeksering, visualisering og varsling:
    • Elasticsearch Og Kibana (Elastisk Stabel, også kjent SOM ELK stabel),
    • Splunk,
    • Logentries,
    • Loggly,
    • Sumologic,
    • Graylog OSS / Enterprise
    • Sematext Cloud / enterprise
    • Og mange Flere …

for å sende logger til en av backends må du kanskje velge en logging driver eller logging verktøy som støtter Din Logg Løsning av valget. Hvis verktøyet Ditt trenger Syslog-inngang, kan Du velge Syslog-driveren.

1.Docker logger kommandoen fungerer bare med json-fil Logging driver

standard Logging driver «json-fil» skriver logger til den lokale disken, og json-fil driveren er den eneste som fungerer parallelt med» docker logger » kommandoen. Så snart man bruker alternative loggdrivere, For Eksempel Syslog, Gelf eller Splunk, Begynner Docker logs API-kallene å mislykkes, og kommandoen» docker logs » viser en feil som rapporterer begrensningene i stedet for å vise loggene på konsollen. Ikke bare mislykkes docker log-kommandoen, men mange andre verktøy som bruker Docker API for logger, for eksempel Docker-brukergrensesnitt Som Portainer eller logginnsamlingsbeholdere som Logspout, kan ikke vise beholderloggene i denne situasjonen.

Se dette problemet.

Docker Syslog driver kan blokkere container distribusjon og miste logger når Syslog server ikke kan nås

Bruke Docker Syslog driver MED TCP eller TLS er en pålitelig måte å levere logger. Syslog logging driveren krever imidlertid en etablert tcp-tilkobling Til Syslog-serveren når en beholder starter. Hvis denne tilkoblingen ikke kan opprettes ved beholderstart, mislykkes beholderstart med en feilmelding som

docker: Feilrespons fra daemon: Kunne ikke initialisere logging driver: dial tcp

dette betyr at et midlertidig nettverksproblem eller høy nettverksforsinkelse kan blokkere distribusjonen av beholdere. I tillegg kan En omstart Av Syslog-serveren rive ned alle containere som logger via TCP/TS til en sentral Syslog-server, noe som definitivt er situasjonen å unngå.

Se dette problemet.

3. Docker syslog driver mister logger når målet er nede

I Likhet med problemet ovenfor, forårsaker tap av logger er den manglende evnen Til Docker logging drivere til buffer logger på disken når de ikke kan leveres til eksterne destinasjoner. Her er et interessant problem å se på.

4. Docker logging drivere støtter ikke multi-line logger som error stack traces

når vi snakker om logger, tenker de fleste på enkle enkeltlinjelogger, si Som Nginx eller Apache logger. Logger kan imidlertid også strekke seg over flere linjer. Unntaksspor spenner for eksempel over flere linjer, så For Å hjelpe Logstash-brukere har vi delt hvordan du håndterer stakkspor med Logstash.

ting er ikke bedre i verden av containere, hvor ting blir enda mer komplisert fordi logger fra alle apper som kjører i containere, blir sendt ut til samme utgang-stdout. Ikke rart å se problemet # 22920 lukket med » Lukket. Bryr meg ikke.»skuffet så mange mennesker. Heldigvis finnes det verktøy Som Sematext Docker Agent som kan analysere multi-line logger ut av boksen, samt bruke tilpassede multi-line mønstre.

Docker service logs kommandoen henger med ikke-json logging driver

Mens json-files driveren virker robust, kan andre loggdrivere dessverre fortsatt forårsake problemer Med Docker Swarm-modus. Se Dette GitHub-problemet.

Docker daemon krasjer hvis fluentd daemon er borte og bufferen er full

Et annet scenario der en logging driver forårsaker problemer når den eksterne destinasjonen ikke kan nås — i dette tilfellet kaster logging drivere unntak som forårsaker Docker daemon å krasje.

Docker-beholderen sitter fast I Opprettet tilstand på Splunk-driverfeil

Hvis Splunk-serveren returnerer en 504 på beholderstart, startes beholderen faktisk, men docker rapporterer at beholderen ikke startet. En gang i denne tilstanden vises beholderen ikke lenger under docker ps, og beholderprosessen kan ikke stoppes med docker kill. Den eneste måten å stoppe prosessen på er å manuelt drepe den.

Se dette problemet.

Docker logger hoppe/manglende programlogger (journald driver)

det viser seg at dette problemet er forårsaket av journald rate grenser, som må økes Som Docker oppretter logger for alle programmer som kjører og journald kan hoppe over noen logger på grunn av sine rate begrensning innstillinger. Så vær oppmerksom på journald-innstillingene når Du kobler Docker til den.

Gelf-driverproblemer

Gelf-loggdriveren mangler ET TCP-eller TLS-alternativ og støtter BARE UDP, noe som kan være risikabelt å miste loggmeldinger når UDP-pakker blir tapt. Noen problemer rapporterer et PROBLEM MED DNS-oppløsning / caching med GELF-drivere, slik at du logger kan bli sendt til» Nirvana » når Graylog server IP endres — og dette kan skje raskt ved hjelp av beholderutplasseringer.

Docker støtter ikke flere loggdrivere

det ville være fint å ha logger lagret lokalt på serveren og muligheten til å sende dem til eksterne servere. Foreløpig Støtter Docker ikke flere loggdrivere, slik at brukerne blir tvunget til å velge en enkelt loggdriver. Ikke en lett beslutning å vite ulike problemer som er oppført i dette innlegget.

Det er det! Dette er mine topp 10 Docker Logging Gotchas!

Se Også: Kontinuerlig Levering Med Jenkins & Docker Security: fordeler, ulemper og en statusoppdatering

Alternativer Til Docker Log Drivers

med så mange problemer rundt Docker Log Drivers, er det alternativer? Det viser seg at Det er — Docker API-baserte logg avsendere til unnsetning!til unnsetning.

her er noen gode grunner til å se på slike alternativer:

  1. json-file driver er standard og pålitelig, en lokal kopi av logger er alltid tilgjengelig, og ‘docker logs’ OG Docker API-kall for logger bare fungerer.
  2. Evne til å filtrere logger etter ulike dynamiske kriterier som bildenavn eller etiketter
  3. Bedre metadata, har full tilgang Til Docker API
  4. ingen risiko for å krasje Docker Daemon fordi slike logg avsendere kan kjøre i en beholder med begrenset ressursbruk og diskplass forbruk (f. eks. sett bufferkatalogen i et volum og sett nyttige grenser)

La oss se på to anbefalte Docker API-baserte logginnsamlingsverktøy: Logspout og Sematext Docker Agent. Begge er åpen kildekode.

vær oppmerksom på at Et tredje verktøy, som passer mer eller mindre i denne kategorien, Er Elastic Filebeat. Filebeat samler loggfiler fra, generert av json-file log driver bare berikelse for container metadata er gjort via Docker API-kall.

Logspout gir flere utganger og kan rute logger fra forskjellige beholdere til forskjellige destinasjoner uten å endre innstillingene for logging av applikasjonsbeholdere. Den håndterer ANSI-Fluktsekvenser (som fargekoder i logger), noe som kan være problematisk for fulltekstsøk i Elasticsearch.

Som Logspout, Sematext Docker Agent (SDA) ER API-basert, støtter logg ruting og håndterer ANSI Escape sekvenser for fulltekstsøk. Imidlertid Er Sematext Docker Agent faktisk mer enn bare en enkel logg avsender.

SDA tar seg av Mange problemer som Oppstår Av Docker-brukere som multi-line logger, loggformatdeteksjon og loggparsing, komplette metadataberikingsbeholdere (etiketter, geoip, Swarm og Kubernetes spesifikke metadata), diskbufring og pålitelig frakt via TLS. Det er åpen kildekode På Github, kan brukes med Elastic Stack Eller Sematext Cloud og kan samle ikke bare containerlogger, men også containerhendelser, pluss Docker host og container metrics.

Forskjeller mellom tre logging løsninger som fungerer godt med json-file driver Og Docker Remote API

Anbefaling

den klare anbefaling FOR API-baserte loggere kan endres i fremtiden Som Docker log drivere bedre over tid og den nye plugin mekanisme Via Unix socket tillater nye logging driver implementeringer for å kjøre som separate prosesser. Denne funksjonen virkelig forbedrer Dockers logging plugin arkitektur og er et godt tegn På At Docker tar logging problemer på alvor.

i mellomtiden bør Du vurdere Docker API-baserte loggsamlere som Sematext Docker Agent og Logspout for å unngå å støte på problemer Med Docker-logger, som 10 gotchas beskrevet her.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.