W rozproszonych środowiskach, w których wiele serwerów generuje różnorodne logi w przypadku wystąpienia awarii lub potrzeby analizy działania systemu istotne są rozwiązania, które umożliwiają centralne przechowywanie danych oraz ich analizę. Jednym z coraz bardziej popularnych rozwiązań tego typu jest ELK - Elasticsearch, Logstash i Kibana.

W celu zaprezentowania sposobu instalacji poszczególnych komponentów ELK, przygotowano maszynę wirtualną w VirtualBox z systemem operacyjnym Ubuntu 14.04, na której wykonano poniższe kroki.

Instalacja Java Link to heading

Dodanie Oracle Java PPA do repozytorium:

seba@elk:~$ sudo add-apt-repository -y ppa:webupd8team/java

Aktualizacja danych APT po dodaniu repozytorium:

seba@elk:~$ sudo apt-get update

Instalacja Java:

seba@elk:~$ sudo apt-get -y install oracle-java8-installer

Instalacja Elasticsearch Link to heading

Pobranie paczki instalacyjnej:

seba@elk:~$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
seba@elk:~$ echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
seba@elk:~$ sudo apt-get update

Instalacja Elasticsearch:

seba@elk:~$ sudo apt-get -y install elasticsearch

Wprowadzenie podstawowej konfiguracji:

seba@elk:~$ sudo vi /etc/elasticsearch/elasticsearch.yml

z nazwą serwera:

network.host: localhost

Restart Elasticsearch i ustawienie automatycznie uruchamianie przy restartch maszyny:

seba@elk:~$ sudo service elasticsearch restart
seba@elk:~$ sudo update-rc.d elasticsearch defaults 95 10

Instalacja Kibana Link to heading

Pobranie paczki instalacyjnej:

seba@elk:~$ echo "deb http://packages.elastic.co/kibana/4.4/debian stable main" | sudo tee -a /etc/apt/sources.list.d/kibana-4.4.x.list
seba@elk:~$ sudo apt-get update

Instalacja Kibana i wprowadzenie podstawowej konfiguracji komponentu

seba@elk:~$ sudo apt-get -y install kibana
seba@elk:~$ sudo vi /opt/kibana/config/kibana.yml

z nazwą serwera:

server.host: “localhost”

Włączenie Kibana i ustawienie automatycznego uruchomienia przy restartach maszyny:

seba@elk:~$ sudo update-rc.d kibana defaults 96 9
seba@elk:~$ sudo service kibana start

Instalacja Nginx Link to heading

Instalacja serwera Nginx oraz podstawowa jego konfiguracja:

seba@elk:~$ sudo apt-get install nginx apache2-utils
seba@elk:~$ sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
seba@elk:~$ sudo vi /etc/nginx/sites-available/default

w której serwer będzie uruchomiony na porcie 80 i będzie posiadał uwierzytelnianie:

server { listen 80;

server_name example.com;

auth_basic “Restricted Access”; auth_basic_user_file /etc/nginx/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; } }

Restart serwera:

seba@elk:~$ sudo service nginx restart

Instalacja Logstash Link to heading

Pobranie paczki z repozytorium i instalacja Logstash:

seba@elk:~$ echo 'deb http://packages.elastic.co/logstash/2.2/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash-2.2.x.list
seba@elk:~$ sudo apt-get update
seba@elk:~$ sudo apt-get install logstash

Przygotowanie certyfikatów SSL Link to heading

Utworzenie katalogów do certyfikatów oraz przygotowanie konfiguracji dla narzędzia OpenSSL:

seba@elk:~$ sudo mkdir -p /etc/pki/tls/certs
seba@elk:~$ sudo mkdir /etc/pki/tls/private
seba@elk:~$ sudo vi /etc/ssl/openssl.cnf

z adresem serwera:

subjectAltName = IP: ELK_server_private_IP

Wygenerowanie certyfikatu za pomocą OpenSSL

seba@elk:~$ cd /etc/pki/tls
seba@elk:~$ 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

Konfiguracja Logstash Link to heading

Określenie portu, na którym będzie nasłuchiwać Logstash, a także ścieżek do certyfikatów SSL:

seba@elk:~$ sudo vi /etc/logstash/conf.d/02-beats-input.conf

input { beats { port => 5044 ssl => true ssl_certificate => “/etc/pki/tls/certs/logstash-forwarder.crt” ssl_key => “/etc/pki/tls/private/logstash-forwarder.key” } }

Ustawienie filtrwów dla Sysloga:

seba@elk:~$ sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

filter { if [type] == “syslog” { grok { match => { “message” => “%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}” } add_field => [ “received_at”, “%{@timestamp}” ] add_field => [ “received_from”, “%{host}” ] } syslog_pri { } date { match => [ “syslog_timestamp”, “MMM d HH:mm:ss”, “MMM dd HH:mm:ss” ] } } }

Skonfigurowanie komunikacji z Elasticsearch:

seba@elk:~$ sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

output { elasticsearch { hosts => [“localhost:9200”] sniffing => true manage_template => false index => “%{[@metadata][beat]}-%{+YYYY.MM.dd}” document_type => “%{[@metadata][type]}” } }

Sprawdzenie wprowadzonej konfiguracji, restastr Logstash i włączenie automatycznego uruchomienia przy kolejnym restarcie serwera:

seba@elk:~$ sudo service logstash configtest
seba@elk:~$ sudo service logstash restart
seba@elk:~$ sudo update-rc.d logstash defaults 96 9

Dashboards dla Kibana Link to heading

Pobranie i załadowanie przykładowych konfiguracji dla Kibana:

seba@elk:~$ cd
seba@elk:~$ curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip
seba@elk:~$ unzip beats-dashboards-*.zip
seba@elk:~$ cd beats-dashboards-1.1.0/
seba@elk:~$ ./load.sh

Załadowanie indeksu Filebeat dla Kibana Link to heading

seba@elk:~$ cd
seba@elk:~$ curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
seba@elk:~$ curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' [email protected]

Instalacja i konfiguracja Filebeat Link to heading

seba@elk:~$ echo "deb https://packages.elastic.co/beats/apt stable main" |  sudo tee -a /etc/apt/sources.list.d/beats.list
seba@elk:~$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
seba@elk:~$ sudo apt-get update
seba@elk:~$ sudo apt-get install filebeat

Konfiguracja Filebeat w zakresie ścieżek do logów, typu logów (syslog), adresu serwera Logstash, rozmiaru paczki z logami oraz ścieżek do certyfikatów:

seba@elk:~$ sudo vi /etc/filebeat/filebeat.yml

… paths: - /var/log/auth.log - /var/log/syslog # - /var/log/*.log …

… document_type: syslog …

… ### Logstash as output logstash: # The Logstash hosts hosts: [“ELK_server_private_IP:5044”] …

… bulk_max_size: 1024 …

… tls: # List of root certificates for HTTPS server verifications certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] …

Restart Filebeat i ustawienie automatycznego uruchomienia po restartcie maszyny:

seba@elk:~$ sudo service filebeat restart
seba@elk:~$ sudo update-rc.d filebeat defaults 95 10

Sprawdzenie działania Filebeat:

seba@elk:~$ curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'