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

Allikas: Kuutõrvaja
(Systemd journal)
(Systemd journal)
 
165. rida: 165. rida:
  
 
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
 
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
 
Logstashi tuleks seadistada vastuvõtuvõimalus
191. rida: 193. rida:
 
NB! Selle artikli kirjutamise ajal otse logstashi pordile saatmine tööle ei hakanud. Miskipärast kukkus ühendus maha
 
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
 
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
 
Selleks, et faile esmalt journalina vastu võtta ja siis logstashiga lugeda on systemd-journal-remote teenus mis võtab uploadilt neid vastu

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