Kuinka yksinkertaistaa Docker-konttilokianalyysiä Elastic Stack -sovelluksella

Kirjaaminen on olennainen komponentti kaikissa sovelluksissa. Lokien avulla voit analysoida ja piilottaa huipun siihen, mitä sovelluskoodissasi tapahtuu, kuten tarina. Ohjelmistokehittäjät viettävät suuren osan päivittäisestä elämästään sovellusten seurannassa, vianetsinnässä ja virheenkorjauksessa, mikä voi joskus olla painajainen. Kirjaaminen antaa ohjelmistokehittäjille mahdollisuuden tehdä tästä kiireisestä prosessista paljon helpompaa ja sujuvampaa.

Jos olet säilyttänyt sovelluksesi konttialustalla, kuten Docker, saatat tuntea telakointilokitjonka avulla voit nähdä sovelluksessasi luodut lokit telakointisäiliön sisällä. Miksi sitten ajatella Elastic Stackia lokisi analysoimiseksi? No, tässä on pääasiassa kaksi polttavaa ongelmaa:

  • Kuvittele, että sinulla on kymmeniä, satoja tai jopa tuhansia kontteja, jotka tuottavat lokeja - SSH-kirjautuminen kaikkiin näihin palvelimiin ja lokien purkaminen eivät toimi hyvin.
  • Myös astiat ovat muuttumattomia ja lyhytaikaisia, mikä tarkoittaa, että niiden käyttöikä on lyhyempi. Joten kun säilöt ovat kadonneet ja korvattu uusilla säilöillä, kaikki vanhoihin säilöihin liittyvät sovelluslokisi ovat kadonneet.

Joten perimmäinen ratkaisu tähän on luoda keskitetty hakkuukomponentti kaikkien konttilokiesi keräämiseen yhteen paikkaan. Tässä tulee elastiset pinot.

Elastinen pino koostuu pääasiassa neljästä pääkomponentista:

  • Beats on uusi jäsen, joka teki ELK-pino tunnetaan nimellä elastinen pino. Beats ovat kevyitä lokitietojen lähettäjiä, jotka voivat työntää lokit ELK-pinoon. Tässä viestissä käytän Beats-perheen jäsentä Filebeatsia, joka tarjoaa kevyen tavan kerätä, välittää ja keskittää lokeja ja tiedostoja.
  • Logstash on komponentti, joka kokoaa, muokkaa ja siirtää lokit useista syöttöpaikoista Elasticsearchiin.
  • Elasticsearch onhajautettu, JSON-pohjainen haku- ja analyysimoottori, joka tallentaa ja indeksoi tiedot (tässä tapauksessa lokimerkinnät) skaalattavalla ja hallittavalla tavalla.
  • Kibana on rikastettu käyttöliittymä, joka analysoi ja käyttää tietoja helposti Elasticsearchissa.

Tässä viestissä tutkitaan, miten yllä mainittuja komponentteja voidaan käyttää ja toteuttaa keskitetty lokianalysaattori lokien keräämiseksi ja purkamiseksi Docker-säiliöistä.

Tätä artikkelia varten olen käyttänyt kahta t2.small AWS EC2 -instanssia, joissa on käynnissä Ubuntu 18.04, joka on asennettu Dockerin ja Docker compose -ohjelman kanssa. Ilmentymä 1 käyttää tomcat-verkkosovellusta ja ilmentymä 2 käyttää ELK-pinoa (Elasticsearch, Logstash, Kibana).

Oletusarvoisesti Linuxissa docker-lokit löytyvät täältä:

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

Kaikki telakkalokit kerätään Filebeatin kautta, joka toimii isäntäkoneen sisällä säilönä. Filebeat asennetaan kuhunkin telakointiaseman koneeseen (käytämme tähän mukautettua Filebeat-telakointitiedostoa ja systemd-yksikköä, joka selitetään Filebeatin määrittäminen -osiossa.)

Tomcat-verkkosovelluksemme kirjoittaa lokit yllä olevaan sijaintiin käyttämällä oletustelakan lokiohjainta. Filebeat purkaa sitten lokit tuosta sijainnista ja työntää niitä kohti Logstashia.

Toinen tärkeä huomioitava asia on, että tarvitsemme myös säilöihin liittyviä metatietoja, paitsi sovelluksen luomia lokeja, kuten säilön nimi, kuva, tunnisteet, isäntä jne. ... Tämän avulla voimme yksilöidä tarkalleen isännän ja säilön, jota lokit tuottavat . Filebeat voi myös lähettää nämä tiedot helposti sovelluslokimerkintöjen kanssa.

Tekemällä tällaisen toteutuksen juoksevien konttien ei tarvitse huolehtia lokiohjaimesta, siitä, miten lokit kerätään ja työnnetään. Filebeat huolehtii niistä. Tätä kutsutaan usein yhden vastuun periaatteeksi.

Määritetään Filebeat

Tätä osaa varten filebeat.yml ja Dockerfile saatiin Bruno COSTEn näytteen, filebeat-telakan, kirjaamisen github reposta. Paljon kiitoksia hänen mahtavasta työstään, mutta koska olen tehnyt useita muutoksia tiedostoon filebeat.yml tämän artikkelin vaatimusten mukaisesti, olen isännöin niitä, joilla on filebeat.service (systemd-tiedosto) erikseen omassa repossa. Voit käyttää repoa täällä.

Ensimmäisenä vaiheena sinun on päivitettävä filebeat.yml-tiedosto, joka sisältää Filebeat-määritykset. Alla on esimerkki tiedostosta filebeat.yml, jota voit käyttää. Huomaa rivi 21, output.logstash-kenttä ja hosts-kenttä. Olen määrittänyt sen palvelimen IP-osoitteeseen, jossa käytän ELK-pinoani, mutta voit muokata sitä, jos käytät Logstashia erillisellä palvelimella. Oletusarvoisesti Logstash kuuntelee Filebeatia portissa 5044.

Täältä löydät lisätietoja Filebeat Docker -määritysparametreista.

Sen jälkeen voit luoda oman Filebeat Docker -kuvasi käyttämällä seuraavaa Docker-tiedostoa.

Kun kuva on rakennettu, voit työntää sen telakointiasemaan. Koska sinulla on kyky käyttää Filebeatia telakointisäiliönä, kyse on vain Filebeat-säilön suorittamisesta isäntäkoneissa, joissa on kontteja. Tässä on telakan ajon komento.

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

Huomaa yllä olevassa Docker-komennossa kaksi sitomisparametriä: / var / lib / docker / container on polku, jossa isäntälaitteessa on docker-lokeja, ja se on sidottu / usr / share / dockerlogs / datapolkuun Filebeatissa vain lukuoikeusastia. Toisessa bind mount -argumentissa /var/run/docker.sock on sidottu Filebeat-säilön Docker-daemoniin. Se on unix-liitäntä, jota Docker-daemon kuuntelee oletuksena, ja sitä voidaan käyttää yhteydenpitoon daemonin kanssa säilössä. Tämän ansiosta Filebeat-säilömme voi hankkia Docker-metatiedot ja rikastuttaa säilölokimerkintöjä metatietojen kanssa ja työntää sen ELK-pinoon.

Jos haluat automatisoida tämän prosessin, olen kirjoittanut Systemd Unit -tiedoston Filebeatin hallitsemiseksi palveluna.

ELK-pinon määrittäminen

Tätä varten käytän toista EC2-ilmentymääni, jossa suoritan ELK-pinon. Voit tehdä tämän yksinkertaisesti asentamalla Docker compose ja tarkistamalla tämän mahtavan deviantony / docker-hirven repo ja suorittamalla vain docker -compose up -d

Huomaa, että kaikki palomuurisäännöt sallivat saapuvan liikenteen Logstashiin, Elasticsearchiin ja Kibanaan.

Ennen kuin suoritat ELK-pinon, sinun on varmistettava, että logstash.conf-tiedostosi on määritetty oikein kuuntelemaan porttiin 5044 saapuvia lyöntilokeja ja lokit lisätään oikein elasticsearch-isäntään. Sinun on myös lisättävä hakemistoparametri Elasticsearchiin, jotta Filbeatin luomat lokit voidaan tunnistaa yksilöllisesti.

Docker-elk-reposta löydät logstash.conf-tiedostosi seuraamalla docker-elk / logstash / pipeline-polun nimeä. Tämä on määritystiedosto Logstash-määritysten määrittämistä varten. Päivitä se seuraavasti:

Kun olet tehnyt sen, voit käyttää oletusarvoisesti Kibana-hallintapaneelia portissa 5601, kuten docker-compose.yml-tiedostossa on määritelty deviantony / docker-elk repossa.

Hallinta-välilehdellä voit luoda hakemistokuvion Filebeat-lokeille. Tämä on tehtävä, ennen kuin voit tarkastella lokeja Kibana-hallintapaneelissa.

Jos säilösi työntävät lokeja oikein Elasticsearchiin Logstashin kautta ja olet luonut hakemistomallin onnistuneesti, voit siirtyä Kibana-hallintapaneelin Löydä-välilehdelle ja tarkastella Docker-säilösovelluslokeja sekä Docker-metatietoja filebeat * -hakemistokuvion alla.

Viitteet

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