Erinevus lehekülje "ELK Stack põhine logiserver" redaktsioonide vahel
(→Systemd journal) |
|||
| (ei näidata sama kasutaja 29 vahepealset redaktsiooni) | |||
| 1. rida: | 1. rida: | ||
| + | = Sissejuhatus = | ||
| + | |||
| + | ELK stack nimi tuleb selle komponentide esitähtedest: Elasticsearch-Logstash-Kibana. Selle näol on tegemist logiserveri lahendusega, mis pakub indekseerimist ja põhjalikke otsinguid võimaldavat veebiliidest. | ||
| + | |||
ELK stack koosneb kolmest komponendist | ELK stack koosneb kolmest komponendist | ||
| − | + | # Logstash: mis kuulab 5000 pordil ja võtab logid serveritest vastu | |
| − | + | # Elasticsearch: tegeleb logi salvestamise ja indekseerimisega | |
| − | + | # Kibana: weebiliides mis võimaldab otsingu ja visualiseerimisega | |
| + | |||
| + | _____ ELK logiserver 192.168.1.10 | ||
| + | | | :5000/tcp | ||
| + | |_____| :5000/udp | ||
| + | | | ||
| + | | | ||
| + | -|---------|----------|----....---|-- | ||
| + | | | | | ||
| + | __|__ __|__ __|__ | ||
| + | | | | | | | (logi ELKi edastavad serverid) | ||
| + | |_____| |_____| |_____| | ||
| + | |||
| + | smtp www dns | ||
| + | |||
| + | Logstashi logi on üldjoones kolmest ahelatüübist koosnev, milledeks on sisenev info input, filtreerimine ehk filter ja väljundamine edasi ehk output | ||
| + | |||
| + | input { | ||
| + | [...] | ||
| + | } | ||
| + | filter { | ||
| + | } | ||
| + | output { | ||
| + | [...] | ||
| + | } | ||
| − | + | = Paigaldamine gentoos = | |
Paigaldame vajalikud paketid | Paigaldame vajalikud paketid | ||
| 17. rida: | 45. rida: | ||
Seejärel tuleb tekitada vajalikud konfifailid | Seejärel tuleb tekitada vajalikud konfifailid | ||
| − | /etc/elasticsearch/ | + | /etc/elasticsearch/logging.yml |
| − | /etc/elasticsearch/ | + | /etc/elasticsearch/elasticsearch.in.sh |
| + | /etc/elasticsearch/elasticsearch.yml | ||
/etc/logstash/conf.d/agent.conf | /etc/logstash/conf.d/agent.conf | ||
| + | |||
| + | Esimesed kolm võivad olla vaikimisi süsteemi näidetekausta paigaldatud ja muutmist ei nõua. Logstashi agent.conf konfifail võiks välja näha järgnev | ||
| + | |||
| + | <source lang=bash> | ||
| + | input { | ||
| + | tcp { | ||
| + | port => 5000 | ||
| + | type => syslog | ||
| + | } | ||
| + | udp { | ||
| + | port => 5000 | ||
| + | type => syslog | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | filter { | ||
| + | if [type] == "syslog" { | ||
| + | grok { | ||
| + | match => { "message" => "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | output { | ||
| + | elasticsearch { host => localhost } | ||
| + | stdout { codec => rubydebug } | ||
| + | } | ||
| + | </source> | ||
| + | |||
| + | Võimalik on inputi ahelasse defineerida ka serveri enda lokaalsed logid nt sektsiooniga | ||
| + | |||
| + | file { | ||
| + | type => "logserver" | ||
| + | path => [ "/var/log/syslog", "/var/log/*.log" ] | ||
| + | } | ||
Teenused automaatselt startima | Teenused automaatselt startima | ||
| 27. rida: | 92. rida: | ||
# ln -s /etc/init.d/elasticsearch /etc/runlevels/default/ | # ln -s /etc/init.d/elasticsearch /etc/runlevels/default/ | ||
| + | = Paigaldamine Arch linuxis = | ||
| + | |||
| + | Paigaldame pakihaldusest elasticsearchi ja nginxi mis hakkab olema proxyks | ||
| + | |||
| + | # pacman -S elasticsearch nginx | ||
| + | |||
| + | Auri abiutiliiti yaourti kasutades instalime logstash ja kibana. Esimene paneb ka java peale | ||
| + | |||
| + | # yaourt logstash kibana | ||
| + | |||
| + | Lubame teenuste boodil stardi | ||
| + | |||
| + | systemctl enable elasticsearch | ||
| + | systemctl enable logstash | ||
| + | systemctl enable kibana | ||
| + | systemctl enable nginx | ||
| + | |||
| + | /etc/logstash/conf.d/logstash-simple.conf | ||
| + | |||
| + | input { | ||
| + | file { | ||
| + | path => "/var/log/faillog" | ||
| + | start_position => beginning | ||
| + | } | ||
| + | |||
| + | tcp { | ||
| + | port => 5000 | ||
| + | type => syslog | ||
| + | } | ||
| + | udp { | ||
| + | port => 5000 | ||
| + | type => syslog | ||
| + | } | ||
| + | } | ||
| + | |||
| + | output { | ||
| + | elasticsearch { hosts => localhost } | ||
| + | } | ||
| + | |||
| + | /etc/nginx/nginx.conf | ||
| + | |||
| + | # Nginx proxy for Elasticsearch + Kibana | ||
| + | # | ||
| + | server { | ||
| + | listen 80; | ||
| + | server_name localhost; | ||
| + | access_log /var/log/nginx-logstash.log; | ||
| + | |||
| + | #auth_basic "Restricted Access"; | ||
| + | #auth_basic_user_file /etc/webapps/kibana/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; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | = Kliendid = | ||
| + | |||
| + | = Syslog = | ||
| + | |||
| + | Syslog-ng puhul võib seadistada | ||
| + | |||
| + | destination loghost { udp("192.168.1.10"); }; | ||
| + | log { source(src); filter(f_mail); destination(mail); destination(loghost); flags(final); }; | ||
| + | |||
| + | = Systemd journal = | ||
| + | |||
| + | Systemd puhul on kõik logid nähtavad journalctl käsuga ja syslogi masinas pole. Ka pole mõtekas eraldi syslogi paigaldada kuna systemd-journal-remote ja systemd-journal-upload on systemd natiivsed töövahendid logide transpordiks | ||
| + | |||
| + | '''Esimene võimalus''': saata journald teated journal-uploadiga otse logstashi pordile | ||
| + | |||
| + | Logstashi tuleks seadistada vastuvõtuvõimalus | ||
| + | |||
| + | input { | ||
| + | tcp { | ||
| + | port => 19532 | ||
| + | type => journald | ||
| + | } | ||
| + | } | ||
| + | |||
| + | Saatmise testimiseks võib anda käsu | ||
| + | |||
| + | /usr/lib/systemd/systemd-journal-upload -u http://127.0.2.1 & | ||
| + | |||
| + | Systemd pakiga kaasas on upload service ja tema konff | ||
| + | |||
| + | * /usr/lib/systemd/system/systemd-journal-upload.service | ||
| + | * /etc/systemd/journal-upload.conf | ||
| + | |||
| + | Viimast saab sodida ja esimese enableda, siis pole vaja ise unitit kirjutada. Näiteks | ||
| + | |||
| + | [Upload] | ||
| + | URL=http://127.0.2.1 | ||
| + | |||
| + | NB! Selle artikli kirjutamise ajal otse logstashi pordile saatmine tööle ei hakanud. Miskipärast kukkus ühendus maha | ||
| + | ja journal-upload teenus ei suutnud seda ilma restartideta üles tõsta | ||
| + | |||
| + | '''Teine võimalus''': Võtta journal-upload abil saadetud journal vastu journal-remote serveriga ja lasta seejärel lugeda logstashil logi kohalikest failidest | ||
| + | |||
| + | Selleks, et faile esmalt journalina vastu võtta ja siis logstashiga lugeda on systemd-journal-remote teenus mis võtab uploadilt neid vastu | ||
| + | |||
| + | /etc/systemd/system/systemd-journal-remote.service faili tuleb teha mõned muudatused. Nimelt tuleb seadistada split-node=none et iga | ||
| + | võrguserver ei tekitaks eraldi logifiali, journald lugeja nimelt lukustab end ühe faili külge ega oska jälgida tervet posu journaleid | ||
| + | |||
| + | [Service] | ||
| + | ExecStart=/usr/lib/systemd/systemd-journal-remote \ | ||
| + | --listen-http=-3 \ | ||
| + | --split-mode=none \ | ||
| + | --output=/srv/logs/remote.journal | ||
| + | |||
| + | Seejärel lugeda journali teateid ka kohalikest failidest | ||
| + | |||
| + | input { | ||
| + | journald { | ||
| + | lowercase => true | ||
| + | seekto => "head" | ||
| + | thisboot => false | ||
| + | type => "journald" | ||
| + | sincedb_path => "/srv/logstash/.sincedb" | ||
| + | path => "/srv/logs" | ||
| + | tags => [ "vabrik" ] | ||
| + | } | ||
| + | } | ||
| + | |||
| + | Võib juhtuda, et mõned väljad lähevad seejuures konflikti logstashi enda väljadega | ||
| + | |||
| + | {"type"=>"mapper_parsing_exception", "reason"=>"failed to parse", "caused_by"=>{"type"=>"illegal_state_exception", "reason"=>"Mixing up field types: | ||
| + | class org.elasticsearch.index.mapper.core.StringFieldMapper$StringFieldType != class org.elasticsearch.index.mapper.internal.UidFieldMapper$UidFieldType on field _uid"}}}}, :level=>:warn} | ||
| + | |||
| + | aitab konfliksete väljade nagu uid ümbernimetamine | ||
| + | |||
| + | filter { | ||
| + | mutate { | ||
| + | rename => { "_uid" => "kasutaja_uid" } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | = Kibana = | ||
Kibana veebiliides töötab pordil 5601 | Kibana veebiliides töötab pordil 5601 | ||
| + | |||
| + | [[Pilt:Discover-unfiltered.png|800px]] | ||
| + | |||
| + | = Lingid = | ||
| + | |||
| + | https://secure.trifork.com/dl/goto-berlin-2014/GOTO_Night/logstash-kibana-intro.pdf | ||
| + | |||
| + | https://www.digitalocean.com/community/tutorials/how-to-use-kibana-dashboards-and-visualizations | ||
| + | |||
| + | https://hibern8.wordpress.com/2014/02/26/logstash-redis-elasticsearch-and-kibana-real-time-data-analysis-on-debian-wheezy/ | ||
| + | |||
| + | https://home.regit.org/2014/02/02/ | ||
| + | |||
| + | https://deviantony.wordpress.com/2014/05/19/centralized-logging-with-an-elk-stack-elasticsearch-logback-kibana/ | ||
| + | |||
| + | https://www.digitalocean.com/community/tutorials/how-to-use-logstash-and-kibana-to-centralize-and-visualize-logs-on-ubuntu-14-04 | ||
| + | |||
| + | https://gist.github.com/brianredbeard/d5b02a1e998c63827b03 logstash ja systemd | ||
| + | |||
| + | https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html filtrite kirjutamine apache logi näitel | ||
Viimane redaktsioon: 26. mai 2016, kell 17:55
Sisukord
Sissejuhatus
ELK stack nimi tuleb selle komponentide esitähtedest: Elasticsearch-Logstash-Kibana. Selle näol on tegemist logiserveri lahendusega, mis pakub indekseerimist ja põhjalikke otsinguid võimaldavat veebiliidest.
ELK stack koosneb kolmest komponendist
- Logstash: mis kuulab 5000 pordil ja võtab logid serveritest vastu
- Elasticsearch: tegeleb logi salvestamise ja indekseerimisega
- Kibana: weebiliides mis võimaldab otsingu ja visualiseerimisega
_____ ELK logiserver 192.168.1.10
| | :5000/tcp
|_____| :5000/udp
|
|
-|---------|----------|----....---|--
| | |
__|__ __|__ __|__
| | | | | | (logi ELKi edastavad serverid)
|_____| |_____| |_____|
smtp www dns
Logstashi logi on üldjoones kolmest ahelatüübist koosnev, milledeks on sisenev info input, filtreerimine ehk filter ja väljundamine edasi ehk output
input {
[...]
}
filter {
}
output {
[...]
}
Paigaldamine gentoos
Paigaldame vajalikud paketid
# emerge app-admin/logstash-bin app-misc/elasticsearch www-apps/kibana-bin virtual/jdk
Ning seejärel java versioon paika
# java-config --set-system-vm icedtea-bin-7"
Seejärel tuleb tekitada vajalikud konfifailid
/etc/elasticsearch/logging.yml /etc/elasticsearch/elasticsearch.in.sh /etc/elasticsearch/elasticsearch.yml /etc/logstash/conf.d/agent.conf
Esimesed kolm võivad olla vaikimisi süsteemi näidetekausta paigaldatud ja muutmist ei nõua. Logstashi agent.conf konfifail võiks välja näha järgnev
input {
tcp {
port => 5000
type => syslog
}
udp {
port => 5000
type => syslog
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
}
}
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}
Võimalik on inputi ahelasse defineerida ka serveri enda lokaalsed logid nt sektsiooniga
file {
type => "logserver"
path => [ "/var/log/syslog", "/var/log/*.log" ]
}
Teenused automaatselt startima
# ln -s /etc/init.d/kibana /etc/runlevels/default/ # ln -s /etc/init.d/logstash /etc/runlevels/default/ # ln -s /etc/init.d/elasticsearch /etc/runlevels/default/
Paigaldamine Arch linuxis
Paigaldame pakihaldusest elasticsearchi ja nginxi mis hakkab olema proxyks
# pacman -S elasticsearch nginx
Auri abiutiliiti yaourti kasutades instalime logstash ja kibana. Esimene paneb ka java peale
# yaourt logstash kibana
Lubame teenuste boodil stardi
systemctl enable elasticsearch systemctl enable logstash systemctl enable kibana systemctl enable nginx
/etc/logstash/conf.d/logstash-simple.conf
input {
file {
path => "/var/log/faillog"
start_position => beginning
}
tcp {
port => 5000
type => syslog
}
udp {
port => 5000
type => syslog
}
}
output {
elasticsearch { hosts => localhost }
}
/etc/nginx/nginx.conf
# Nginx proxy for Elasticsearch + Kibana
#
server {
listen 80;
server_name localhost;
access_log /var/log/nginx-logstash.log;
#auth_basic "Restricted Access";
#auth_basic_user_file /etc/webapps/kibana/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;
}
}
Kliendid
Syslog
Syslog-ng puhul võib seadistada
destination loghost { udp("192.168.1.10"); };
log { source(src); filter(f_mail); destination(mail); destination(loghost); flags(final); };
Systemd journal
Systemd puhul on kõik logid nähtavad journalctl käsuga ja syslogi masinas pole. Ka pole mõtekas eraldi syslogi paigaldada kuna systemd-journal-remote ja systemd-journal-upload on systemd natiivsed töövahendid logide transpordiks
Esimene võimalus: saata journald teated journal-uploadiga otse logstashi pordile
Logstashi tuleks seadistada vastuvõtuvõimalus
input {
tcp {
port => 19532
type => journald
}
}
Saatmise testimiseks võib anda käsu
/usr/lib/systemd/systemd-journal-upload -u http://127.0.2.1 &
Systemd pakiga kaasas on upload service ja tema konff
- /usr/lib/systemd/system/systemd-journal-upload.service
- /etc/systemd/journal-upload.conf
Viimast saab sodida ja esimese enableda, siis pole vaja ise unitit kirjutada. Näiteks
[Upload] URL=http://127.0.2.1
NB! Selle artikli kirjutamise ajal otse logstashi pordile saatmine tööle ei hakanud. Miskipärast kukkus ühendus maha ja journal-upload teenus ei suutnud seda ilma restartideta üles tõsta
Teine võimalus: Võtta journal-upload abil saadetud journal vastu journal-remote serveriga ja lasta seejärel lugeda logstashil logi kohalikest failidest
Selleks, et faile esmalt journalina vastu võtta ja siis logstashiga lugeda on systemd-journal-remote teenus mis võtab uploadilt neid vastu
/etc/systemd/system/systemd-journal-remote.service faili tuleb teha mõned muudatused. Nimelt tuleb seadistada split-node=none et iga võrguserver ei tekitaks eraldi logifiali, journald lugeja nimelt lukustab end ühe faili külge ega oska jälgida tervet posu journaleid
[Service]
ExecStart=/usr/lib/systemd/systemd-journal-remote \
--listen-http=-3 \
--split-mode=none \
--output=/srv/logs/remote.journal
Seejärel lugeda journali teateid ka kohalikest failidest
input {
journald {
lowercase => true
seekto => "head"
thisboot => false
type => "journald"
sincedb_path => "/srv/logstash/.sincedb"
path => "/srv/logs"
tags => [ "vabrik" ]
}
}
Võib juhtuda, et mõned väljad lähevad seejuures konflikti logstashi enda väljadega
{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse", "caused_by"=>{"type"=>"illegal_state_exception", "reason"=>"Mixing up field types:
class org.elasticsearch.index.mapper.core.StringFieldMapper$StringFieldType != class org.elasticsearch.index.mapper.internal.UidFieldMapper$UidFieldType on field _uid"}}}}, :level=>:warn}
aitab konfliksete väljade nagu uid ümbernimetamine
filter {
mutate {
rename => { "_uid" => "kasutaja_uid" }
}
}
Kibana
Kibana veebiliides töötab pordil 5601
Lingid
https://secure.trifork.com/dl/goto-berlin-2014/GOTO_Night/logstash-kibana-intro.pdf
https://www.digitalocean.com/community/tutorials/how-to-use-kibana-dashboards-and-visualizations
https://home.regit.org/2014/02/02/
https://gist.github.com/brianredbeard/d5b02a1e998c63827b03 logstash ja systemd
https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html filtrite kirjutamine apache logi näitel