ELK w praktyce

Wstęp

ELK(https://www.elastic.co/) - Elasticsearch + Logstash + Kibana, czyli grupa narzędzi pomagająca scentalizować logi.
Ostatnio w firmie zaprzegneliśmy ELK do zarządzania i analizowania access logów oraz logów aplikacyjnych.
 Po krótce opisze proces instalacji  i konfiguracji całego pakietu.

 

ElasticSearch

Sciągnij i zainstaluj ElasticSearch

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.5.1.deb
sudo dpkg -i elasticsearch-1.5.1.deb

zainstaluj  Java Service Wrapper dla ElasticSearch

curl -L http://github.com/elasticsearch/elasticsearch-servicewrapper/tarball/master | tar -xz
sudo mkdir /usr/local/share/elasticsearch
sudo mkdir /usr/local/share/elasticsearch/bin
sudo mv *servicewrapper*/service /usr/local/share/elasticsearch/bin/
rm -Rf *servicewrapper*
sudo /usr/local/share/elasticsearch/bin/service/elasticsearch install
sudo ln -s `readlink -f /usr/local/share/elasticsearch/bin/service/elasticsearch` /usr/local/bin/rcelasticsearch

w pliku elasticsearch.yml odkomentuje i zmien na poprawny IP np:

network.host: 192.168.XXX.XXX


starujemy  ElasticSearch:

sudo service elasticsearch start

Upewnijmy się czy  service wystartował:

curl http://192.168.XXX.XXX:9200
 
odpowiedź powinna wyglądać mniej więcej tak:

{
  "status" : 200,
  "name" : "Storm",
  "version" : {
    "number" : "1.3.1",
    "build_hash" : "2de6dc5268c32fb49b205233c138d93aaf772015",
    "build_timestamp" : "2014-07-28T14:45:15Z",
    "build_snapshot" : false,
    "lucene_version" : "4.9"
  },
  "tagline" : "You Know, for Search"
 }

Logstash

instalujemy:
cd ~ 
wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
tar xzvf logstash-1.4.2.tar.gz 
mv logstash-1.4.2 /opt/logstash
adduser --system --disabled-login --no-create-home --group logstash 
usermod -a -G adm logstash

#auto start script for logstash
# download init script 
wget -O /etc/init.d/logstash https://raw.githubusercontent.com/elasticsearch/logstash/master/pkg/logstash.sysv
# make it executable 
chmod +x /etc/init.d/logstash 
# make it auto-startable 
update-rc.d logstash defaults

# configure logstash folder

# create logstash config dir 
mkdir -p /etc/logstash/conf.d 
# create logstash logs dir 
mkdir /var/log/logstash 
chown -R logstash: /var/log/logstash 
# make home folder 
mkdir /var/lib/logstash 
chown -R logstash: /var/lib/logstash


konfiguracja Logstasha i Logstash-forwardera

tworzymy certyfikaty SSL

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private



OpenSSL configuration file:
sudo vi /etc/ssl/openssl.cnf

Znajdź sekcje  [ v3_ca ] w pliku, i dodaj pod ną natępujący wpis (oczywiście z prawidłowym namiarem na maszynkę z logstashem):
subjectAltName = IP: 192.168.XXX.YYY

Teraz wygeneruj certyfikat SSL i klucz prywatny  (/etc/pki/tls/),za pomoca komendy:
cd /etc/pki/tls
sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

konfigurujemy Logstasha


sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

wrzucamy konfiguracje input do pliku:
input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

sudo vi /etc/logstash/conf.d/10-syslog.conf


wrzucamy konfigurację filter do pliku:
filter {
 if [type] == "json" {
        json {
        source => "message"
        }
                }
if [type] == "accesslog" {
          grok {
                match => { "message" => "%{COMBINEDAPACHELOG}" }
        }
      
       date {
                locale => 'en'
                match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
        }
        }
}


sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf
 

wrzucamy konfigurację output do pliku:

output {
        if [type] == "json" {
                elasticsearch {
                host => "192.168.XXX.XXX"
                port => "9200"
                protocol => "http"
                index => "json-logs-%{+YYYY.MM.dd}"
                }
                stdout { codec => rubydebug }
        }
}

kopiowanie certyfikatu SSL

Z serwera  Logstash , kopiujemy  SSL'a na drugi Server, gdzie będzie zaintsalowany logstash-forwarder:
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp


konfiguracja Logstash Forwarder

 instalujemy:
wget https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder_linux_amd64
tar xzvf logstash-forwarder_linux_amd64 sudo chmod +x logstash-forwarder_linux_amd64
sudo mv logstash-forwarder_linux_amd64  /opt/logstash-forwarder/logstash-forwarder



cd /etc/init.d/; sudo wget https://raw.githubusercontent.com/elasticsearch/logstash-forwarder/a73e1cb7e43c6de97050912b5bb35910c0f8d0da/logstash-forwarder.init -O logstash-forwarder
sudo update-rc.d logstash-forwarder defaults

sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
sudo vi /etc/logstash-forwarder

w pliku wstawiamy:

{
  "network": {
    "servers": [ "192.168.XXX.YYY:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
  },
  "files": [
    {
      "paths": [
         "/path/to/json/log/file",
       ],
      "fields": { "type": "json" }
    }
   {
        "paths": [
           "/path/to/access/log/file"
         ],
        "fields": { "type": "accesslog" }
      }
   ]
}
sudo service logstash-forwarder restart
  

Instalacja Kibana


  cd ~
    wget https://download.elasticsearch.org/kibana/kibana/kibana-4.0.1-linux-x64.tar.gz
    tar xzvf kibana-4.0.1-linux-x64.tar.gz
    rm kibana-4.0.1-linux-x64.tar.gz
    mv kibana-4.0.1-linux-x64 /var/opt/kibana-4.0.1
#start screen which keeps running even if you disconnect your session
w pliku kibana.ymlzmieniamy wpis:
elasticsearch_url: "http://192.168.XXX.XXX:9200"
 
sudo wget https://gist.githubusercontent.com/thisismitch/8b15ac909aed214ad04a/raw/bce61d85643c2dcdfbc2728c55a41dab444dca20/kibana4
sudo chmod +x kibana4
sudo ./kibana4 start|stop|restart|status 


Komentarze