Logstash je open source aplikace pro centrální správu souborů protokolů.
Můžete shromažďovat protokoly z více serverů, více aplikací, analyzovat tyto protokoly a ukládat je na centrální místo. Jakmile je uložen, můžete pomocí webového rozhraní GUI vyhledávat protokoly, procházet protokoly a vytvářet různé sestavy.
Tento tutoriál vysvětlí základy logstash a vše, co potřebujete vědět o tom, jak nainstalovat a nakonfigurovat logstash ve vašem systému.
1. Stáhněte si Logstatsh Binary
Logstash je součástí rodiny elasticsearch. Stáhněte si jej z webu logstash zde. Aby to fungovalo, měli byste mít na svém počítači nainstalovanou javu.
nebo použijte curl ke stažení přímo z webu.
wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz tar zxvf logstash-1.4.2.tar.gz cd logstash-1.4.2
Poznámka:Logstash pomocí yum nainstalujeme později. Prozatím si binární soubor nejprve stáhneme ručně, abychom z příkazového řádku zkontrolovali, jak funguje.
2. Logstash Zadejte možnosti v příkazovém řádku
Abychom porozuměli základům logstash, pro účely testování, pojďme rychle zkontrolovat několik věcí z příkazového řádku.
Spusťte logstash z příkazového řádku, jak je znázorněno níže. Když se zobrazí výzva, zadejte jako vstup „hello world“.
# bin/logstash -e 'input { stdin { } } output { stdout {} }' hello world 2014-07-06T17:27:25.955+0000 base hello world
Ve výše uvedeném výstupu je 1. řádek „ahoj světe“, do kterého jsme vstoupili pomocí stdin.
2. řádek je výstup, který logstash zobrazuje pomocí stdout. V podstatě to jen vyplivne vše, co jsme zadali do stdin.
Vezměte prosím na vědomí, že zadání parametru -e příkazového řádku umožňuje Logstash přijmout konfiguraci přímo z příkazového řádku. To je velmi užitečné pro rychlé testování konfigurací bez nutnosti upravovat soubor mezi iteracemi.
3. Upravte výstupní formát pomocí kodeku
Kodek rubydebug vypíše vaše data událostí Logstash pomocí knihovny ruby-awesome-print.
Takže překonfigurováním výstupu „stdout“ (přidáním „kodeku“) můžeme změnit výstup Logstashe. Přidáním vstupů, výstupů a filtrů do vaší konfigurace je možné masírovat data protokolu mnoha způsoby, aby se maximalizovala flexibilita uložených dat, když se na ně dotazujete.
# bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }' hello world { "message" => "", "@version" => "1", "@timestamp" => "2014-07-06T17:40:48.775Z", "host" => "base" } { "message" => "hello world", "@version" => "1", "@timestamp" => "2014-07-06T17:40:48.776Z", "host" => "base" }
4. Stáhněte si ElasticSearch
Nyní, když jsme viděli, jak Logstash funguje, pojďme ještě o krok. Je zřejmé, že nemůžeme předat vstup a výstup každého protokolu ručně. Takže přes tento problém budeme muset nainstalovat software s názvem Elasticsearch.
Stáhněte si elasticsearch odtud.
Nebo použijte wget, jak je uvedeno níže.
curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.0.tar.gz tar zxvf elasticsearch-1.4.0.tar.gz
Spusťte službu elasticsearch, jak je uvedeno níže:
cd elasticsearch-1.4.0/ ./bin/elasticsearch
Poznámka:Tento tutoriál specifikuje spuštění Logstash 1.4.2 s Elasticsearch 1.4.0. Každá verze Logstash má doporučenou verzi Elasticsearch, se kterou je možné spárovat. Ujistěte se, že se verze shodují na základě verze Logstash, kterou používáte.
5. Ověřte ElasticSearch
Ve výchozím nastavení elasticsearch běží na portu 9200.
Pro účely testování budeme stále brát vstup ze stdin (podobně jako v našem předchozím příkladu), ale výstup se na stdout nezobrazí. Místo toho přejde na elasticsearch.
Pro ověření elasticsearch provedeme následující. Když se vás zeptá na vstup, zadejte „the geek stuff“, jak je uvedeno níže.
# bin/logstash -e 'input { stdin { } } output { elasticsearch { host => localhost } }' the geek stuff
Protože výstup ve stdout neuvidíme, měli bychom se podívat na elasticsearch.
Přejděte na následující adresu URL:
http://localhost:9200/_search?pretty
Výše uvedené zobrazí všechny zprávy dostupné v elasticsearch. Zde ve výstupu byste měli vidět zprávu, kterou jsme zadali ve výše uvedeném příkazu logstash.
{ "took" : 4, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 9, "max_score" : 1.0, "hits" : [ { "_index" : "logstash-2014.07.06", "_type" : "logs", "_id" : "G3uZPQCMQ6ed4joNCuseew", "_score" : 1.0, "_source" : {"message":"the geek stuff","@version":"1","@timestamp":"2014-07-06T18:09:46.612Z","host":"base"} } ] }
6. Vstupy, výstupy a kodeky Logstash
Jádrem konfigurace Logstash jsou vstupy, výstupy, kodeky a filtry. Vytvořením kanálu zpracování událostí je Logstash schopen extrahovat relevantní data z vašich protokolů a zpřístupnit je elasticsearch, aby mohl efektivně dotazovat vaše data.
Níže jsou uvedeny některé z dostupných vstupů. Vstupy jsou mechanismem pro předávání dat protokolu do Logstash
- soubor:čte ze souboru v souborovém systému, podobně jako UNIXový příkaz „tail -0a“
- syslog:naslouchá na známém portu 514 pro zprávy syslog a analyzuje podle formátu RFC3164
- redis:čte ze serveru redis pomocí kanálů redis a také seznamů redis. Redis se často používá jako „zprostředkovatel“ v centralizované instalaci Logstash, která řadí události Logstash do fronty od vzdálených „dopravců“ Logstash.
- lumberjack:zpracovává události odeslané v protokolu dřevorubce. Nyní se nazývá logstash-forwarder.
Níže jsou uvedeny některé z filtrů. Filtry se používají jako zprostředkující zpracovatelská zařízení v řetězci Logstash. Často se kombinují s podmíněnými podmínkami za účelem provedení určité akce u události, pokud odpovídá konkrétním kritériím.
- grok:analyzuje libovolný text a strukturuje jej. Grok je v současné době nejlepším způsobem v Logstash, jak analyzovat nestrukturovaná data protokolu do něčeho strukturovaného a dotazovatelného. Se 120 vzory dodávanými vestavěnými do Logstashe je více než pravděpodobné, že najdete ten, který bude vyhovovat vašim potřebám!
- mutovat:Mutační filtr umožňuje provádět obecné mutace polí. Pole ve svých událostech můžete přejmenovat, odstranit, nahradit a upravit.
- vypustit:zcela vypustit událost, například ladit události.
- klonovat:vytvořit kopii události, případně přidat nebo odebrat pole.
- geoip:přidává informace o zeměpisné poloze IP adres (a zobrazuje úžasné grafy v kibaně)
Následují některé z kodeků. Výstupy jsou konečnou fází potrubí Logstash. Událost může během zpracování projít několika výstupy, ale jakmile jsou všechny výstupy dokončeny, událost dokončí své provádění.
- elasticsearch:Pokud plánujete ukládat svá data v efektivním, pohodlném a snadno dotazovatelném formátu
- soubor:zapíše data události do souboru na disk.
- grafit:odesílá data událostí do grafitu, oblíbeného open source nástroje pro ukládání a vytváření grafů metrik
- statsd:služba, která „naslouchá statistikám, jako jsou počítadla a časovače, zasílané přes UDP a odesílá agregáty do jedné nebo více připojitelných backendových služeb“.
7. Použijte Logstash Config File
Nyní je čas přejít od možností příkazového řádku ke konfiguračnímu souboru. Místo zadávání voleb v příkazovém řádku je můžete zadat v souboru .conf, jak je uvedeno níže:
# vi logstash-simple.conf input { stdin { } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Nyní požádejme logstast, aby si přečetl konfigurační soubor, který jsme právě vytvořili pomocí volby -f, jak je uvedeno níže. Pro účely testování to stále používá stdin a stdout. Po zadání tohoto příkazu tedy napište zprávu.
# bin/logstash -f logstash-simple.conf This is Vadiraj { "message" => "This is Vadiraj", "@version" => "1", "@timestamp" => "2014-11-07T04:59:20.959Z", "host" => "base.thegeekstuff.com" }
8. Analyzujte vstupní zprávu protokolu Apache
Nyní pojďme udělat trochu pokročilejší konfigurace. Odstraňte všechny položky ze souboru logstash-simple.conf a přidejte následující řádky:
# vi logstash-simple.conf input { stdin { } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Nyní spusťte příkaz logstash, jak je znázorněno níže:
# bin/logstash -f logstash-filter.conf
Tentokrát však jako vstup vložte následující vzorový záznam souboru protokolu Apache.
# bin/logstash -f logstash-filter.conf "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0""
Výstup z logstatsh bude něco podobného následujícímu:
{ "message" => "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/status.php HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"", "@version" => "1", "@timestamp" => "2013-12-11T08:01:45.000Z", "host" => "base.tgs.com", "clientip" => "127.0.0.1", "ident" => "-", "auth" => "-", "timestamp" => "11/Dec/2013:00:01:45 -0800", "verb" => "GET", "request" => "/xampp/status.php", "httpversion" => "1.1", "response" => "200", "bytes" => "3891", "referrer" => "\"http://cadenza/xampp/navi.php\"", "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"" }
Jak vidíte z výše uvedeného výstupu, náš vstup je odpovídajícím způsobem analyzován a všechny hodnoty jsou rozděleny a uloženy do odpovídajících polí.
Filtr grok extrahoval protokol Apache a rozdělil se na užitečné kousky, takže později můžeme zadat dotaz.
9. Konfigurační soubor Logstash pro protokol chyb Apache
Vytvořte následující konfigurační soubor logstash pro soubor apache error_log.
# vi logstash-apache.conf input { file { path => "/var/log/httpd/error_log" start_position => beginning } } filter { if [path] =~ "error" { mutate { replace => { "type" => "apache_error" } } grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Ve výše uvedeném konfiguračním souboru:
- Vstupní soubor je /var/log/httpd/error_log a počáteční pozice bude začátek souboru.
- Filtrujte vstupní soubor a přejmenujte (mutujte) cokoli s chybou na apache_error. grok vytvoří ve sloupci zprávy kombinovaný apachelog a data zobrazí časové razítko v daném formátu.
- Výstup bude uložen v elasticsearch v localhost a echován přes stdout ve formátu ruby print s kodekem => rubydebug
10. Konfigurační soubor Logstash pro protokol chyb Apache i protokol přístupu
Můžeme zadat zástupný znak pro čtení všech souborů protokolu s *_log, jak je uvedeno níže.
Ale také musíme odpovídajícím způsobem změnit podmínky, abychom analyzovali přístup i protokol chyb, jak je uvedeno níže.
# vi logstash-apache.conf input { file { path => "/var/log/httpd/*_log" } } filter { if [path] =~ "access" { mutate { replace => { type => "apache_access" } } grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } else if [path] =~ "error" { mutate { replace => { type => "apache_error" } } } else { mutate { replace => { type => "random_logs" } } } } output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
11. Nastavte další úložiště Yum
Testování skončilo. Nyní víme, jak Logstash pracuje s elasticseach.
Nainstalujeme následující:
- logstash – náš centrální server protokolů
- Elasticsearch – k ukládání protokolů
- Redis – pro filtr
- Nginx – ke spuštění Kibana
- Kibana – je krásný řídicí panel s grafickým rozhraním a spojuje vše dohromady
Před instalací nastavte následující úložiště:
# cd /etc/yum.repos.d/ # vi /etc/yum.repos.d/logstash.repo [logstash] name=Logstash baseurl=http://packages.elasticsearch.org/logstash/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1 # vi /etc/yum.repos.d/elasticsearch.repo [elasticsearch] name=Elasticsearch baseurl=http://packages.elasticsearch.org/elasticsearch/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Také nastavte úložiště EPEL, jak jsme diskutovali dříve.
12. Nainstalujte Elasticsearch, Nginx a Redis a Logstash
Nejprve aktualizujte systém a poté nainstalujte logstash spolu s elasticsearch, redis a nginx, jak je znázorněno níže:
yum clean all yum update -y yum install -y install elasticsearch redis nginx logstash
13. Nainstalujte Kibana
Nainstalujte Kibana pro řídicí panel, jak je znázorněno níže:
cd /opt/ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz tar -xvzf kibana-3.1.2.tar.gz mv kibana-3.1.2 /usr/share/kibana3
14. Nakonfigurujte Kibana
Musíme říct kibaně o elasticsearch. Za tímto účelem upravte následující soubor config.js.
# vi /usr/share/kibana3/config.js elasticsearch: "http://log.thegeekstuff.com:9200"
Ve výše uvedeném souboru vyhledejte elasticsearch a změňte „dev.kanbier.lan“ v tomto řádku na svou doménu (například:log.thegeekstuff.com)
15. Nastavte Kibana pro spuštění z Nginx
Musíme také vytvořit kibanu, aby běžela z webového serveru nginx.
Přidejte následující do nginx.conf
server { listen *:80 ; server_name log.thegeekstuff.com; access_log /var/log/nginx/kibana.myhost.org.access.log; location / { root /usr/share/kibana3; index index.html index.htm; }
Nezapomeňte také nastavit příslušnou IP adresu vašeho serveru v souboru redis.conf.
16. Nakonfigurujte konfigurační soubor Logstash
Nyní musíme vytvořit konfigurační soubor logstash podobný příkladu konfiguračního souboru, který jsme použili dříve.
Budeme definovat cestu k souborům protokolu, který port bude přijímat vzdálené protokoly a řekneme logstash o elasticsearch nástroji.
# vi /etc/logstash/conf.d/logstash.conf input { file { type => "syslogpath => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ] sincedb_path => "/opt/logstash/sincedb-access" } redis { host => "10.37.129.8" type => "redis-input" data_type => "list" key => "logstash" } syslog { type => "syslog" port => "5544" } } filter { grok { type => "syslog" match => [ "message", "%{SYSLOGBASE2}" ] add_tag => [ "syslog", "grokked" ] } } output { elasticsearch { host => "log.thegeekstuff.com" } }"
17. Ověřte a spusťte Logstash, Elasticsearch, Redis a Nginx
Spusťte všechny tyto služby, jak je uvedeno níže:
service elasticsearch start service logstash start service nginx start service redis start
18. Ověřte webové GUI Logstash
Otevřete prohlížeč a přejděte na název serveru (hostitel), který je použit ve výše uvedeném konfiguračním souboru. Například:log.thegeekstuff.com
Uvidíte graf podobný následujícímu, kde můžete manipulovat, procházet a procházet všechny soubory protokolu, které shromažďuje logstash.

Nyní, když je server protokolů připraven, stačí přeposlat soubory protokolů vzdáleného serveru spravované pomocí rsyslog na tento centrální server úpravou souboru rsyslog.conf.