GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit Logstash na Linuxu pomocí ElasticSearch, Redis, Nginx

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.


Linux
  1. Jak zabezpečit Nginx pomocí Letsencrypt na Rocky Linux/Centos 8

  2. Jak nainstalovat ModSecurity s Nginx na Rocky Linux 8

  3. Jak nastavit Rsync s SSH na UNIX / Linux (rsync bez hesla)

  1. Jak nastavit vysoce dostupný NGINX s KeepAlived v Linuxu

  2. Jak nastavit Rsync bez hesla s SSH na UNIX / Linux?

  3. Jak zkontrolovat heslo v Linuxu?

  1. Jak nastavit přihlášení SSH bez hesla v Linuxu pomocí klíčů

  2. Jak nastavit vysoce dostupný NGINX s KeepAlived na CentOS 8

  3. Jak nastavit ukončení Varnish SSL s webovým serverem Nginx na Rocky Linux 8