Einleitung:
Zur privaten Weiterbildung habe ich mir den ELK Stack angesehen.
Was ist ELK und wofür steht es?
Im Grunde genommen ist es nicht ein Produkt sondern eine Sammlung aus mehreren Open-Source Produkten. Grob zusammengefasst:
Elasticsearch = Datenbank (NoSQL, Ansprechbar per RESTful)
Logstash = Ermöglicht Sammeln, Filtern und Anpassen von Datenströmen
Kibana = Visualisierung der gespeicherten/gesammelten Daten
1. Voraussetzungen
- Debian 9
- RAM: >= 8GB (läuft auch mit weniger, ggf. Anpassungen notwendig bei kleinen VMs
Hinweis für VMs mit wenig RAM:
/etc/elasticsearch/jvm.options
Anpassen der Java Memory Werte notwendig, da der Dienst sonst nicht startet
2. Update
apt-get update && apt-get -y dist-upgrade
apt-get install apt-transport-https software-properties-common wget telnet net-tools psmisc curl vim nginx
3. Vorbereitung
Um die ELK Komponenten zu installieren, sollte man das Anbieter eigene Repository nutzen. Alternativ kann man dieses auch manuell über die entsprechenden Downloads installieren. Insbesondere die automatischen Updates sprechen aber für den Paketmanager.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
apt-get update
Da Elasticsearch auf Java zurückgreift, muss dieses natürlich ebenso installiert werden.
apt-get install -y openjdk-8-jdk
Verifizierung der Java Version:
root@petyr:~/.vim/syntax# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
Laut diversen Foreneinträgen kann man auch Oracle Java nutzen, ich persönlich bevorzuge die „freie“ Variante. Ebenso müssen hierbei keine weiteren Repositories ergänzt werden.
4. Installation & Konfiguration Elasticsearch
Installation von Elasticsearch mittels Paketmanager:
apt-get install elasticsearch
Nach Abschluss der Installation sollte man den Listener beschränken auf localhost
/etc/elasticsearch/elasticsearch.yml
network.host: localhost
Aktivierung Autostart + Starten des Dienstes:
systemctl restart elasticsearch
systemctl enable elasticsearch
Funktionstest mittels curl Aufruf:
root@petyr:~/.vim/syntax# curl -X GET http://localhost:9200
{
"name" : "V0PJlmj",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "OtdhYFIdQGiFakmd1c1arw",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
5. Installation & Konfiguration Kibana
Installation von Elasticsearch mittels Paketmanager:
apt-get install kibana
Nach Abschluss der Installation sollte man den Listener beschränken auf localhost. Weitere Anpassungen wie bspw. ein Wunschname (server.name Parameter) sind möglich.
/etc/kibana/kibana.yml
server.host: "localhost"
Aktivierung Autostart + Starten des Dienstes:
systemctl restart kibana
systemctl enable kibana
Da wir Kibana auf den localhost beschränkt haben muss ein Webserver (nginx) als reverse Proxy eingerichtet werden. Dieser ermöglicht zum einen eine Authentifizierung einzelner Benutzer als auch mehr Möglichkeiten für die Zukunft (SSO, …). Die Installation erfolgte bereits im Schritt „Vorbereitung“.
Nun muss nur noch ein Benutzer erstellt werden:
echo "admin:$(openssl passwd -apr1 %Wunschpasswort%)" | sudo tee -a /etc/nginx/htpasswd.kibana
rm -f /etc/nginx/sites-enabled/default
vim /etc/nginx/sites-available/kibana
Inhalt der kibana-Datei:
server {
listen 80 default_server;
server_name _;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server ssl http2;
server_name _;
ssl_certificate /etc/ssl/certs/localhost.crt;
ssl_certificate_key /etc/ssl/private/localhost.key;
ssl_session_cache shared:SSL:10m;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.kibana;
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;
}
}
Damit der Webserver auch korrekt startet muss noch ein passendes Zertifikat erstellt werden:
mkdir /root/localhost_cert
cd /root/localhost_cert
vim localhost.conf
Inhalt Zertifikats-Template (localhost.conf)
[req]
default_bits = 2048
default_keyfile = %NAME%.key
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = %LÄNDER-KÜRZEL%
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = %B-LAND%
localityName = Locality Name (eg, city)
localityName_default = %ORT%
organizationName = Organization Name (eg, company)
organizationName_default = %ORGANISATION%
organizationalUnitName = organizationalunit
organizationalUnitName_default = %ABTEILUNG%
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = %WEBADRESSE%
commonName_max = 64
[req_ext]
subjectAltName = @alt_names
[v3_ca]
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
DNS.2 = 127.0.0.1
Erstellung des eigentlichen Zertifikats samt Key:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -config localhost.conf
Kopieren der Dateien an die richtige Stelle, aktivieren der Konfiguration und starten des Webservers:
cp localhost.crt /etc/ssl/certs/localhost.crt
cp localhost.key /etc/ssl/private/localhost.key
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana
systemctl enable nginx
systemctl restart nginx
6. Installation & Konfiguration Logstash
Installation von Logstashmittels Paketmanager:
apt-get install logstash
Aktivierung Autostart + Starten des Dienstes:
systemctl restart logstash
systemctl enable logstash
Jetzt kann man mittels eines Browser auf Kibana zugreifen:
VIM Template
mkdir ~/.vim/syntax
cd ~/.vim/syntax
wget https://www.vim.org/scripts/download_script.php?src_id=22309 -O logstash.vim.zip
unzip logstash.vim.zip
wget http://www.vim.org/scripts/download_script.php?src_id=19394 -O nginx.vim