Erinevus lehekülje "ELK Stack põhine logiserver" redaktsioonide vahel

Allikas: Kuutõrvaja
(Systemd journal)
 
(ei näidata sama kasutaja 24 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
  
4. rida: 8. rida:
 
# Elasticsearch: tegeleb logi salvestamise ja indekseerimisega
 
# Elasticsearch: tegeleb logi salvestamise ja indekseerimisega
 
# Kibana: weebiliides mis võimaldab otsingu ja visualiseerimisega
 
# 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 =
 
= Paigaldamine gentoos =
50. rida: 78. rida:
 
}
 
}
 
</source>
 
</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
57. 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]]
 
[[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

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

  1. Logstash: mis kuulab 5000 pordil ja võtab logid serveritest vastu
  2. Elasticsearch: tegeleb logi salvestamise ja indekseerimisega
  3. 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

Discover-unfiltered.png

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