Kako pojednostaviti analizu dnevnika spremnika Docker pomoću Elastic Stacka

Zapisivanje je bitna komponenta bilo koje aplikacije. Evidencije vam omogućavaju da poput priče analizirate i uvidite ono što se događa u kodu vaše aplikacije. Programeri softvera provode velik dio svog svakodnevnog života nadgledajući, rješavajući probleme i otklanjajući pogreške u aplikacijama, što ponekad može biti noćna mora. Evidentiranje omogućuje programerima da ovaj užurbani proces učine mnogo lakšim i uglađenim.

Ako ste svoju aplikaciju kontejnerirali s platformom spremnika kao što je Docker, možda su vam poznati dnevnici dockerakoji vam omogućuje da vidite zapisnike stvorene u vašoj aplikaciji koji se izvode u spremniku dockera. Zašto onda razmišljati o Elastic Stack-u kako bi analizirao vaše zapisnike? Pa, ovdje su uglavnom dva goruća problema:

  • Zamislite da imate desetke, stotine, pa čak i tisuće spremnika koji generiraju zapisnike - SSH ulazak na sve te poslužitelje i vađenje dnevnika neće dobro funkcionirati.
  • Također su spremnici nepromjenjivi i kratkotrajni, što znači da imaju kraći životni vijek. Dakle, nakon što vaši spremnici nestanu i zamijene se novim spremnicima, svi vaši dnevnici prijava povezani sa starim spremnicima nestaju.

Stoga je konačno rješenje za to stvaranje centralizirane komponente za prijavu za prikupljanje svih vaših dnevnika spremnika na jednom mjestu. Ovdje dolazi Elastic Stacks.

Elastic Stack uglavnom se sastoji od četiri glavne komponente:

  • Beats je novi član koji je napravio ELK stack poznat kao Elastic Stack. Otkucaji su laki otpremnici podataka dnevnika koji mogu gurnuti zapisnike u ELK stog. Za ovaj post koristit ću Filebeats, člana obitelji Beats, koji nudi lagani način za prikupljanje i prosljeđivanje te centraliziranje zapisnika i datoteka.
  • Logstash je komponenta koja agregira, mijenja i prenosi zapisnike s više ulaznih mjesta u Elasticsearch.
  • Elasticsearch jedistribuirani, pretraživački i analitički mehanizam zasnovan na JSON-u koji pohranjuje i indeksira podatke (u ovom slučaju unose u zapisnik) na skalabilan i upravljiv način.
  • Kibana je obogaćeno korisničko sučelje za analizu i lak pristup podacima u Elasticsearchu.

U ovom ćemo postu istražiti kako koristiti gore spomenute komponente i implementirati centralizirani analizator dnevnika za prikupljanje i izdvajanje trupaca iz Dockerovih spremnika.

Za potrebe ovog članka koristio sam dvije instance t2.small AWS EC2, na kojima je pokrenut Ubuntu 18.04 instaliran s Dockerom i Dockerom. Instanca 1 pokreće tomcat webapp, a instanca 2 ELK stog (Elasticsearch, Logstash, Kibana).

U Linuxu se zadani dockeri mogu pronaći na ovom mjestu:

/ var / lib / docker / kontejneri // gt; -json.log

Svi dnevnici dockera prikupit će se putem Filebeata koji se izvodi unutar računala domaćina kao spremnik. Filebeat će biti instaliran na svakom računalu domaćina dockera (za to ćemo koristiti prilagođenu Filebeat docker datoteku i systemd jedinicu, što će biti objašnjeno u odjeljku Konfiguriranje Filebeat-a.)

Naš tomcat webapp zapisat će zapisnike na gore navedeno mjesto pomoću zadanog upravljačkog programa za prijavu dockera. Filebeat će tada izvući zapisnike s tog mjesta i gurnuti ih prema Logstash-u.

Još jedna važna stvar koju treba imati na umu je da osim dnevnika generiranih aplikacijom, trebamo i metapodatke povezane sa spremnicima, kao što su naziv spremnika, slika, oznake, domaćin itd. ... To će nam omogućiti da točno identificiramo točnog domaćina i spremnik koji zapisnici generiraju . Filebeat te podatke također može lako poslati zajedno s unosima dnevnika aplikacija.

Radeći ovu vrstu implementacije tekući spremnici ne trebaju brinuti o pokretačkom programu za evidentiranje, načinu prikupljanja i guranja dnevnika. Filebeat će se pobrinuti za to. To je često poznato kao načelo jedinstvene odgovornosti.

Konfiguriranje Filebeat-a

Za ovaj su odjeljak filebeat.yml i Dockerfile dobiveni iz repo github-ovog uzorka-filebeat-docker-logging Brune COSTE-a. Puno hvala njegovom sjajnom radu. Ali budući da sam napravio nekoliko promjena u datoteci filebeat.yml u skladu sa zahtjevima ovog članka, zasebno sam ih ugostio na datoteci filebeat.service (datoteka systemd) na vlastitom repo-u. Repo-u možete pristupiti ovdje.

Kao početni korak morate ažurirati datoteku filebeat.yml koja sadrži konfiguracije Filebeat. Dolje je dat primjer datoteke filebeat.yml koji možete koristiti. Obratite pažnju na redak 21, polje output.logstash i polje hosts. Konfigurirao sam ga na IP adresu poslužitelja na kojem radim svoj ELK stog, ali možete ga izmijeniti ako koristite Logstash na zasebnom poslužitelju. Prema zadanim postavkama Logstash sluša Filebeat na priključku 5044.

Da biste saznali više o konfiguracijskim parametrima Filebeat Dockera, pogledajte ovdje.

Nakon toga možete stvoriti vlastitu sliku Filebeat Dockera pomoću sljedeće Dockerfile.

Jednom kada je slika izgrađena, možete je gurnuti u svoje spremište dockera. Budući da imate mogućnost pokretanja Filebeat-a kao docker spremnika, stvar je samo u pokretanju Filebeat spremnika na instancama vašeg domaćina koji izvode spremnike. Evo naredbe za pokretanje dockera.

docker run -v '/var/lib/docker/containers:/usr/share/dockerlogs/data:ro' -v '/var/run/docker.sock:/var/run/docker.sock' --name filebeat ${YOUR_FILEBEAT_DOCKER_IMAGE}:latest

U gornjoj naredbi Docker, imajte na umu dva parametra vezivanja za povezivanje: / var / lib / docker / kontejneri je put do kojeg postoje matični dnevnici u glavnom računalu i koji je povezan s / usr / share / dockerlogs / data path unutar Filebeat-a spremnik s pristupom samo za čitanje. U drugom argumentu bind mount, /var/run/docker.sock je vezan za demon Docker spremnika Filebeat. To je unix utičnica koju Docker demon sluša prema zadanim postavkama i može se koristiti za komunikaciju s demonom iz spremnika. To omogućuje našem Filebeat spremniku da dobije Dockerove metapodatke i obogati unose dnevnika spremnika zajedno s metapodacima i gurne ih u ELK stog.

Ako želite automatizirati ovaj postupak, napisao sam datoteku Systemd Unit za upravljanje Filebeatom kao uslugom.

Konfiguriranje ELK stoga

Za ovo ću koristiti svoju drugu instancu EC2, gdje pokrećem ELK stog. To možete učiniti jednostavnim instaliranjem Dockera za sastavljanje i provjerom ovog sjajnog repozitorija deviantony / docker-elk i jednostavno pokretanjem docker-compose up -d

Imajte na umu da sva vaša pravila vatrozida dopuštaju ulazni promet u Logstash, Elasticsearch i Kibana.

Prije pokretanja ELK stoga morate biti sigurni da je datoteka logstash.conf ispravno konfigurirana za preslušavanje dolaznih dnevnika otkucaja na portu 5044 i da li se zapisi pravilno dodaju na domaćin elastičnog pretraživanja. Također morate paziti da na svoj Elasticsearch dodate parametar indeksa kako biste jedinstveno identificirali zapisnike koje je generirao Filbeat.

U reportu docker-elk možete pronaći datoteku logstash.conf slijedeći ime puta docker-elk / logstash / pipeline. Ovo je konfiguracijska datoteka za postavljanje Logstash konfiguracija. Morate ga ažurirati na sljedeći način:

Jednom kad to napravite, možete pristupiti svojoj nadzornoj ploči Kibana na priključku 5601 prema zadanim postavkama kako je definirano u datoteci docker-compose.yml na revian-u deviantony / docker-elk.

Na kartici upravljanja možete stvoriti uzorak indeksa za zapisnike Filebeat. To morate učiniti prije nego što možete pregledati zapisnike na Kibana nadzornoj ploči.

Ako vaši spremnici pravilno potiskuju zapisnike u Elasticsearch putem Logstash-a i uspješno ste kreirali uzorak indeksa, možete otići na karticu Otkrivanje na nadzornoj ploči Kibana i pregledati svoje zapisnike aplikacija Docker spremnika zajedno s Docker metapodacima pod uzorkom filebeat * index.

Reference

  1. //www.elastic.co/guide/en/beats/filebeat/current/filebeat-getting-started.html
  2. //medium.com/@bcoste/powerful-logging-with-docker-filebeat-and-elasticsearch-8ad021aecd87
  3. //www.elastic.co/guide/en/logstash/current/configuration.html
  4. //medium.com/lucjuggery/about-var-run-docker-sock-3bfd276e12fd