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
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
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
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
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
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
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
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
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
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' -d@filebeat-index-template.json
Instalacja i konfiguracja Filebeat
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'