The Elastic Stack (predtým známy ako ELK Stack) je výkonné riešenie pre centralizované protokolovanie. Je to kolekcia open-source softvéru vyvinutá spoločnosťou Elastic. Umožňuje administrátorom vyhľadávať, analyzovať a vizualizovať logy generované z akéhokoľvek zdroja v akomkoľvek formáte. Ide o postup známy ako centralizované protokolovanie. Centralizované protokolovanie môže byť veľmi užitočné pri hľadaní konkrétnych problémov so servermi a aplikáciami, pretože umožňuje prehľadávať všetky logy z jedného miesta. Môže tiež pomôcť identifikovať problémy na viacerých serveroch koreláciou logov v konkrétnom čase.
V tomto návode sa dozviete, ako nainštalovať Elastic Stack na Ubuntu 18.04. Najprv postupujte podľa nášho návodu, aby ste jednoducho nainštalovali svoj Ubuntu server na CloudSigma.
The Elastic Stack na Ubuntu
The Elastic Stack sa skladá z nasledujúcich komponentov:
- Elasticsearch: Distribuovaný RESTful vyhľadávací nástroj. Ukladá všetky zhromaždené dáta.
- Logstash: Časť The Elastic Stack na spracovanie dát. Odosiela prichádzajúce dáta do Elasticsearch.
- Kibana: Webové rozhranie, ktoré ponúka funkcie vyhľadávania a vizualizácie logov.
- Beats: Ľahký, jednoúčelový odosielateľ dát. Môže posielať dáta z mnohých strojov do Logstash alebo Elasticsearch.
Každý komponent stacku budete musieť nainštalovať manuálne.
Požiadavky
Pred pokračovaním v inštalácii the Elastic Stack musia byť splnené viaceré systémové požiadavky:
- Hardvérové požiadavky:
- CPU: 2 CPU (prístupné pre sudo používateľa, ktorý nie je root)
- RAM: 4GB
- OpenJDK 11 (najnovšia verzia Java LTS). Ak ju chcete nainštalovať, pozrite si náš návod, ako nastaviť Java na Ubuntu 18.04.
- Nginx so správnymi konfiguráciami. Môžete postupovať podľa nášho návodu na inštaláciu Nginx na Ubuntu 18.04, aby ste ho nastavili.
Upozorňujeme, že veľkosť úložiska závisí od počtu logov, ktoré sa majú zhromažďovať a ukladať. Okrem toho The Elastic Stack narába aj s cennými informáciami o serveri. Na zaistenie bezpečnosti prenosu dát dôrazne odporúčame nakonfigurovať TLS/SSL certifikát. Postupujte podľa tohto návodu na získanie bezplatného SSL certifikátu na vašom Nginx serveri.
Okrem šifrovaného servera budú potrebné aj nasledujúce kroky:
- An FQDN (fully qualified domain name). In this guide, it will be <domain>.
- Oba DNS záznamy nasledujúcich domén smerujú na server.
- A záznam s <domain> smerujúci na verejnú IP adresu servera.
- A záznam s www.<domain> smerujúci na verejnú IP adresu servera.
Inštalácia Elastic Stack
-
Konfigurácia Elastic repozitára
Komponenty Elastic Stack nie sú dostupné priamo z oficiálneho repozitára Ubuntu. Našťastie Ubuntu umožňuje repozitárom 3. strán inštalovať balíky. Pre náš účel pridáme repozitár balíkov Elastic. Repozitár ponúka všetky najnovšie aktualizácie všetkých balíkov Elastic. Všetky balíky Elastic sú podpísané podpisovým kľúčom Elasticsearch, aby sa zabránilo podvrhnutiu balíkov. Najprv pridajte kľúč do kľúčenky Ubuntu:
|
1 |
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - |
Potom pridajte zoznam zdrojov Elastic do adresára „sources.list.d“. Je to vyhradený adresár, ktorý APT používa na vyhľadávanie nových zdrojov:
|
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 |
Nakoniec aktualizujte vyrovnávaciu pamäť APT:
|
1 |
sudo apt update |
Podľa oficiálnej dokumentácie sa odporúča nainštalovať každý z komponentov v poradí znázornenom v tomto návode. Tým sa zabezpečí, že komponenty, od ktorých každý produkt závisí, budú na správnom mieste.
-
Inštalácia a konfigurácia Elasticsearch
Po nakonfigurovaní Elastic repozitára je APT pripravený stiahnuť a nainštalovať všetky balíky Elastic. Spustením nasledujúceho príkazu nainštalujte Elasticsearch:
|
1 |
sudo apt install elasticsearch |
Teraz môžete nakonfigurovať Elasticsearch. Súbor „elasticsearch.yml“ poskytuje možnosti konfigurácie týkajúce sa klastrov, uzlov, ciest, sietí, pamäte, brány a ďalších. Väčšina z nich je v súbore predkonfigurovaná. Ďalej otvorte konfiguračný súbor Elasticsearch pomocou textového editora podľa vášho výberu:
|
1 |
sudo vim /etc/elasticsearch/elasticsearch.yml |
Elasticsearch počúva na porte 9200 odkiaľkoľvek. Odporúčame obmedziť prístup k Elasticsearch zvonku, aby ste zabránili nepovolaným osobám čítať dáta alebo vypínať klastre Elasticsearch pomocou jeho REST API. Ak chcete obmedziť prístup k Elasticsearch a zvýšiť jeho bezpečnosť, odkomentujte nasledujúci riadok a nahraďte jeho hodnotu:
|
1 |
network.host: localhost |
Ak má Elasticsearch počúvať na konkrétnej IP adrese, nahraďte „localhost“ cieľovou IP adresou. Toto je minimálna požiadavka na konfiguráciu pred spustením Elasticsearch. Uložte a zatvorte konfiguračný súbor. Ďalej spustite službu Elasticsearch. Spustenie Elasticsearch môže chvíľu trvať:
|
1 |
sudo systemctl start elasticsearch |
Potom musíte zabezpečiť, aby sa Elasticsearch spustil pri každom zavedení servera:
|
1 |
sudo systemctl enable elasticsearch |
Nasledujúci príkaz overí, či služba Elasticsearch beží. Vyžaduje to iba odoslanie požiadavky HTTP:
|
1 |
curl -X GET "localhost:9200" |
Odpoveď bude vyzerať nejako takto. Bude to odpoveď zobrazujúca základné informácie o lokálnom uzle.
Inštalácia a konfigurácia panela Kibana
Kibana je priamo dostupná z repozitára Elastic. Upozorňujeme, že Kibana by ste mali nainštalovať až po tom, čo ste už nainštalovali Elasticsearch. Za predpokladu, že repozitár je už k dispozícii, APT môže priamo stiahnuť a nainštalovať Kibana:
|
1 |
sudo apt install kibana |
Po inštalácii povoľte a spustite službu Kibana:
|
1 2 |
sudo systemctl enable kibana sudo systemctl start kibana |
V predvolenom nastavení je Kibana nakonfigurovaná tak, aby počúvala iba na „localhost“. Pre externý prístup vyžaduje konfiguráciu reverzného proxy. Tu bude Nginx reverzným proxy. Použite príkaz openssl na vytvorenie administrátorského používateľa Kibana. Bude to používateľské konto na prístup k webovému rozhraniu Kibana. V tomto príklade bude používateľské meno „kibana_admin“. Na zaistenie lepšej bezpečnosti odporúčame použiť neštandardné používateľské meno. Nasledujúci príkaz vytvorí administrátorského používateľa pre Kibana. Používateľské meno a heslo sa vygenerujú a uložia do súboru „htpasswd.users“. Nginx bude musieť byť nakonfigurovaný tak, aby používal toto používateľské meno a heslo:
|
1 |
echo "kibana_admin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users |
Po výzve zadajte a potvrďte heslo. Toto heslo bude dôležité pre prístup k rozhraniu Kibana. Potom musíte vytvoriť súbor bloku servera Nginx. Pre demonštráciu to bude example.com. Môže to byť aj akýkoľvek iný popisný názov. Ak sú pre server nakonfigurované záznamy FQDN a DNS, názov súboru môže byť aj podľa FQDN:
|
1 |
sudo vim /etc/nginx/sites-available/example.com |
Ak existuje nejaký predchádzajúci obsah, odstráňte ho a nahraďte ho nasledujúcimi riadkami kódu:
|
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 "Restricted Access"; 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; } } |
Uložte a zatvorte súbor. Vytvorte symbolický odkaz novej konfigurácie v adresári „sites-enabled“. Ak už existuje nejaký predošlý odkaz s rovnakým názvom súboru, tento krok nemusí byť potrebný:
|
1 |
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com |
Nasledujúci príkaz vyzve Nginx, aby skontroloval, či sa v ňom nenachádza nejaká syntaktická chyba:
|
1 |
sudo nginx -t |
Ak sa vyskytne nejaký syntaktický problém, uistite sa, že obsah súboru bol správne umiestnený. Potom reštartujte službu Nginx:
|
1 |
sudo systemctl restart nginx |
Povedzte UFW, aby povolil pripojenie k Nginx:
|
1 |
sudo ufw allow 'Nginx Full' |
Kibana by teraz mala byť prístupná prostredníctvom FQDN alebo verejnej IP adresy servera Elastic Stack. Skontrolujte stavovú stránku servera Kibana:
|
1 |
http://<server_ip>:5601/status |
Inštalácia a konfigurácia Logstash
Hoci Beats môžu posielať dáta priamo do databázy Elasticsearch’s, na spracovanie dát sa odporúča použiť Logstash. Logstash dokáže zhromažďovať dáta a konvertovať ich do spoločného formátu pred exportovaním do inej databázy. Spustením nasledujúceho príkazu APT nainštalujte Logstash:
|
1 |
sudo apt install logstash |
Po dokončení inštalácie je čas nakonfigurovať Logstash. Konfiguračné súbory Logstash sú vo formáte JSON. Všetky ich nájdete v adresári „/etc/logstash/conf.d“. Je užitočné predstaviť si Logstash ako pipeline, ktorá na jednom konci prijíma dáta, spracováva ich a odosiela do cieľa. Pipeline Logstash vyžaduje dva povinné prvky – input a output s jedným voliteľným prvkom – filter. Plugin input prijíma dáta, filter plugin spracováva dáta a output plugin zapisuje dáta do cieľa. Nasledujúci príkaz vytvorí konfiguračný súbor, ktorý nastaví Logstash pre vstup Filebeat:
|
1 |
sudo vim /etc/logstash/conf.d/02-beats-input.conf |
Zadajte nasledujúcu konfiguráciu input. Popisuje vstup beats, ktorý bude počúvať na porte 5044 cez TCP:
|
1 2 3 4 5 |
input { beats { port => 5044 } } |
Ďalším krokom je vytvorenie konfiguračného súboru s názvom „10-syslog-filter.conf“. Použijeme ho na nastavenie filtra pre syslogs (systémové logy):
|
1 |
sudo vim /etc/logstash/conf.d/10-syslog-filter.conf |
Zadajte nasledujúci konfiguračný kód syslog. Tento kód je k dispozícii priamo z Elastic guide. Tento kód vysvetľuje konfiguráciu input pre 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 |
input{ beats{ port => 5044 host => "0.0.0.0" } } filter { if [fileset][module] == "system" { if [fileset][name] == "auth" { grok { match => { "message" => ["%{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" ] } } } } |
Ďalší konfiguračný súbor sa bude zaoberať výstupom. Otvorte nový súbor s názvom „30-elasticsearch-output.conf“:
|
1 |
sudo vim /etc/logstash/conf.d/30-elasticsearch-output.conf |
Zadajte nasledujúci kód. Tento kód vysvetľuje konfiguráciu výstupu pre Logstash:
|
1 2 3 4 5 6 7 |
output { elasticsearch { hosts => ["localhost:9200"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } } |
Otestujte konfiguráciu Logstash. Potom spustite nasledujúci príkaz:
|
1 |
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t |
Ak sa nevyskytne žiadna chyba, Logstash vypíše nasledujúcu správu o úspechu. Ak nebol úspešný, uistite sa, že všetky konfiguračné súbory majú správne kódy. Nakoniec spustite a povoľte službu Logstash:
|
1 2 |
sudo systemctl start logstash sudo systemctl enable logstash |
Teraz, keď Logstash úspešne beží a je plne nakonfigurovaný, nainštalujme Filebeat.
Inštalácia a konfigurácia Filebeat
Elastic Stack využíva odosielateľov dát, známych ako „Beats“, na zber dát z rôznych zdrojov a ich prenos do Logstash/Elasticsearch. Tu je stručný zoznam dostupných Beats od spoločnosti Elastic:
- Filebeat: Zber/odosielanie logovacích súborov.
- Metricbeat: Zber/odosielanie metrík zo systémov a služieb.
- Packetbeat: Zber/analýza sieťových dát.
- Winlogbeat: Zber protokolov udalostí systému Windows.
- Auditbeat: Zber dát z auditovacieho frameworku Linuxu a monitorovanie integrity súborov.
- Heartbeat: Monitorovanie dostupnosti služieb.
Pre účely tohto návodu budeme potrebovať Filebeat na odosielanie lokálnych logov do Elastic Stack. Najprv nainštalujte Filebeat:
|
1 |
sudo apt install filebeat |
Teraz môžete nakonfigurovať Filebeat. Najprv sa musí pripojiť k službe Logstash. Budeme používať ukážkovú konfiguráciu, ktorá sa dodáva s Filebeat. Otvorte konfiguračný súbor v textovom editore. Upozorňujeme, že keďže je súbor vo formáte YAML, dôležité je správne odsadenie:
|
1 |
sudo vim /etc/filebeat/filebeat.yml |
Nájdite sekciu „output.elasticsearch“ a zakomentujte nasledujúce riadky. Tým sa Filebeat nakonfiguruje tak, aby posielal udalosti priamo do Elasticsearch/Logstash na ďalšie spracovanie. Ďalej prejdite na sekciu „output.logstash.“ Potom odkomentujte riadky:
|
1 2 3 4 5 6 7 |
#output.elasticsearch: # Pole hostiteľov, ku ktorým sa má pripojiť. # hosts: ["localhost:9200"] output.logstash: # Hostitelia Logstash hosts: ["localhost:5044"] |
Filebeat podporuje moduly, ktoré môžu rozšíriť jeho funkčnosť. V tomto návode použijeme systémový modul, ktorý zhromažďuje a analyzuje záznamy generované systémovou službou protokolovania bežných distribúcií Linuxu. Povoľte systémový modul Filebeat:
|
1 |
sudo filebeat modules enable system |
Nasledujúci príkaz Filebeat zobrazí zoznam všetkých povolených a zakázaných modulov:
|
1 |
sudo filebeat modules list |
V predvolenom nastavení je Filebeat nastavený tak, aby sledoval predvolené cesty pre syslog a autorizačné záznamy. Parametre modulov sú k dispozícii v konfiguračnom súbore „/etc/filebeat/modules.d/system.yml“.
Ďalším krokom je načítanie šablóny indexu do Elasticsearch. Index Elasticsearch označuje kolekciu dokumentov so spoločnými vlastnosťami. Každý index má svoj názov. Názov je potrebný pri vykonávaní rôznych operácií v ňom. Šablóna indexu sa automaticky použije pri každom vygenerovaní nového indexu. Ďalej načítajte šablónu:
|
1 |
sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]' |
Filebeat predvolene obsahuje ukážkový panel pre Kibana. Pomáha vizualizovať dáta Filebeat v Kibane. Pred použitím panela je však potrebné vytvoriť vzor indexu a načítať panely do Kibany. Počas načítavania panelov Filebeat kontaktuje Elasticsearch kvôli informáciám o verzii. Na načítanie panelov, keď je povolený Logstash, je potrebné mať zakázaný výstup Logstash a povolený výstup Elasticsearch. Nasledujúci príkaz vykoná túto úlohu:
|
1 |
sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601 |
Nakoniec môžete spustiť Filebeat:
|
1 2 |
sudo systemctl start filebeat sudo systemctl enable filebeat |
Teraz je čas otestovať konfiguráciu Elastic Stack. Ak bola správne nakonfigurovaná, výstup bude vyzerať približne takto:
|
1 |
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty' |
Ak výstup hlási celkovo 0 zásahov, Elasticsearch nenačítava žiadne záznamy pod indexom, ktorý sme hľadali. To naznačuje, že v konfigurácii došlo k chybe. Ak bol výstup podľa očakávania, potom je Elastic Stack úspešne nakonfigurovaný.
Prehľad panelov Kibana
Teraz je čas preskúmať webové rozhranie Kibana, ktoré sme už nainštalovali. Najprv otvorte panel Kibana. Mal by sa nachádzať na adrese FQDN alebo verejnej IP adrese servera Elastic Stack:
|
1 |
http://<server_ip>:5601 |
Zadajte prihlasovacie údaje, ktoré sme vygenerovali predtým. Po prihlásení bude panel vyzerať takto:
V ľavom navigačnom paneli vyberte „Discover“. Potom vyberte vzor „filebeat-*“. Zobrazuje všetky logy zhromaždené za posledných 15 minút. Je možné vyhľadávať a prehliadať logy a prispôsobiť si nástenku:
V ľavom navigačnom paneli prejdite na Dashboard >> Filebeat System. Tu sú k dispozícii všetky ukážkové nástenky zo systémového modulu Filebeat.
V nasledujúcom príklade sú podrobne uvedené rôzne štatistiky založené na správach syslog:
Môže tiež nahlásiť, ktorí používatelia spustili príkazy pomocou sudo:
Na záver vám Kibana dáva možnosť preskúmať mnoho ďalších funkcií, ako je tvorba grafov a filtrovanie, takže neváhajte a preskúmajte ich sami.
Záverečné myšlienky
Elastic Stack je výkonné riešenie na analýzu systémových logov. Majte na pamäti, že hoci akýkoľvek log alebo indexované dáta môžu byť odoslané do Logstash pomocou Beats, stáva sa užitočnejším, keď je analyzovaný a štruktúrovaný pomocou filtrov Logstash.
Príjemnú prácu s počítačom!









Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.