GrayLog - Upravljanje dnevničkim zapisima
Tajana Gašparić
Sadržaj |
Općenito o Graylog-u
Graylog je cjelovito integrirana open-source platforma za upravljanje dnevničkim zapisim (log datotekama). Graylog prikuplja, indeksira i analizira strukturirane i ne strukturirane podatke iz gotovo svih izvora. Komponente koje nisu izvorno Graylog-ove uključujuću MongoDB za metapodatke i Elasticsearch za pohranu log podataka i pretraživanje teksta.
Nastao je 2009. godine, kreiran od strane internacionalnog tima koji je htio svijetu ponuditi pristupačan način za analizu log datoteka besplatno. Svakim danom privlače sve više investitora, te su do današnjeg dana prikupili više od 4 milijuna dolara sredstava.
Graylog arhitektura napravljena je tako da cijeli sustav ne samo što prikuplja i čita log podatke, već svojim korisnicima nudi naprednije opcije za analizu podataka postavljanje monitoringa, generiranje reporta o podacima i ostalo. Komponente arhitekture rade oko servera i nisu integrirane u sam server. Svi dijelovi sustava su usko povezani zbog brže i lakše komunikacije između kako bi vremenski bili usklađeni i samim tim i valjani podaci.
Graylog omogućuje svojim korisnicima beskonačan prostor za pohranu podataka, jer vjeruju da je kontra produktivno i opasno ograničavati korisnike s prostorom.
Danas je Graylog najjači alat poslije Splunka, koji mu predstavlja i najveću konkurenciju. Za budućnost govore kako će poboljšavati sustav i širiti ga na isti način kao što i Splunk to radi.
Instalacija i konfiguracija kontejnera
Minimalni zahtjevi sustava
Graylog poslužiteljska aplikacija ima sljedeće preduvjete:
- Neku modernu Linux distribuciju (Debian Linux, Ubuntu Linux ili CentOS preporučeno)
- Elasticsearch 1.7.3 ili noviji (Elasticsearch 2.x trenutno nije podržan)
- MongoDB 2.0 ili noviji (najnovija stabilna verzija je preporučena)
- Oracle Java SE 7 ili kasnije (Oracle Java SE 8 podržan, OpenJDK 7 i OpenJDK 8 , najnovije stabilno ažuriranje je preporučeno)
Web sučelje Graylog ima sljedeće preduvjete:
- Neka moderna Linux distribucija (Debian Linux, Ubuntu Linux ili CentOS preporučeno)
- Oracle Java SE 7 ili kasnije (Oracle Java SE 8 podržan, OpenJDK 7 i OpenJDK 8)
Instalacija platforme traje 10 minuta, te korisnik može birati između četiri načina instalacije:
- Instalacija na virtualno okruženje
- OS instalacijski paketi
- Instalacija skripti i kontejnera za ostale upravljačke alate
- Ručna instalacija – vlastiti odabir komponenti za instalaciju
Graylog pruža službene DEB (Debian) i RPM (Red Hat) repozitorijske pakete za sljedeće operativna sustava; Ubuntu 12.04, 14.04, Debian 7, 8, RHEL/CentOS 6, 7. Repozitoriji se mogu postaviti instalacijom jednog paketa.
Za instalaciju Grayloga, također je potrebno imati noviju verziju docker-a (aplikacija koja nam dopušta pakiranje aplikacije sa svim njezinim ovicnostima(kod, biblioteke, sistemski alati) u standardiziranu jedinicu za razvoj softvera), a za kreaciju kontejnera sa svim pokrenutim graylog servisima potrebno je upisati sljedeće:
$ docker pull graylog2/allinone $ docker run -t -p 9000:9000 -p 12201:12201 -p 12201:12201/udp graylog2/allinone
Nakon kreacije kontejnera, Graylog instance su spremne za uporabu, te se može pristupiti web sučelju upisivanjem IP adrese Docker hosta. Log datoteke mogu biti bilo koje vrste dok god se koriste portovi koji su ispravno mapirani u docker kontejneru, u suprotnom, podaci neće biti dohvaćeni. S obzirom da je već zadani GELF(Graylog Extended Log Format-format logova koji izbjegava nedostatke običnih, klasičnih syslogova i usavršen je do razine prijavljivanja kroz aplikacijski sloj) port 12201, dobro je započeti GELF TCP upravo tamo.
Najvažnije se instance u Graylog-u mogu konfigurirati kroz varijable razvojnog okruženja, tako će recimo komanda za dodavanje administratorske zaporke izgledati ovako:
$ docker run -t -p 9000:9000 -p 12201:12201 -p 12201:12201/udp -e GRAYLOG_PASSWORD=TaJanaG41 graylog2/allinone
Graylog paketi, kao npr. Omnibus za kreiranje kontejnera, dozvoljavaju diobu na više komponenti. To se odvija u Docker okruženju dok god kontejneri rade na istom hardveru i mrežno su povezani. Prvi pokrenuti kontejner se zove master, a ostali će dohvaćati konfiguracijske parametre iz njega. Kako bi se kreirala dva kontejnera, jedan za web sučelje, a drugi za serverske komponente potrebno je pokrenuti mastera sa Graylogovim serverskim dijelovima:
$ docker run -t -p 12900:12900 -p 12201:12201 -p 12201:12201/udp -p 4001:4001 -e GRAYLOG_SERVER=true graylog2/allinone
Konfiguracijski port 4001 sad može biti dostupan kroz host IP adresu. Zatim je potrebno pokrenuti web sučelje u drugom kontejneru i dodijeliti host adresi mastera kako bi se mogli dohvatiti konfiguracijski parametri:
$ docker run -t -p 9000:9000 -e GRAYLOG_MASTER=<host IP address> -e GRAYLOG_WEB=true graylog2/allinone
Graylog podržava i Amazon Web Servise, te je njihova instalacija zaista jednostavna, jer se od korisnika traži da odabere instancu za AWS, te zahtjeva da tip instance ima barem 4GB memorije. Konfiguriranje par portova i otvaranje Graylog web sučelja i AWS u Graylogu je podešen. Nažalost ovo se isto ne može reći i za Windows korisnike, jer ne postoji način da se graylog nativno instalira na Windows operacijskom sustavu, jedini mogući način je putem virtualne mašine na Windows OS. Tehnički bi trebalo biti moguće pokretati Graylog na taj način, no sami proizvođači ne garantiraju da će uvijek raditi kako treba.
Slanje log podataka
S obzirom da je Graylog poprilično beskoristan bez ikakvih podataka, potrebno je ubaciti u njega podatke. Graylog message inputs su dijelovi Grayloga koji su odgovorni za prihvaćanje log poruka, dolaze od web sučelja (ili REST API) u sistemsku Input sekciju, gdje se pokreću i konfiguriraju bez da se mora resetirati ijedan dio sustava.
Sadržajni paketi su paketi Graylogovih konfiguracija ulaznih i izlaznih varijabli, upravljačkih ploča i stream-ova koju pružaju punu podršku za izvore podataka. Neki od paketa se šalju putem Graylog-a kao predefinirana konfiguracija, a neki su dostupni s web-stranica. Također, Graylog dopušta svojim korisnicima da kreiraju svoje pakete za vlastito Graylog web sučelje. Graylog je u stanju prihvatiti i analizirati RFC 5424 i RFC 3164 kompatibilne syslog(standard za bilježenje aktivnosti na većini sustava) poruke, te podržava TCP prijenos s metodama oktalnog brojenja i zaustavljanja znakova. UDP je također podržan i preporučljiv je način za slanje log poruka u gotovo svim arhitekturama.
Slanje log podataka u Graylog u bilo kojoj arhitekturi detaljnije je opisano na službenim stranicama produkta, a najčešće je slučaj da se radi o par komandi za definiranje instanci ili za konfiguraciju servera. GELF (Graylog Extended Log Format) je format logova koji izbjegava nedostatke običnih, klasičnih syslogova i usavršen je do razine prijavljivanja kroz aplikacijski sloj. Ono dolazi s opcionalnom kompresijom, chunking-om te jasno definiranom strukturom. Svi GELF-ovi se mogu slati putem HTTP-a (kao i nekompresirani GELF-ovi koji su zapravo obični Json stringovi).
Heroku dopušta korisnicima prosljeđivanje logova iz aplikacije na syslog server kreirajući takozvani Syslog drain (odvod). Drain šalje sve logove na konfigurirani server (ili više njih) preko TCP-a.
Graylog upravljačka ploča
Korištenje upravljačke ploče omogućuje izradu unaprijed definiranih pogleda na podatke tako da ono što je bitno uvijek bude nadohvat jednog klika. Ponekad je potrebno znanje o domenama, da bi se mogle shvatiti upute za pretraživanje kako bi dobili točne rezultate za svoje specifične aplikacije. Osobe sa znanjem o domenama mogu definirati upit za pretraživanje jedanput te prikazati rezultate pretrage na ploči kako bi ih podijelili sa suradnicima, menadžerima ili čak drugim odijelima u tvrtki.
Na sljedećim slikama prikazat će se proces stvaranja ploče i pohrane podataka te će krajnji rezultat biti ploča na kojoj se informacije mogu automatski ažurirati i dijeliti na osnovu dozvola o pristupu sadržaju.
Klikom na gumb „Create dashboard“ kreira se nova prazna upravljačka ploča. Jedine potrebne informacije ovdje su Naslov i Opis upravljačke ploče. Preporuča se korištenje specifičnog, ali ne predugog naziva ploče, tako da ostali korisnici mogu jednostavno vidjeti što očekivati u ploči. Opis može biti nešto dulji te bi trebao sadržavati nešto više detalja o samoj upravljačkoj ploči, podacima koji se prikupljaju i kako se prikupljaju. Nakon završnog klika „Create“, upravljačka ploča treba bi biti vidljiva na općem pregledu upravljačkih ploča.
Moguće je dodavati i widgete na upravljačku ploču poput, broja rezultata pretraživanja, histogram rezultata pretraživanja, statistički podaci, grafovi vrijednosti podataka, složeni grafovi. Kada su rezultati pretraživanja vidljivi, moguće ih je dodati klikom na gumb „Add to dashboard“:
Različiti tipovi widgeta u Graylogu
Broj rezultata pretrage
Ova vrsta widget uključuje brojanje broja rezultata pretraživanja za određenu pretragu. To može pomoći da se brzo vizualiziraju stvari poput broja iznimaka logova aplikacija, odnosno broj zahtjeva koje prima jedna web-stranica.
Sva brojanja rezultata pretrage stvorena su s relativnim vremenskim okvirom te dodatno mogu prikazivati informacije o trendovima. Trend se stoga, računa uspoređujući brojač u vremenskom okviru s oni brojačem koji ide nazad u vrijeme za isto toliko. Primjerice, ako se želi izračunati trend pretraživanja s relativnim vremenom od 5 minuta, Graylog će brojati poruke u zadnjih 5 minuta i usporediti ih s onim brojem od 5 minuta prije toga.
Histogram grafovi rezultata pretrage
Histogram rezultata pretraživanja prikazuje grafikon koji koristi vremenski okvir pretrage, skicirajući broj pretraga kroz vremenski okvir. To može pripomoći u vizualizaciji rezultata pretrage kako bi se vidjeli brojevi zahtjeva na stranicu ili broj preuzimanja sadržaja sa stranice.
Statističke vrijednosti
Na ploču se također mogu dodavati i statističke vrijednosti koje pomažu da se vidi prosječno vrijeme odziva aplikacije, koristeći kardinalnu vrijednost polja za koju se izračunava vrijednost. Također i ovdje se mogu dodavati trendovi za statističke vrijednosti kreirani u vremenskom okviru.
Grafikoni vrijednosti polja
Kako bi se kreirala statistička vrijednost kroz vremenski okvir, moguće je koristiti grafikone vrijednosti polja. Oni pomažu u vizualizaciji evolucije broja jedinstvenih korisnika koji posjećuju stranicu primjerice.
Rezultati brzih vrijednosti
Kako bi se prikazala lista vrijednosti koje određeno polje sadrži, moguće je koristiti widget za brze vrijednosti. Ovo primjerice može pomoći da se vide rezultati propalih zahtjeva u aplikaciji ili primjerice koji dijelovi aplikacije imaju najviše problema. Ovi se rezultati mogu prikazivati u obliku grafikona (pie chart) ili u obliku tabličnog prikaza.
Graylog indeksni model
Graylog transparentno upravlja skupom indeksa kako bi optimizirao operacije pretrage i analize. Na taj se način podiže brzina operacija i smanjuje se korištenje resursa u Graylogu. Sustav održava alias indeks koji se zove graylog_deflector koji uvijek ukazuje na trenutno aktivni indeks. Uvijek se koristi točno jedan indeks na kojeg su dodane nove poruke do dostizanja maksimalne veličine u graylog konfiguraciji.
Pozadinski program radi cijelo vrijeme, i svake minute provjerava da li je dostignuta maksimalna veličina, zatim se novi indeks priprema i kreira kada je za to vrijeme. Onda kada je indeks spreman, graylog_deflector se automatski prebacuje na njega, što znači da svi aktivni čvorovi za pisanje uvijek mogu pisati na deflector bez da znaju koji od indeksa trenutno ima to svojstvo.
Gotovo svaka operacija čitanja provodi se u određenom vremenskom rasponu. Graylog zapisuje stoga, samo sekvencijalno kako bi zadržalo prikupljene informacije o indeksima i njihovim počecima. Odabire se lista indeksa kako bi se poslao upit kada je u pitanju vremensko razdoblje. Ako u upitu nije dano vremensko razdoblje, pretraživat će se svi indeksi.
Svaka graylog_server instanca konstantno prati o svakoj operaciji indeksiranja koja se izvodi. Ovdje je to vrlo važno zbog osiguravanja poruka u tranzitu, gdje se u ovakvim situacijama može dogoditi da se poruke propuštaju. Web sučelje dopušta prikazivanje broja operacija pisanja koje nisu uspjele te također listu neuspjelih operacija. Kao i svaka drugi informacija u web sučelju, ovo je dostupno putem REST API-ja koji se mogu nadodati u monitoring sustav.
Blacklisting
Ako imamo poruke koje nam dolaze u Graylog i koje bi trebale biti uništene prije zapisivanja ili prosljeđivanja drugom sustavu, mogu se koristiti Drools pravila za provedbu filtriranja. Dokument sa pravilima je definiran unutar Graylog konfiguracijskog dokumenta :
# Drools Rule File (Use to rewrite incoming log messages) rules_file = /etc/graylog.d/rules/graylog.drl
Dokumenti s pravilima imaju extenziju .drl. Svaki dokument sa pravilima može sadržavati više pravila, upita, funkcija, kao i neke deklaracije resursa kao što su import, global i atributi koji su korišteni od strane pravila ili upita. Generalna ideja je da se bilo koja poruka označena sa setFilterOut(true) bude uništena nakon procesuiranja u Graylog lancu filtera. To se može učiniti korištenjem Drools pravila ili pisanjem svojih vlastitih pravila.
Primjer takvog pravila :
import org.graylog2.plugin.Message import java.util.regex.Matcher import java.util.regex.Pattern rule "Blacklist all messages that start with 'firewall'" when m : Message( message matches "^firewall.*" ) then System.out.println("DEBUG: Blacklisting message."); // Don't do this in production. m.setFilterOut(true); end
Ovo pravilo stavlja na crnu listu (blacklist) bilo koju poruku koja počinje sa stringom „firewall“.
Graylog marketplace
Kao i svaki open-source softver, Graylog svojim korisnicima nudi centralno mjesto za preuzimanje najnovijih plug-inova, GELF knjižnica, sadržaja napravljeno od strane Graylog programera i korisnika zajednice. Integrirano je sa GitHUB-om, tako da svi korisnici koji žele na određen način doprinijeti Graylog zajednici, mogu sa svojim GitHUB računom širiti sadržaj s ostalim korisnicima Grayloga. Svaki dio koji se želi podijeliti sa ostatkom zajednice mora imati svoju odgovorajuću readme datoteku i licencu ako postoji. Na ovaj način svaki od korisnika svakim danom može dobivati najnovije plug-inove, knjižnice (library), pakete sadržaja ili ostala rješenja za Graylog.
Literatura
[1] Grylog:www.graylog.org/ [2] Docker:www.docker.com/what-docker