ELK Stack põhine logiserver

Allikas: Kuutõrvaja
Redaktsioon seisuga 13. jaanuar 2016, kell 13:33 kasutajalt Jj (arutelu | kaastöö)

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

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 tegelikult on süsteemis olemas töövahendid kauglogimiseks. Selleks, et sedalaadi masinaid lihtsalt logida tuleb logstashi seadistada järgnevalt

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 unit mis automaatselt logimise käivitab systemd-journal-upload.service

[Unit]
Description=Send journald entries to a remote logstash instance
After=journald.service
Requires=journald.service
Documentation=man:systemd-journal-upload(8)

[Service]
Restart=always
RestartSec=0
ExecStart=/usr/lib/systemd/systemd-journal-upload -u http://127.0.2.1

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