{"id":91,"date":"2019-02-28T18:28:55","date_gmt":"2019-02-28T18:28:55","guid":{"rendered":"https:\/\/www.huerter.me\/?p=91"},"modified":"2019-02-28T18:28:55","modified_gmt":"2019-02-28T18:28:55","slug":"howto-install-elk-stack-unter-debian-9","status":"publish","type":"post","link":"https:\/\/www.huerter.me\/index.php\/2019\/02\/28\/howto-install-elk-stack-unter-debian-9\/","title":{"rendered":"HowTo: Install ELK-Stack unter Debian 9"},"content":{"rendered":"\r\n<h2 class=\"wp-block-heading\">Einleitung:<\/h2>\r\n\r\n\r\n\r\n<p>Zur privaten Weiterbildung habe ich mir den ELK Stack angesehen.<\/p>\r\n\r\n\r\n\r\n<p>Was ist ELK und wof\u00fcr steht es?<\/p>\r\n\r\n\r\n\r\n<p>Im Grunde genommen ist es nicht ein Produkt sondern eine Sammlung aus mehreren Open-Source Produkten. Grob zusammengefasst:<\/p>\r\n\r\n\r\n\r\n<p class=\"has-medium-font-size\"><strong>E<\/strong>lasticsearch = Datenbank (NoSQL, Ansprechbar per RESTful)<\/p>\r\n\r\n\r\n\r\n<p class=\"has-medium-font-size\"><strong>L<\/strong>ogstash = Erm\u00f6glicht Sammeln, Filtern und Anpassen von Datenstr\u00f6men<\/p>\r\n\r\n\r\n\r\n<p class=\"has-medium-font-size\"><strong>K<\/strong>ibana = Visualisierung der gespeicherten\/gesammelten Daten<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">1. Voraussetzungen<\/h3>\r\n<ul>\r\n<li>Debian 9<\/li>\r\n<li>RAM: &gt;= 8GB (l\u00e4uft auch mit weniger, ggf. Anpassungen notwendig bei kleinen VMs<\/li>\r\n<li>\u00a0<\/li>\r\n<\/ul>\r\n<p><strong>Hinweis f\u00fcr VMs mit wenig RAM:<\/strong><\/p>\r\n<pre class=\"lang:addlightplain\">\/etc\/elasticsearch\/jvm.options<\/pre>\r\n<p>Anpassen der Java Memory Werte notwendig, da der Dienst sonst nicht startet<\/p>\r\n<h3>2. Update<\/h3>\r\n<pre class=\"lang:bash\">apt-get update &amp;&amp; apt-get -y dist-upgrade\r\napt-get install apt-transport-https software-properties-common wget telnet net-tools psmisc curl vim nginx<\/pre>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<h3>3. Vorbereitung<\/h3>\r\n<p>Um die ELK Komponenten zu installieren, sollte man das Anbieter eigene Repository nutzen. Alternativ kann man dieses auch manuell \u00fcber die entsprechenden Downloads installieren. Insbesondere die automatischen Updates sprechen aber f\u00fcr den Paketmanager.<\/p>\r\n<pre class=\"lang:addlightplain\">wget -qO - https:\/\/artifacts.elastic.co\/GPG-KEY-elasticsearch | sudo apt-key add -\r\necho \"deb https:\/\/artifacts.elastic.co\/packages\/6.x\/apt stable main\" | sudo tee -a \/etc\/apt\/sources.list.d\/elastic-6.x.list\r\napt-get update<\/pre>\r\n\r\n\r\n\r\n<p>Da Elasticsearch auf Java zur\u00fcckgreift, muss dieses nat\u00fcrlich ebenso installiert werden.<\/p>\r\n<pre class=\"lang:addlightplain\">apt-get install -y openjdk-8-jdk<\/pre>\r\n<p>Verifizierung der Java Version:<\/p>\r\n<pre class=\"lang:addlightplain\">root@petyr:~\/.vim\/syntax# java -version\r\nopenjdk version \"1.8.0_181\"\r\nOpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)\r\nOpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)<\/pre>\r\n<p>Laut diversen Foreneintr\u00e4gen kann man auch Oracle Java nutzen, ich pers\u00f6nlich bevorzuge die &#8222;freie&#8220; Variante. Ebenso m\u00fcssen hierbei keine weiteren Repositories erg\u00e4nzt werden.<\/p>\r\n<h3>\u00a0<\/h3>\r\n<h3>4. Installation &amp; Konfiguration Elasticsearch<\/h3>\r\n<p>Installation von Elasticsearch mittels Paketmanager:<\/p>\r\n<pre class=\"lang:addlightplain\">apt-get install elasticsearch<\/pre>\r\n<p>Nach Abschluss der Installation sollte man den Listener beschr\u00e4nken auf localhost<\/p>\r\n<pre>\/etc\/elasticsearch\/elasticsearch.yml<\/pre>\r\n<pre class=\"lang:addlightplain\">network.host: localhost<\/pre>\r\n<p>Aktivierung Autostart + Starten des Dienstes:<\/p>\r\n<pre class=\"lang:bash\">systemctl restart elasticsearch\r\nsystemctl enable elasticsearch<\/pre>\r\n<p>Funktionstest mittels curl Aufruf:<\/p>\r\n<pre class=\"lang:bash\">root@petyr:~\/.vim\/syntax# curl -X GET http:\/\/localhost:9200\r\n{\r\n  \"name\" : \"V0PJlmj\",\r\n  \"cluster_name\" : \"elasticsearch\",\r\n  \"cluster_uuid\" : \"OtdhYFIdQGiFakmd1c1arw\",\r\n  \"version\" : {\r\n    \"number\" : \"6.6.0\",\r\n    \"build_flavor\" : \"default\",\r\n    \"build_type\" : \"deb\",\r\n    \"build_hash\" : \"a9861f4\",\r\n    \"build_date\" : \"2019-01-24T11:27:09.439740Z\",\r\n    \"build_snapshot\" : false,\r\n    \"lucene_version\" : \"7.6.0\",\r\n    \"minimum_wire_compatibility_version\" : \"5.6.0\",\r\n    \"minimum_index_compatibility_version\" : \"5.0.0\"\r\n  },\r\n  \"tagline\" : \"You Know, for Search\"\r\n}<\/pre>\r\n<h3>\r\n\r\n<\/h3>\r\n<h3>5. Installation &amp; Konfiguration Kibana<\/h3>\r\n<p>Installation von Elasticsearch mittels Paketmanager:<\/p>\r\n<pre class=\"lang:addlightplain\">apt-get install kibana<\/pre>\r\n<p>Nach Abschluss der Installation sollte man den Listener beschr\u00e4nken auf localhost. Weitere Anpassungen wie bspw. ein Wunschname (server.name Parameter) sind m\u00f6glich.<\/p>\r\n<pre>\/etc\/kibana\/kibana.yml<\/pre>\r\n<pre class=\"lang:addlightplain\">server.host: \"localhost\"<\/pre>\r\n<p>Aktivierung Autostart + Starten des Dienstes:<\/p>\r\n<pre class=\"lang:bash\">systemctl restart kibana\r\nsystemctl enable kibana<\/pre>\r\n<p>Da wir Kibana auf den localhost beschr\u00e4nkt haben muss ein Webserver (nginx) als reverse Proxy eingerichtet werden. Dieser erm\u00f6glicht zum einen eine Authentifizierung einzelner Benutzer als auch mehr M\u00f6glichkeiten f\u00fcr die Zukunft (SSO, &#8230;). Die Installation erfolgte bereits im Schritt &#8222;Vorbereitung&#8220;.<\/p>\r\n<p>&nbsp;<\/p>\r\n<p>Nun muss nur noch ein Benutzer erstellt werden:<\/p>\r\n<pre class=\"lang:addlightplain\">echo \"admin:$(openssl passwd -apr1 %Wunschpasswort%)\" | sudo tee -a \/etc\/nginx\/htpasswd.kibana<\/pre>\r\n<pre class=\"lang:addlightplain\">rm -f \/etc\/nginx\/sites-enabled\/default\r\nvim \/etc\/nginx\/sites-available\/kibana<\/pre>\r\n<p>Inhalt der kibana-Datei:<\/p>\r\n<pre class=\"lang:nginx\">server {\r\n    listen 80 default_server;\r\n    server_name _;\r\n    return 301 https:\/\/$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n    listen 443 default_server ssl http2;\r\n\r\n    server_name _;\r\n\r\n    ssl_certificate \/etc\/ssl\/certs\/localhost.crt;\r\n    ssl_certificate_key \/etc\/ssl\/private\/localhost.key;\r\n    ssl_session_cache shared:SSL:10m;\r\n\r\n    auth_basic \"Restricted Access\";\r\n    auth_basic_user_file \/etc\/nginx\/htpasswd.kibana;\r\n\r\n    location \/ {\r\n        proxy_pass http:\/\/localhost:5601;\r\n        proxy_http_version 1.1;\r\n        proxy_set_header Upgrade $http_upgrade;\r\n        proxy_set_header Connection 'upgrade';\r\n        proxy_set_header Host $host;\r\n        proxy_cache_bypass $http_upgrade;\r\n    }\r\n}<\/pre>\r\n<p>Damit der Webserver auch korrekt startet muss noch ein passendes Zertifikat erstellt werden:<\/p>\r\n<pre class=\"lang:vim\">mkdir \/root\/localhost_cert\r\ncd \/root\/localhost_cert\r\nvim localhost.conf<\/pre>\r\n<p>Inhalt Zertifikats-Template (localhost.conf)<br \/><br \/><\/p>\r\n<pre class=\"lang:vim\">[req]\r\ndefault_bits       = 2048\r\ndefault_keyfile    = %NAME%.key\r\ndistinguished_name = req_distinguished_name\r\nreq_extensions     = req_ext\r\nx509_extensions    = v3_ca\r\n\r\n[req_distinguished_name]\r\ncountryName                 = Country Name (2 letter code)\r\ncountryName_default         = %L\u00c4NDER-K\u00dcRZEL%\r\nstateOrProvinceName         = State or Province Name (full name)\r\nstateOrProvinceName_default = %B-LAND%\r\nlocalityName                = Locality Name (eg, city)\r\nlocalityName_default        = %ORT%\r\norganizationName            = Organization Name (eg, company)\r\norganizationName_default    = %ORGANISATION%\r\norganizationalUnitName      = organizationalunit\r\norganizationalUnitName_default = %ABTEILUNG%\r\ncommonName                  = Common Name (e.g. server FQDN or YOUR name)\r\ncommonName_default          = %WEBADRESSE%\r\ncommonName_max              = 64\r\n\r\n[req_ext]\r\nsubjectAltName = @alt_names\r\n\r\n[v3_ca]\r\nsubjectAltName = @alt_names\r\n\r\n[alt_names]\r\nDNS.1   = localhost\r\nDNS.2   = 127.0.0.1<\/pre>\r\n<p>Erstellung des eigentlichen Zertifikats samt Key:<\/p>\r\n<pre class=\"lang:bash\">openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -config localhost.conf<\/pre>\r\n<p>Kopieren der Dateien an die richtige Stelle, aktivieren der Konfiguration und starten des Webservers:<\/p>\r\n<pre class=\"lang:bash\">cp localhost.crt \/etc\/ssl\/certs\/localhost.crt\r\ncp localhost.key \/etc\/ssl\/private\/localhost.key\r\nln -s \/etc\/nginx\/sites-available\/kibana \/etc\/nginx\/sites-enabled\/kibana\r\nsystemctl enable nginx\r\nsystemctl restart nginx<\/pre>\r\n<h3>\r\n\r\n<\/h3>\r\n<h3>6. Installation &amp; Konfiguration Logstash<\/h3>\r\n<p>Installation von Logstashmittels Paketmanager:<\/p>\r\n<pre class=\"lang:addlightplain\">apt-get install logstash<\/pre>\r\n<p>Aktivierung Autostart + Starten des Dienstes:<\/p>\r\n<pre class=\"lang:bash\">systemctl restart logstash\r\nsystemctl enable logstash<\/pre>\r\n<p>Jetzt kann man mittels eines Browser auf Kibana zugreifen:<\/p>\r\n<p>&nbsp;<\/p>\r\n<p><a href=\"https:\/\/www.huerter.me\/wp-content\/uploads\/2019\/02\/kibana.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-96\" src=\"https:\/\/www.huerter.me\/wp-content\/uploads\/2019\/02\/kibana-300x229.png\" alt=\"\" width=\"300\" height=\"229\" srcset=\"https:\/\/www.huerter.me\/wp-content\/uploads\/2019\/02\/kibana-300x229.png 300w, https:\/\/www.huerter.me\/wp-content\/uploads\/2019\/02\/kibana-768x587.png 768w, https:\/\/www.huerter.me\/wp-content\/uploads\/2019\/02\/kibana-1024x783.png 1024w, https:\/\/www.huerter.me\/wp-content\/uploads\/2019\/02\/kibana-656x502.png 656w, https:\/\/www.huerter.me\/wp-content\/uploads\/2019\/02\/kibana.png 1718w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\r\n<p>&nbsp;<\/p>\r\n<p>VIM Template\u00a0<\/p>\r\n<pre class=\"lang:bash\">mkdir ~\/.vim\/syntax\r\ncd ~\/.vim\/syntax\r\nwget https:\/\/www.vim.org\/scripts\/download_script.php?src_id=22309 -O logstash.vim.zip\r\nunzip logstash.vim.zip\r\nwget http:\/\/www.vim.org\/scripts\/download_script.php?src_id=19394 -O nginx.vim<\/pre>\r\n<p>&nbsp;<\/p>\r\n<p>&nbsp;<\/p>\r\n<p>&nbsp;<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Einleitung: Zur privaten Weiterbildung habe ich mir den ELK Stack angesehen. Was ist ELK und wof\u00fcr 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\u00f6glicht Sammeln, Filtern und Anpassen von Datenstr\u00f6men Kibana = Visualisierung der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-91","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/posts\/91","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/comments?post=91"}],"version-history":[{"count":6,"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/posts\/91\/revisions"}],"predecessor-version":[{"id":101,"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/posts\/91\/revisions\/101"}],"wp:attachment":[{"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/media?parent=91"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/categories?post=91"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.huerter.me\/index.php\/wp-json\/wp\/v2\/tags?post=91"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}