Last Updated on 11/07/2023 by administrator
Instalace Ubuntu Elasticsearch Kibana Logstash Filebeat (Elastic Stack)
Instalace Ubuntu Elasticsearch Kibana
Motivace:
Elastic Stack je sada open-source nástrojů vyvíjená společností Elastic. Tato sada nástrojů se skládá z několika komponent, včetně Elasticsearch, Logstash, Kibana a Beats, které spolupracují a poskytují robustní řešení pro sběr, ukládání, analýzu a vizualizaci dat.
OS:
Instalace byla prováděna na Ubuntu 22.04 LTS. Konkrétně otestováno přes VirtualBox.
Minimální hardwarové požadavky [4]:
- Procesor: 2 nebo více jáder s rychlostí 2 GHz nebo vyšší.
- Operační paměť (RAM): Nejméně 4 GB RAM (doporučeno je 8 GB a více).
- Diskový prostor: Doporučuje se minimálně 50 GB volného místa pro data Elasticsearch.
Implementace:
Níže bude postupováno a bude tak provedena Instalace na Ubuntu pro Elasticsearch, Kibana, Logstash a Filebeat.
Přidání repozitáře Elastic:
Provést import GPG klíče Elastic:
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch |sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
Příkaz níže přidá soubor elastic-8.x.list pro Elastic source list do složky /etc/apt/sources.list.d/
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
Pozn. Aktuální verze Elasticsearch je 8.8.1 (ke dni 16.6.2023)
Příkazem apt update se provede aktualizace seznamu balíčků z repozitářů:
sudo apt update
Instalace a konfigurace Elasticsearch:
Elasticsearch je open-source vyhledávací a analytická platforma. Je často používána pro fulltextové vyhledávání, logování, analýzu dat a tvorbu personalizovaných doporučení. Defaultně naslouchá na portu TCP/9200.
Díky přidání source listu je možné provést instalaci Elasticsearch:
sudo apt install elasticsearch
Výstup příkazu sudo apt install elasticsearch bude vypada podobně. Je duležité si poznamenat heslo pro superusera označené níže:
Setting up elasticsearch (8.8.1) ... --------------------------- Security autoconfiguration information ------------------------------ Authentication and authorization are enabled. TLS for the transport and HTTP layers is enabled and configured. The generated password for the elastic built-in superuser is : tG5zeZcxdfqqQqpCaIKJ If this node should join an existing cluster, you can reconfigure this with '/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token ' after creating an enrollment token on your existing cluster. You can complete the following actions at any time: Reset the password of the elastic built-in superuser with '/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'. Generate an enrollment token for Kibana instances with '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'. Generate an enrollment token for Elasticsearch nodes with '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'. -------------------------------------------------------------------------------------------------
Otevřít elasticsearch.yml soubor ve složce /etc/elasticsearch/:
sudo vi /etc/elasticsearch/elasticsearch.yml
a přepsat parametr network.host na localhost
network.host: localhost
Pozn. Defaultně Elasticsearch naslouchá na portu TCP/9200 a je přístupný pro vzdálený přístup. Parametrem localhost, se definuje, že bude dostupný pouze z tohoto nainstalovaného serveru, tímto se zvýší jeho bezpečnost (zabrání se vzdálenému čtení dat nebo vypnutí clusteru).
Spuštění Elasticsearch:
Nastartování Elasticsearch služby:
sudo systemctl start elasticsearch
Aby se Elasticsearch služba aktivovala po rebootu Ubuntu aplikovat příkaz níže:
sudo systemctl enable elasticsearch
Příkaz níže otestuje, zda služba Elasticsearach běží:
curl -X GET "https://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=50s&pretty" --key certificates/elasticsearch-ca.pem -k -u elastic
[3] Výstup příkazu curl -X GET by měl vypadat podobně jakož je to viděno níže. Příkaz bude žádat heslo pro uživatele elastic, v tomto případě se jedná o vygenerované výše, čím bylo tG5zeZcxdfqqQqpCaIKJ.
Enter host password for user 'elastic': { "cluster_name" : "elasticsearch", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 1, "active_shards" : 1, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
Instalace Kibana:
Kibana je open-source nástroj pro vizualizaci a analýzu dat, který je součástí Elastic Stack (ELK Stack). Je navržen tak, aby poskytoval uživatelům možnost interaktivně prozkoumávat, analyzovat a vizualizovat data uložená v Elasticsearch. Defaultně naslouchá na portu TCP/5601.
Provést instalaci Kibana:
sudo apt install kibana -y
Spuštění Kibana:
Aby se Elasticsearch služba aktivovala po rebootu Ubuntu aplikovat příkaz níže:
sudo systemctl enable kibana
Provést spuštění Elasticsearch služby:
sudo systemctl start kibana
Instalace a konfigurace webového serveru Nginx:
Instalace webového serveru Nginx:
apt install nginx -y
Otevřít soubor default ve složce /etc/nginx/sites-enabled/:
vi /etc/nginx/sites-enabled/default
zakomentovat řádek níže:
#try_files $uri $uri/ =404;
a přidat řádek pro proxy pass:
proxy_pass http://127.0.0.1:5601;
Částečný výpis configu v souboru /etc/nginx/sites-enabled/default bude vypadat následovně:
server {
listen 80 default_server;
listen [::]:80 default_server;
...
location / {
proxy_pass http://127.0.0.1:5601;
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
Pro kontrolování Nginx syntaxe použít:
sudo nginx -t
Provést restart služby Nginx:
sudo systemctl reload nginx
Povolit automatické spuštění Nginx služby při startu systému:
sudo systemctl enable nginx
Test připojení na Elastic:
Nyní je možné se připojit vzdáleně na Elastic server přes webový prohlížeč. V tomto případě běží pod http://192.168.0.162.
Je nutné vygenerovat Enrollment token. To se provede příkazem níže. Parametr “s” definuje login, pro přihlášení k webovému rozhraní:
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
Ten zkopírovat do okna, jak ukazuje obrázek níže a kliknout na Configure Elastic:
Zobrazí okno, kde je nutné zadat kód pro ověření Kibana serveru. Tento kód se vygeneruje příkazem níže:
/usr/share/kibana/bin/kibana-verification-code
Následně se automaticky provede dokončení instalace Elastic:
Nyní je možné se přihlásit pod uživatelem elastic. Heslo se použije to, co se vygenerovalo po instalaci Elasticsearch výše (The generated password for the elastic built-in superuser):
Pozn. Při ztracení hesla je možné heslo vygenerovat znovu pro uživatele elastic pomocí příkazu níže:
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic![]()
Instalace a konfigurace Logstash:
Logstash je open-source nástroj pro sběr, zpracování a načítání dat z různých zdrojů do různých cílů. Slouží pro lepší flexibilitu shromažďování dat z různých zdrojů. Defaultně naslouchá na portu TCP/5044.
Logstash bude nakonfigurován na stejném serveru jako Elasticsearch.
sudo apt install logstash -y
Logstash přijímá data na vstupu (INPUTS), což mužou být logové soubory, události z různých protokolů (např. syslog, HTTP, MQTT), relační databáze.
Dále tyto data zpracuje (FILTERS), zde provádějí transformaci a normalizaci dat získaných z input pluginů. Tyto pluginy mohou provádět různé úpravy, jako například parsování logových záznamů, extrahování polí, úpravy časových údajů, filtrování událostí podle určitých kritérií, přidávání metadata atd.
A pošle je na výstup (OUTPUTS), kde cílem je Elasticsearch, ale může to být i relační databáze různé služby pro vizualizaci dat (např. Kibana), cloudové úložiště atd.
Nejdřív tedy bude vytvořen INPUT soubor 02-beats-input.conf, kde se nastaví Filebeat input:
sudo vi /etc/logstash/conf.d/02-beats-input.conf
a vložit do souboru 02-beats-input.conf konfiguraci níže. Touto konfiguraci bude následně poslouchat Logstash na portu TCP/5044:
input { beats { port => 5044 } }
Zkopírovat certifikát http_ca.crt ze složky /etc/elasticsearch/certs/ do složky /etc/logstash/, jelikož logstash nemá práva pro čtení ve složce /etc/elasticsearch/certs/:
cp /etc/elasticsearch/certs/http_ca.crt /etc/logstash/
Povolit read práva pro others aby logstash mohl přečíst http_ca.crt certifikát:
chmod o+r /etc/logstash/http_ca.crt
Dále bude vytvořen OUTPUT soubor 30-elasticsearch-output.conf:
sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
a vložit do souboru 30-elasticsearch-output.conf konfiguraci níže. To nakonfiguruje Logstash aby ukládal data v Elasticsearch který běží na stejném serveru a portu TCP/9200, čili v tomto případě je to localhost:9200:
Výše vygenerované údaje pro přihlášení byly elastic/tG5zeZcxdfqqQqpCaIKJ
output { if [@metadata][pipeline] { elasticsearch { user => 'elastic' password => 'tG5zeZcxdfqqQqpCaIKJ' hosts => ["https://localhost:9200"] ssl_certificate_authorities => ["/etc/logstash/http_ca.crt"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" pipeline => "%{[@metadata][pipeline]}" } } else { elasticsearch { hosts => ["https://localhost:9200"] user => 'elastic' password => 'tG5zeZcxdfqqQqpCaIKJ' ssl_certificate_authorities => ["/etc/logstash/http_ca.crt"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } } }
Otestování Logstash konfigurace se provede příkazem níže:
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Pokud nenastala žádná chyba, výstup příkazu sudo -u logstash /usr/share/logstash/bin/logstash –path.settings /etc/logstash -t by měl ukázat Config Validation Result: OK. Exiting Logstash hlášku:
Using bundled JDK: /usr/share/logstash/jdk Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties [2023-06-16T12:51:54,012][INFO ][logstash.runner ] Log4j configuration path used is: /etc/logstash/log4j2.properties [2023-06-16T12:51:54,024][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"8.8.1", "jruby.version"=>"jruby 9.3.10.0 (2.6.8) 2023-02-01 107b2e6697 OpenJDK 64-Bit Server VM 17.0.7+7 on 17.0.7+7 +indy +jit [x86_64-linux]"} [2023-06-16T12:51:54,027][INFO ][logstash.runner ] JVM bootstrap flags: [-Xms1g, -Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djruby.compile.invokedynamic=true, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadContextMapInheritable=true, -Djruby.regexp.interruptible=true, -Djdk.io.File.enableADS=true, --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-opens=java.base/java.security=ALL-UNNAMED, --add-opens=java.base/java.io=ALL-UNNAMED, --add-opens=java.base/java.nio.channels=ALL-UNNAMED, --add-opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-opens=java.management/sun.management=ALL-UNNAMED] [2023-06-16T12:51:54,048][INFO ][logstash.settings ] Creating directory {:setting=>"path.queue", :path=>"/var/lib/logstash/queue"} [2023-06-16T12:51:54,051][INFO ][logstash.settings ] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/var/lib/logstash/dead_letter_queue"} [2023-06-16T12:51:54,956][INFO ][org.reflections.Reflections] Reflections took 180 ms to scan 1 urls, producing 132 keys and 464 values [2023-06-16T12:51:55,399][INFO ][logstash.javapipeline ] Pipeline `main` is configured with `pipeline.ecs_compatibility: v8` setting. All plugins in this pipeline will default to `ecs_compatibility => v8` unless explicitly configured otherwise. Configuration OK [2023-06-16T12:51:55,404][INFO ][logstash.runner ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
Pozn. Hlášky warnings z Open JDK by problémy způsobovat neměly a můžou být ignorovány.
Spuštění Logstash:
Provést spuštění Logstash služby:
sudo systemctl start logstash
Aby se Logstash služba aktivovala po rebootu Ubuntu aplikovat příkaz níže:
sudo systemctl enable logstash
Instalace a konfigurace Filebeat:
Filebeat se používá pro sběr, analýzu a odesílání logovacích souborů nebo jiných strukturovaných dat z různých zdrojů do systému pro zpracování a analýzu logů. Jeho hlavním úkolem je poskytovat jednoduchý a efektivní způsob přenosu logovacích dat do centrálního úložiště Elasticsearch.
Filebeat bude nainstalován na stejném serveru jako Elasticsearch a Logstash:
sudo apt install filebeat -y
Defaultně odesílá Filebeat přímo zprávy do Elasticsearch a to na portu TCP/9200. Nicméně v tomto návodu se budou zprávy posílat do Logstash sloužící jako centrální bod pro zpracování všech logů a to na portu TCP/5044.
Otevřít konfigurační soubor filebeat.yml:
sudo vi /etc/filebeat/filebeat.yml
Zakomentovat následující řádky níže:
#output.elasticsearch: # Array of hosts to connect to. #hosts: ["localhost:9200"]
a odkomentovat řádky níže:
output.logstash: # The Logstash hosts hosts: ["localhost:5044"]
Filebeat obsahuje mnoho modulů, nicméně v tomto případě bude použitý jen modul system, který sbírá a zpracovává (parsuje) a to díky službě logování, která je běžnou součástí Linuxových distribucí. Pro povolení modulu system použít příkaz níže:
sudo filebeat modules enable system
Seznam všech dostupných modulů lze vidět příkazem:
sudo filebeat modules list
Částečný výstup příkazu sudo filebeat modules list ukazuje, že byl povolený modul system:
Enabled:
system
Disabled:
activemq
apache
auditd
aws
awsfargate
...
Příkaz níže spustí příkaz pro nastavení Filebeat a –pipelines povolí vytvoření předdefinovaných konfiguračních pipelines pro zpracování logů, přepínač –module systems aktivuje systémový modul pro konfiguraci a sběr systémových logů. Spuštění tohoto příkazu inicializuje Filebeat a nakonfiguruje ho tak, aby sbíral systémové logy pomocí předdefinovaného modulu pro systémové logy:
sudo filebeat setup --pipelines --modules system
Výstup příkazu sudo filebeat setup –pipelines –modules system vypadá následovně:
Exiting: module system is configured but has no enabled filesets
Otevřít soubor system.yml ve složce /etc/filebeat/modules.d/:
vi /etc/filebeat/modules.d/system.yml
a změnit parametr pro syslog enabled na true:
# Module: system # Docs: https://www.elastic.co/guide/en/beats/filebeat/8.8/filebeat-module-system.html - module: system # Syslog syslog: enabled: true
Otevřít soubor filebeat.yml ve složce /etc/filebeat/:
vi /etc/filebeat/filebeat.yml
a změnit parametr enabled na true:
# Change to true to enable this input configuration. enabled: true
Příkaz filebeat setup automaticky nastaví indexy a šablony pro Filebeat v Elasticsearch, –index-management provede vytvoření potřebných indexů a šablon v Elasticsearch, -E output.logstash.enabled=false vypne výstup do Logstash a přímo posílá události do Elasticsearch, -E output.elasticsearch.hosts=[“localhost:9200”] definuje adresu a port Elasticsearch, kam bude Filebeat odesílat události, -E output.elasticsearch.protocol=https nastavuje komunikaci HTTPS, místo HTTP, output.elasticsearch.ssl.certificate_authorities definuje cestu k souboru certifikátu, -E output.elasticsearch.username a -E output.elasticsearch.password definuje login a heslo pro přihlášení k Elasticsearch běžící na localhostu TCP/9200:
sudo filebeat setup --index-management -E output.logstash.enabled=false -E output.elasticsearch.hosts=["localhost:9200"] -E output.elasticsearch.protocol=https -E output.elasticsearch.ssl.certificate_authorities="/etc/logstash/http_ca.crt" -E output.elasticsearch.username="elastic" -E output.elasticsearch.password="tG5zeZcxdfqqQqpCaIKJ"
Výstup příkazu sudo filebeat setup –index-management … bude vypadat následovně:
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished.
Příkaz níže je podobný jako tento výše nicméně definuje se zde parametr -E setup.kibana.host=localhost:5601:čímž se specifuje adresa a port Kibana serveru, se kterým bude Filebeat komunikovat pro nastavení Kibana dashboards a vizualizací.
sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601 -E output.elasticsearch.protocol=https -E output.elasticsearch.ssl.certificate_authorities="/etc/logstash/http_ca.crt" -E output.elasticsearch.username="elastic" -E output.elasticsearch.password="tG5zeZcxdfqqQqpCaIKJ"
Výstup příkazu sudo filebeat setup -E output.logstash.enabled=false ... bude vypadat následovně:
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Loaded Ingest pipelines
Povolit automatické spuštění Filebeat služby při startu systému:
sudo systemctl start filebeat
Provést restart služby Filebeat:
sudo systemctl enable filebeat
Pomocí query níže se ověří, zda Elasticsearch přijímá data:
curl -XGET 'https://localhost:9200/filebeat-*/_search?pretty' --key certificates/elasticsearch-ca.pem -k -u elastic
Výstup příkazu curl -X GET by měl vypadat podobně jakož je to viděno níže. Příkaz bude žádat heslo pro uživatele elastic, v tomto případě se jedná o vygenerované výše, čím bylo tG5zeZcxdfqqQqpCaIKJ.
Enter host password for user 'elastic':
{
"took" : 305,
"timed_out" : false,
"_shards" : {
"total" : 2,
"successful" : 2,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2375,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-8.8.1-2023.06.16",
"_id" : "9w7sxYgBbyzhhQVwebwN",
"_score" : 1.0,
"_source" : {
"log" : {
"file" : {
"path" : "/var/log/kern.log"
},
"offset" : 69527
},
"event" : {
"original" : "Jun 12 10:32:13 sec kernel: [ 0.220008] Speculative Store Bypass: Vulnerable"
},
"input" : {
"type" : "filestream"
},
"ecs" : {
"version" : "8.0.0"
},
"host" : {
"id" : "0ffca90d37f84beab1286b5b71ce275d",
"hostname" : "sec",
"architecture" : "x86_64",
"mac" : [
"08-00-27-32-F1-97"
],
"ip" : [
"192.168.0.162",
"fe80::a00:27ff:fe32:f197"
],
"containerized" : false,
"os" : {
"kernel" : "5.15.0-75-generic",
"version" : "22.04.2 LTS (Jammy Jellyfish)",
"family" : "debian",
"type" : "linux",
"platform" : "ubuntu",
"codename" : "jammy",
"name" : "Ubuntu"
},
"name" : "sec"
},
"message" : "Jun 12 10:32:13 sec kernel: [ 0.220008] Speculative Store Bypass: Vulnerable",
"agent" : {
"ephemeral_id" : "fa630888-22c4-412c-8a19-d093bc392fa3",
"id" : "149f0999-4105-44e0-98ca-e64f71a6e43c",
"type" : "filebeat",
"version" : "8.8.1",
"name" : "sec"
},
"@timestamp" : "2023-06-16T20:36:05.485Z",
"tags" : [
"beats_input_codec_plain_applied"
],
"@version" : "1"
}
},
...
Položka Filebeat a také přijaté logy by měly být viděny přes web v Analytics > Discover:
Tímto proběhla Instalace na Ubuntu Elasticsearch Kibana Logstash a Filebeat.
Zdroje:
[2] https://www.youtube.com/watch?v=Ts-ofIVRMo4
[4] ChatGPT