Elastic Stack (prethodno poznat kao ELK Stack) moćno je rješenje za centralizirano bilježenje logova. To je zbirka softvera otvorenog koda koji je razvio Elastic. Omogućuje administratorima pretraživanje, analizu i vizualizaciju logova generiranih iz bilo kojeg izvora u bilo kojem formatu. To je praksa poznata kao centralizirano bilježenje logova. Centralizirano bilježenje logova može biti vrlo korisno pri pokušaju lociranja problema s poslužiteljima i aplikacijama jer omogućuje pretraživanje svih logova s jednog mjesta. Također može pomoći u identificiranju problema na više poslužitelja povezivanjem logova u određenom vremenu.
U ovom vodiču provjerite kako instalirati Elastic Stack na Ubuntu 18.04. Najprije slijedite naš vodič kako biste jednostavno instalirali svoj Ubuntu poslužitelj na CloudSigma.
Elastic Stack na Ubuntuu
Elastic Stack sastoji se od sljedećih komponenti:
- Elasticsearch: distribuirana RESTful tražilica. Pohranjuje sve prikupljene podatke.
- Logstash: Dio Elastic Stacka za obradu podataka. Šalje dolazne podatke u Elasticsearch.
- Kibana: Web sučelje koje nudi značajke pretraživanja i vizualizacije logova.
- Beats: Lagani prijenosnik podataka s jednom svrhom. Može slati podatke s brojnih računala u Logstash ili Elasticsearch.
Morat ćete ručno instalirati svaku komponentu stoga.
Preduvjeti
Prije nego što nastavite s instalacijom Elastic Stacka, potrebno je ispuniti nekoliko sistemskih zahtjeva:
- Hardverski zahtjevi:
- Procesor: 2 procesora (dostupna korisniku koji nije root, a ima sudo ovlasti)
- RAM: 4GB
- OpenJDK 11 (najnovije Java LTS izdanje). Da biste ovo instalirali, pogledajte naš vodič o tome kako postaviti Javu na Ubuntu 18.04.
- Nginx s ispravnim konfiguracijama. Možete pratiti naš vodič za instalaciju Nginxa na Ubuntu 18.04 kako biste ga postavili.
Imajte na umu da količina prostora za pohranu ovisi o broju logova koje treba prikupiti i pohraniti. Osim toga, Elastic Stack također rukuje vrijednim informacijama o poslužitelju. Kako bi prijenos podataka bio siguran, preporučujemo konfiguriranje TLS/SSL certifikata. Slijedite ovaj vodič za dobivanje besplatnog SSL certifikata na vašem Nginx poslužitelju.
Uz šifrirani poslužitelj, bit će potrebni i sljedeći koraci:
- FQDN (potpuno kvalificirani naziv domene). U ovom vodiču to će biti <domain>.
- Oba DNS zapisa sljedećih domena usmjeravaju na poslužitelj.
- A zapis s <domain> koji pokazuje na javni IP poslužitelja.
- A zapis s www.<domain> koji pokazuje na javni IP poslužitelja.
Instalacija Elastic Stacka
-
Konfiguriranje Elastic repozitorija
Komponente Elastic Stacka nisu dostupne izravno iz službenog Ubuntu repozitorija. Srećom, Ubuntu dopušta repozitorije 3. strane za instalaciju paketa. Za našu svrhu, dodat ćemo repozitorij Elastic paketa. Repozitorij nudi sva najnovija ažuriranja paketa svih Elastic paketa. Svi Elastic paketi potpisani su ključem za potpisivanje Elasticsearcha kako bi se spriječilo lažiranje paketa. Prvo dodajte ključ u Ubuntu privjesak ključeva:
|
1 |
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - |
Zatim dodajte Elastic popis izvora u direktorij „sources.list.d”. To je namjenski direktorij koji APT koristi za traženje novih izvora:
|
1 |
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list |
Na kraju, ažurirajte APT predmemoriju:
|
1 |
sudo apt update |
Prema službenoj dokumentaciji, preporučuje se instalirati svaku od komponenti redoslijedom prikazanim u ovom vodiču. To osigurava da su komponente o kojima pojedini proizvod ovisi na pravom mjestu.
-
Instalacija i konfiguracija Elasticsearcha
Nakon što je Elastic repozitorij konfiguriran, APT je spreman za preuzimanje i instalaciju svih Elastic paketa. Pokrenite sljedeću naredbu za instalaciju Elasticsearcha:
|
1 |
sudo apt install elasticsearch |
Sada možete konfigurirati Elasticsearch. Datoteka „elasticsearch.yml” pruža konfiguracijske opcije o klasterima, čvorovima, putanjama, mrežama, memoriji, mrežnom prolazu i drugome. Većina ih dolazi unaprijed konfigurirana u datoteci. Zatim otvorite konfiguracijsku datoteku za Elasticsearch tekstualnim uređivačem po vašem izboru:
|
1 |
sudo vim /etc/elasticsearch/elasticsearch.yml |
Elasticsearch sluša na portu 9200 s bilo kojeg mjesta. Preporučujemo da ograničite vanjski pristup Elasticsearchu kako biste spriječili vanjske korisnike da čitaju podatke ili gase Elasticsearch klastere pomoću njegovog REST API-ja. Da biste ograničili pristup Elasticsearchu i pojačali njegovu sigurnost, odkomentirajte sljedeći redak i zamijenite njegovu vrijednost:
|
1 |
network.host: localhost |
Ako Elasticsearch treba slušati na određenoj IP adresi, zamijenite „localhost” s ciljanom IP adresom. Ovo je minimalni konfiguracijski zahtjev prije pokretanja Elasticsearcha. Spremite i zatvorite konfiguracijsku datoteku. Zatim pokrenite uslugu Elasticsearch. Pokretanje Elasticsearcha može potrajati nekoliko trenutaka:
|
1 |
sudo systemctl start elasticsearch |
Nakon toga morate osigurati da se Elasticsearch pokreće svaki put kada se poslužitelj podigne:
|
1 |
sudo systemctl enable elasticsearch |
Sljedeća naredba provjerit će radi li usluga Elasticsearch. Sve što je potrebno jest slanje HTTP zahtjeva:
|
1 |
curl -X GET "localhost:9200" |
Odgovor će izgledati otprilike ovako. To će biti odgovor koji prikazuje neke osnovne informacije o lokalnom čvoru.
Instalacija i konfiguracija Kibana nadzorne ploče
Kibana je izravno dostupna iz repozitorija Elastic. Imajte na umu da biste Kibanu trebali instalirati tek nakon što ste već instalirali Elasticsearch. Pod pretpostavkom da je repozitorij već dostupan, APT može izravno preuzeti i instalirati Kibanu:
|
1 |
sudo apt install kibana |
Nakon instalacije, omogućite i pokrenite uslugu Kibana:
|
1 2 |
sudo systemctl enable kibana sudo systemctl start kibana |
Prema zadanim postavkama, Kibana je konfigurirana da sluša samo „localhost”. Za vanjski pristup potrebna je konfiguracija obrnutog proxyja. Ovdje će Nginx biti obrnuti proxy. Upotrijebite naredbu openssl za stvaranje administratorskog korisnika Kibane. To će biti korisnički račun za pristup web sučelju Kibane. Ovdje će primjer korisničkog imena biti „kibana_admin”. Kako biste osigurali bolju sigurnost, preporučujemo upotrebu nestandardnog korisničkog imena. Sljedeća naredba stvorit će administratorskog korisnika za Kibanu. Korisničko ime i lozinka bit će generirani i pohranjeni u datoteci „htpasswd.users”. Nginx će morati biti konfiguriran za upotrebu korisničkog imena i lozinke:
|
1 |
echo "kibana_admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users |
Unesite i potvrdite lozinku na upit. Ova lozinka bit će važna za pristup sučelju Kibane. Nakon toga trebate stvoriti datoteku bloka poslužitelja Nginx. Za demonstraciju, to će biti example.com. To može biti i bilo koji drugi opisni naziv. Ako su za poslužitelj konfigurirani FQDN i DNS zapisi, naziv datoteke također može biti prema FQDN-u:
|
1 |
sudo vim /etc/nginx/sites-available/example.com |
Ako postoji bilo kakav prethodni sadržaj, uklonite ga i zamijenite sljedećim redcima koda:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 80; server_name example.com; auth_basic "Ograničen pristup"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } |
Spremite i zatvorite datoteku. Stvorite simboličku poveznicu nove konfiguracije u direktoriju „sites-enabled”. Ako već postoji neka prethodna poveznica s istim nazivom datoteke, ovaj korak možda neće biti potreban:
|
1 |
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com |
Sljedeća naredba zatražit će od Nginxa provjeru ima li sintaktičkih pogrešaka:
|
1 |
sudo nginx -t |
Ako postoji problem sa sintaksom, provjerite jesu li sadržaji datoteke ispravno postavljeni. Zatim ponovno pokrenite uslugu Nginx:
|
1 |
sudo systemctl restart nginx |
Recite UFW da dopusti povezivanje s Nginxom:
|
1 |
sudo ufw allow 'Nginx Full' |
Kibana bi sada trebala biti dostupna putem FQDN-a ili javne IP adrese poslužitelja Elastic Stack. Provjerite stranicu statusa poslužitelja Kibana:
|
1 |
http://<server_ip>:5601/status |
Instalacija i konfiguracija Logstasha
Iako Beats može izravno slati podatke u bazu podataka Elasticsearch’a, preporučuje se korištenje Logstasha za obradu podataka. Logstash može prikupiti podatke i pretvoriti ih u zajednički format prije izvoza u drugu bazu podataka. Pokrenite sljedeću APT naredbu za instalaciju Logstasha:
|
1 |
sudo apt install logstash |
Nakon što je instalacija dovršena, vrijeme je za konfiguraciju Logstasha. Konfiguracijske datoteke Logstasha su u JSON formatu. Sve ih možete pronaći u direktoriju „/etc/logstash/conf.d”. Korisno je razmišljati o Logstashu kao o cjevovodu koji prima podatke na jednom kraju, obrađuje ih i šalje na odredište. Logstash cjevovod zahtijeva dva obavezna elementa – input i output s jednim neobaveznim elementom – filter. Dodatak input prima podatke, dodatak filter obrađuje podatke, a dodatak output zapisuje podatke na odredište. Sljedeća naredba stvorit će konfiguracijsku datoteku koja će postaviti Logstash za Filebeat input:
|
1 |
sudo vim /etc/logstash/conf.d/02-beats-input.conf |
Unesite sljedeću input konfiguraciju. Ona opisuje beats input koji će slušati na portu 5044 na TCP:
|
1 2 3 4 5 |
input { beats { port => 5044 } } |
Sljedeći korak je stvaranje konfiguracijske datoteke pod nazivom „10-syslog-filter.conf”. Koristit ćemo je za postavljanje filtra za syslogs (sustavske zapise):
|
1 |
sudo vim /etc/logstash/conf.d/10-syslog-filter.conf |
Unesite sljedeći kod za konfiguraciju syslog. Ovaj kod je dostupan izravno iz Elastic vodiča. Ovaj kod objašnjava input konfiguraciju za Logstash:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
ulaz{ beats{ port => 5044 host => "0.0.0.0" } } filtar { ako [skup datoteka][modul] == "sustav" { ako [skup datoteka][naziv] == "autentifikacija" { grok { podudaranje => { "poruka" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] } pattern_definitions => { "GREEDYMULTILINE"=> "(.|\n)*" } remove_field => "message" } date { match => [ "[system][auth][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } geoip { source => "[system][auth][ssh][ip]" target => "[system][auth][ssh][geoip]" } } else if [fileset][name] == "syslog" { grok { match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] } pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" } remove_field => "message" } date { match => [ "[system][syslog][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } } } |
Sljedeća konfiguracijska datoteka bavit će se izlazom. Otvorite novu datoteku pod nazivom „30-elasticsearch-output.conf”:
|
1 |
sudo vim /etc/logstash/conf.d/30-elasticsearch-output.conf |
Unesite sljedeći kod. Ovaj kod objašnjava izlaznu konfiguraciju za Logstash:
|
1 2 3 4 5 6 7 |
output { elasticsearch { hosts => ["localhost:9200"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } } |
Testirajte konfiguraciju Logstasha. Zatim pokrenite sljedeću naredbu:
|
1 |
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t |
Ako nema pogreške, Logstash će ispisati sljedeću poruku o uspjehu. Ako nije bio uspješan, provjerite imaju li sve konfiguracijske datoteke ispravne kodove. Na kraju, pokrenite i omogućite uslugu Logstash:
|
1 2 |
sudo systemctl start logstash sudo systemctl enable logstash |
Sada kada Logstash uspješno radi i potpuno je konfiguriran, instalirajmo Filebeat.
Instalacija i konfiguracija Filebeata
Elastic Stack koristi pošiljatelje podataka, poznate kao „Beats”, za prikupljanje podataka iz različitih izvora i njihov prijenos u Logstash/Elasticsearch. Evo kratkog popisa dostupnih Beats alata tvrtke Elastic:
- Filebeat: Prikupljanje/slanje log datoteka.
- Metricbeat: Prikupljanje/slanje metrika iz sustava i usluga.
- Packetbeat: Prikupljanje/analiza mrežnih podataka.
- Winlogbeat: Prikupljanje Windows zapisnika događaja.
- Auditbeat: Prikupljanje podataka Linux revizijskog okvira i praćenje integriteta datoteka.
- Heartbeat: Praćenje dostupnosti usluga.
Za potrebe ovog vodiča trebat će nam Filebeat za slanje lokalnih logova u Elastic Stack. Prvo instalirajte Filebeat:
|
1 |
sudo apt install filebeat |
Sada možete konfigurirati Filebeat. Prvo se mora povezati s Logstashom. Koristit ćemo primjer konfiguracije koji dolazi s Filebeatom. Otvorite konfiguracijsku datoteku u uređivaču teksta. Imajte na umu da je, budući da je datoteka u YAML formatu, pravilno uvlačenje važno:
|
1 |
sudo vim /etc/filebeat/filebeat.yml |
Pronađite odjeljak „output.elasticsearch” i komentirajte sljedeće retke. To će konfigurirati Filebeat da izravno šalje događaje u Elasticsearch/Logstash za dodatnu obradu. Zatim prijeđite na odjeljak „output.logstash.” Zatim odkomentirajte retke:
|
1 2 3 4 5 6 7 |
#output.elasticsearch: # Niz poslužitelja za povezivanje. # hosts: ["localhost:9200"] output.logstash: # Logstash poslužitelji hosts: ["localhost:5044"] |
Filebeat podržava module koji mogu proširiti njegovu funkcionalnost. U ovom vodiču koristit ćemo modul system koji prikuplja i analizira zapise koje generira usluga sistemskog zapisivanja uobičajenih Linux distribucija. Omogućite Filebeat modul system:
|
1 |
sudo filebeat modules enable system |
Sljedeća Filebeat naredba izlistat će sve omogućene i onemogućene module:
|
1 |
sudo filebeat modules list |
Prema zadanim postavkama, Filebeat je postavljen da prati zadane putanje za syslog i autorizacijske zapise. Parametri modula dostupni su u konfiguracijskoj datoteci „/etc/filebeat/modules.d/system.yml”.
Sljedeći korak je učitavanje predloška indeksa u Elasticsearch. Elasticsearch indeks označava zbirku dokumenata koji dijele slične značajke. Svaki indeks dolazi s nazivom. Naziv je potreban pri izvođenju raznih operacija unutar njega. Predložak indeksa automatski se primjenjuje svaki put kada se generira novi indeks. Zatim učitajte predložak:
|
1 |
sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]' |
Filebeat prema zadanim postavkama sadrži oglednu nadzornu ploču za Kibanu. Pomaže u vizualizaciji Filebeat podataka u Kibani. Međutim, prije korištenja nadzorne ploče potrebno je izraditi uzorak indeksa i učitati nadzorne ploče u Kibanu. Dok se nadzorne ploče učitavaju, Filebeat kontaktira Elasticsearch radi informacija o verziji. Za učitavanje nadzornih ploča, dok je Logstash omogućen, potrebno je onemogućiti Logstash izlaz i omogućiti Elasticsearch izlaz. Sljedeća naredba će obaviti posao:
|
1 |
sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601 |
Na kraju, možete pokrenuti Filebeat:
|
1 2 |
sudo systemctl start filebeat sudo systemctl enable filebeat |
Sada je vrijeme za testiranje konfiguracije Elastic Stacka. Ako je ispravno konfiguriran, izlaz će izgledati otprilike ovako:
|
1 |
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty' |
Ako izlaz javlja ukupno 0 pogodaka, Elasticsearch ne učitava nikakve zapise pod indeksom koji smo tražili. To ukazuje na pogrešku u konfiguraciji. Ako je izlaz bio očekivan, tada je Elastic Stack uspješno konfiguriran.
Pregled Kibana nadzornih ploča
Sada je vrijeme da istražite web sučelje Kibane koje smo već instalirali. Prvo otvorite nadzornu ploču Kibane. Trebala bi se nalaziti na FQDN-u ili javnoj IP adresi poslužitelja Elastic Stacka:
|
1 |
http://<server_ip>:5601 |
Unesite vjerodajnice za prijavu koje smo prethodno generirali. Nakon prijave, nadzorna ploča će izgledati ovako:
Na lijevoj navigacijskoj traci odaberite „Discover”. Zatim odaberite uzorak „filebeat-*”. Prikazuje sve zapisnike prikupljene u posljednjih 15 minuta. Moguće je pretraživati i pregledavati zapisnike te prilagoditi nadzornu ploču:
Na lijevoj navigacijskoj traci idite na Dashboard >> Filebeat System. Ovdje su dostupne sve uzorčne nadzorne ploče iz Filebeatovog sistemskog modula.
U sljedećem primjeru detaljno su prikazane razne statistike temeljene na syslog porukama:
Također može izvijestiti koji su korisnici izvršili naredbe pomoću sudo:
Naposljetku, Kibana vam pruža priliku da istražite many druge funkcionalnosti poput izrade grafikona i filtriranja, stoga slobodno sami istražujte.
Završne misli
Elastic Stack je moćno rješenje za analizu sistemskih zapisnika. Imajte na umu da, iako se bilo koji zapisnik ili indeksirani podaci mogu poslati u Logstash pomoću Beats, postaje korisniji kada se analizira i strukturira putem Logstash filtara.
Sretno računanje!









Komentari
Još nema komentara. Budite prvi.