Hogyan egyszerűsítheti a Docker konténernapló elemzését az Elastic Stack segítségével

A naplózás minden alkalmazás elengedhetetlen eleme. A naplók lehetővé teszik, hogy elemezzen és csúcsot tudjon bepillantani az alkalmazáskódon belüli történésekbe, például egy történetbe. A szoftverfejlesztők a mindennapi életük nagy részét az alkalmazások megfigyelésével, hibaelhárításával és hibakeresésével töltik, ami néha rémálommá válhat. A naplózás lehetővé teszi a szoftverfejlesztők számára, hogy ezt a mozgalmas folyamatot sokkal könnyebbé és gördülékenyebbé tegyék.

Ha tárolta az alkalmazását egy olyan konténerplatformdal, mint a Docker, akkor ismerheti a dokkoló naplóitamely lehetővé teszi, hogy megtekinthesse az alkalmazásban létrehozott naplókat a dokkoló-tárolóban. Miért gondolna akkor az Elastic Stackre a naplók elemzéséhez? Nos, itt elsősorban két égető probléma van:

  • Képzelje el, hogy több tíz, száz vagy akár ezer tároló rendelkezik naplók létrehozásával - SSH-csatlakozás ezekre a szerverekre és a naplók kinyerése nem fog jól működni.
  • A konténerek is változhatatlanok és mulandóak, ami azt jelenti, hogy rövidebb az élettartamuk. Tehát, ha a tárolók eltűntek és új tárolókra cserélődtek, a régi tárolókkal kapcsolatos összes alkalmazásnapló eltűnik.

Tehát ennek végső megoldása az, hogy létrehoz egy központosított naplózási összetevőt az összes konténernapló összegyűjtésére egyetlen helyre. Itt jön be az Elastic Stacks.

Az Elastic Stack főleg négy fő összetevőből áll:

  • A Beats az új tag, amely az ELK Stack-et Elastic Stack néven ismertté tette. A Beats könnyű napló adatszállítók, amelyek rönköket tolhatnak az ELK veremhez. Ehhez a bejegyzéshez a Filebeats-t fogom használni, amely a Beats család tagja, amely könnyű módot kínál a naplók és fájlok összegyűjtésére, továbbítására és központosítására.
  • A Logstash egy olyan összetevő, amely összesíti, módosítja és átadja a naplókat több bemeneti helyről az Elasticsearch-be.
  • Az elasztikus kutatás azelosztott, JSON-alapú kereső és elemző motor, amely skálázható és kezelhető módon tárolja és indexeli az adatokat (ebben az esetben a naplóbejegyzéseket).
  • A Kibana egy gazdagított felhasználói felület az Elasticsearch adatainak elemzéséhez és az azokhoz való könnyű hozzáféréshez.

Ebben a bejegyzésben megvizsgáljuk, hogyan használhatjuk a fent említett összetevőket, és hogyan hozhatunk létre központosított naplóelemzőt a naplók gyűjtésére és kinyerésére a Docker konténerekből.

A cikk céljaira két t2.kisméretű AWS EC2 példányt használtam, amelyek a Dockerrel és a Docker compose programmal együtt telepített Ubuntu 18.04-et futtatták. Az 1. példány egy tomcat webappot futtat, a 2. példány pedig az ELK veremet (Elasticsearch, Logstash, Kibana).

Linux alatt alapértelmezés szerint a dokkoló naplók ezen a helyen találhatók:

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

Az összes dokkoló naplót a fogadó gépen belül tárolóként futó Filebeat segítségével gyűjtjük össze. A Filebeat minden dokkológépre telepítve lesz (ehhez egy egyedi Filebeat dokkoló fájlt és systemd egységet fogunk használni, amelyet a Filebeat konfigurálása szakaszban ismertetünk.)

A tomcat webalkalmazásunk az alapértelmezett docker naplózási illesztőprogram segítségével írja be a naplókat a fenti helyre. A Filebeat ekkor kivonja a naplókat erről a helyről, és a Logstash felé tolja őket.

Egy másik fontos dolog, amit meg kell jegyezni, hogy az alkalmazás által generált naplókon kívül szükségünk van a tárolókhoz társított metaadatokra is, például tároló nevére, képére, címkéire, gazdagépére stb. . Ezeket az adatokat a Filebeat az alkalmazásnapló bejegyzéseivel együtt egyszerűen elküldheti.

Ilyen megvalósítással a futó tárolóknak nem kell aggódniuk a naplózási illesztőprogramért, a naplók gyűjtésének és tolásának módjáról. A Filebeat gondoskodni fog azokról. Ezt gyakran egyetlen felelősség elvének nevezik .

A Filebeat beállítása

Ehhez a szakaszhoz a filebeat.yml és a Dockerfile fájlokat Bruno COSTE minta-filebeat-dokkoló-naplózó github repo-jából kaptuk. Nagyon köszönöm félelmetes munkájának. De mivel a filebeat.yml fájlt ennek a cikknek a követelményei szerint több változtatással hajtottam végre, a filebeat.service (systemd fájl) fájlokat külön vendégül láttam a saját repómban. A repót itt érheti el.

Első lépésként frissítenie kell a Filebeat.yml fájlt, amely a Filebeat konfigurációit tartalmazza. Az alábbiakban bemutatunk egy használható filebeat.yml fájlt. Vegye figyelembe a 21. sort, az output.logstash és a hosts mezőt. Beállítottam annak a kiszolgálónak az IP-címére, amelyen az ELK-veremet futtatom, de módosíthatja, ha a Logstash-t külön kiszolgálón futtatja. Alapértelmezés szerint a Logstash az 5044-es porton hallgatja a Filebeat programot.

Ha többet szeretne megtudni a Filebeat Docker konfigurációs paramétereiről, nézze meg itt.

Ezt követően létrehozhatja saját Filebeat Docker képét a következő Dockerfile használatával.

Miután a kép elkészült, betolthatja a dokkolói lerakatba. Most, hogy képes a Filebeat futtatására dokkoló konténerként, csak a Filebeat tároló futtatásáról van szó a tárolókat futtató gazdagépeken. Itt van a dokkoló futtatási parancs.

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

A fenti Docker parancsban vegye figyelembe a két kötési paramétert: / var / lib / docker / container az az útvonal, ahol a docker naplók léteznek a gazdagépen, és a / usr / share / dockerlogs / adatútvonalhoz van kötve a Filebeat-en belül. csak olvasható hozzáféréssel rendelkező tároló. A második bind mount argumentumban a /var/run/docker.sock fájlba van kötve a Filebeat tároló Docker démonja. Ez az unix socket, amelyet a Docker démon alapértelmezés szerint hallgat, és használható a démonnal egy konténeren belüli kommunikációra. Ez lehetővé teszi a Filebeat-tárolónk számára, hogy megszerezze a Docker-metaadatokat, gazdagítsa a tároló-naplóbejegyzéseket a metaadatokkal együtt, és az ELK-verembe helyezze.

Ha automatizálni szeretné ezt a folyamatot, írtam egy Systemd Unit fájlt a Filebeat szolgáltatásként történő kezelésére.

Az ELK verem konfigurálása

Ehhez a második EC2 példányomat fogom használni, ahol az ELK stacket futtatom. Ehhez egyszerűen telepítse a Docker compose alkalmazást, és ellenőrizze ezt a fantasztikus deviantony / docker-elk repót, és csak futtassa a docker-compose up -d programot

Vegye figyelembe, hogy az összes tűzfalszabály lehetővé teszi a bejövő forgalmat a Logstash, az Elasticsearch és a Kibana oldalain.

Az ELK-verem futtatása előtt meg kell győződnie arról, hogy a logstash.conf fájl megfelelően van-e konfigurálva az 5044-es port bejövő ütemnaplóinak meghallgatására, és a naplókat megfelelően hozzáadja-e az elasticsearch gazdagéphez. Azt is meg kell győződnie arról, hogy indexparamétert kell hozzáadnia az Elasticsearch alkalmazáshoz a Filbeat által generált naplók egyedi azonosításához.

A docker-elk repóban megtalálhatja a logstash.conf fájlt a docker-elk / logstash / pipeline elérési útjának követésével. Ez a Logstash konfigurációk beállításához szükséges konfigurációs fájl. A következőképpen kell frissítenie:

Miután megtette, alapértelmezés szerint hozzáférhet a Kibana irányítópultjához az 5601-es porton, a docker-compose.yml fájlban definiált módon a deviantony / docker-elk repo fájlban.

A Kezelés lapon létrehozhat egy indexmintát a Filebeat naplókhoz. Ezt meg kell tenni, mielőtt megnézheti a naplókat a Kibana irányítópultján.

Ha a tárolók megfelelően nyomják a naplókat az Elasticsearch programba a Logstash segítségével, és az indexmintát sikeresen létrehozta, akkor lépjen a Kibana irányítópultjának Felfedezés fülére, és tekintse meg Docker-tárolóalkalmazás-naplóit a Docker-metaadatokkal együtt a filebeat * indexminta alatt.

Hivatkozások

  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