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'