{"id":2769,"date":"2020-08-17T08:52:33","date_gmt":"2020-08-17T08:52:33","guid":{"rendered":"https:\/\/cloudsurfers.it\/?p=2769"},"modified":"2020-09-29T21:30:58","modified_gmt":"2020-09-29T21:30:58","slug":"stack-elk-for-dummies","status":"publish","type":"post","link":"https:\/\/cloudsurfers.it\/index.php\/stack-elk-for-dummies\/","title":{"rendered":"Stack ELK for dummies"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"390\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/07\/elkWall.png\" alt=\"\" class=\"wp-image-2719\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/07\/elkWall.png 685w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/07\/elkWall-300x171.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/07\/elkWall-600x342.png 600w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/figure>\n\n\n\n<p>I file di log sono spesso fonte di problemi, perch\u00e9 ad esempio presentano formati strani, perch\u00e9 sono accessibili solo connettendosi sulle singole macchine o perch\u00e9 nel corso degli anni andando verso un approccio legato ai microservizi, il numero di log delle applicazioni \u00e8 sensibilmente aumentato, rendendone pi\u00f9 difficile la gestione.<\/p>\n\n\n\n<p>Lo stack <strong>ELK<\/strong> (o Elastic Stack) \u00e8 una soluzione robusta che consente di migliorare la ricerca, la gestione e l&#8217;analisi dei dati, log compresi.<br>ELK sta diventando la pi\u00f9 comune piattaforma open source di gestione dei log utilizzata a livello globale. I framework open source <strong>E<\/strong>lasticsearch, <strong>L<\/strong>ogstash e <strong>K<\/strong>Ibana, si combinano per fornire una piattaforma unica per l&#8217;archiviazione, il recupero, l&#8217;ordinamento e l&#8217;analisi dei dati.&nbsp;<\/p>\n\n\n\n<p><strong>Logstash&nbsp;<\/strong>ha il compito di&nbsp;raccogliere,&nbsp;analizzare,&nbsp;normalizzare,&nbsp;aggregare&nbsp;e&nbsp;indicizzare&nbsp;i dati (in vari formati e tipologie) provenienti da pi\u00f9 server e di memorizzarli in un&nbsp;unico&nbsp;storage&nbsp;per facilitare&nbsp;ulteriori possibili&nbsp;trasformazioni e lavorazioni; in seguito alle trasformazioni i dati vengono spediti a varie destinazioni di output supportate<\/p>\n\n\n\n<p><strong>Elasticsearch <\/strong>(ES)&nbsp;\u00e8 un server di ricerca ed analisi, basato su Apache Lucene, altamente scalabile che consente di immagazzinare, ricercare ed analizzare grandi volumi di dati con interrogazioni che avvengono quasi in tempo reale. <br>Per questi motivi \u00e8 divenuto nel tempo molto popolare nell&#8217;ambito&nbsp;Big Data, negli ambienti enterprise e nel settore del cloud computing. Ad oggi \u00e8 il secondo motore di ricerca pi\u00f9 popolare ed \u00e8 usato in progetti come Netflix, Facebook, Wikipedia, Atlassian, Github e altri.<br>I dati in Elasticsearch vengono memorizzati in uno o pi\u00f9 <strong>indici<\/strong>.&nbsp;Un indice \u00e8 una raccolta di file che presentano caratteristiche tra loro simili. Poich\u00e9 chi lavora con Elasticsearch in genere si occupa di grandi volumi di dati, i dati in un indice vengono a loro volta suddivisi in&nbsp;frammenti (&#8220;shards&#8221;)&nbsp;per rendere lo storage pi\u00f9 gestibile.&nbsp;Un indice potrebbe essere troppo grande per adattarsi a un singolo disco, ma i frammenti sono pi\u00f9 piccoli e possono essere allocati su nodi diversi in base alle esigenze;&nbsp;un altro vantaggio \u00e8 che le ricerche possono essere eseguite in diversi frammenti in parallelo, accelerando cos\u00ec l&#8217;elaborazione delle query.<\/p>\n\n\n\n<p><strong>Kibana <\/strong>\u00e8 il motore di&nbsp;visualizzazione&nbsp;dei dati di Elasticsearch che offre agli utenti la possibilit\u00e0 di analizzare e visualizzare i dati. Permette un&#8217;interazione nativa con tutti i dati presenti nello storage attraverso dashboard personalizzate; queste&nbsp;dashboard sono dinamiche, salvabili, condivisibili ed esportabili. E&#8217; possibile eseguire facilmente analisi di dati avanzate e visualizzare i dati in una variet\u00e0 di tabelle, istogrammi e mappe.<\/p>\n\n\n\n<p>Attorno a questo ecosistema, gravitano anche i <strong>Beats<\/strong>; \u00e8 questa introduzione che ha portato lo stack ELK a essere conosciuto anche come Elastic Stack. Beats \u00e8 una famiglia di log shipper open source che vengono installati sui diversi server della nostra infrastruttura e agiscono come agenti leggeri per la raccolta di log e metriche per diversi casi d&#8217;uso. Mentre le metriche mostrano le tendenze e le propensioni di un servizio o di un&#8217;applicazione, lo scopo dei log \u00e8 quello di preservare quante pi\u00f9 informazioni possibili, per lo pi\u00f9 tecniche, su un evento specifico. Ognuno dei Beats ha il suo compito, possono ad esempio collezionare file di log relativi a eventi di sistema, ricavare informazioni sui database, fare sniffing della rete, raccogliere informazioni sulle risorse, analizzare gli eventi di Windows. <br>Il numero dei Beats \u00e8 in continua crescita poich\u00e8 sviluppati sia da Elastic che dalla community; ecco alcuni dei pricipali:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"359\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-299-1024x359.png\" alt=\"\" class=\"wp-image-2766\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-299-1024x359.png 1024w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-299-300x105.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-299-768x269.png 768w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-299-600x210.png 600w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-299.png 1132w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Il loro compito \u00e8 dunque quello di raccogliere i dati delle macchine in cui risiedono e di inoltrarli a Logstash, se hanno bisogno di essere elaborati o analizzati, oppure direttamente ad Elasticsearch.<\/p>\n\n\n\n<p>In questa guida installeremo <strong>Filebeat<\/strong>, tra i Beats \u00e8 quello pi\u00f9 utilizzato ed \u00e8 indicato per raccogliere e inviare file di log e altri dati. Uno dei motivi che rendono Filebeat cos\u00ec efficiente \u00e8 il modo in cui gestisce la&nbsp;contropressione: se Logstash \u00e8 occupato, Filebeat rallenta la velocit\u00e0 di lettura e riprende il ritmo una volta terminato il rallentamento.<br>Filebeat pu\u00f2 essere installato su quasi tutti i sistemi operativi, anche come contenitore Docker e include anche moduli interni per piattaforme specifiche come Apache, MySQL, Docker, MariaDB, Percona, Kafka e altro.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div style=\"text-align:center\"><iframe loading=\"lazy\" src=\"https:\/\/rcm-eu.amazon-adsystem.com\/e\/cm?o=29&amp;p=13&amp;l=ez&amp;f=ifr&amp;linkID=112a50b2018a6033bca7c39644987e37&amp;t=fontanamarcoi-21&amp;tracking_id=fontanamarcoi-21\" width=\"468\" height=\"60\" scrolling=\"no\" border=\"0\" marginwidth=\"0\" style=\"border:none;\" frameborder=\"0\"><\/iframe><\/div>\n<\/div><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Perch\u00e8 lo Stack ELK \u00e8 conveniente?<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>\u00e8 <strong>semplice <\/strong>in quanto offre un&#8217;interfaccia utente elegante ed intuitiva che semplifica le attivit\u00e0 di analisi dei dati.<\/li><li>\u00e8 <strong>flessibile<\/strong> poich\u00e8 \u00e8 possibile configurarlo in modo che accetti i dati da una variet\u00e0 di fonti in continuo aumento, aggiunte sotto forma di plugin.<\/li><li>\u00e8 <strong>gratuito<\/strong>, per la maggior parte delle funzionalit\u00e0, i pacchetti sono installabili sotto licenza Apache 2.0.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Cosa faremo?<\/strong><\/h4>\n\n\n\n<p>L&#8217;obiettivo \u00e8 quello di raccogliere syslog provenienti da pi\u00f9 server in un&#8217;unica posizione centralizzata.<br>La nostra configurazione dello prevede l&#8217;installazione dei seguenti componenti:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Java<\/strong>: \u00e8 richiesto da Elasticsearch e Logstash<\/li><li><strong>Elasticsearch<\/strong>: il componente che memorizzer\u00e0 tutti i log<\/li><li><strong>Kibana<\/strong>: l&#8217; interfaccia Web che consentir\u00e0 la ricerca e la visualizzazione dei log, che verr\u00e0 inviata tramite proxy a Nginx<\/li><li><strong>Nginx<\/strong>: configurato come proxy inverso per Kibana<\/li><li><strong>Logstash<\/strong>: il componente server di Logstash che elaborer\u00e0 i log in entrata<\/li><li><strong>Filebeat<\/strong>: installato sui server client che invieranno i propri log a Logstash.<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"970\" height=\"279\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/elk-infrastructure.png\" alt=\"\" class=\"wp-image-2751\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/elk-infrastructure.png 970w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/elk-infrastructure-300x86.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/elk-infrastructure-768x221.png 768w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/elk-infrastructure-600x173.png 600w\" sizes=\"auto, (max-width: 970px) 100vw, 970px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisiti<\/h2>\n\n\n\n<p>Per questo tutorial, utilizzeremo due macchine virtuali Linux con le seguenti specifiche:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Sistema operativo: Ubuntu Server 18.04<\/li><li>RAM: 4 GB     CPU: 2<\/li><li>indirizzo IP: 10.1.10.126<\/li><li>hostname: serverelk<\/li><\/ul>\n\n\n\n<p>La quantit\u00e0 di CPU, RAM e memoria richiesta dal server ELK dipendono dal volume di log che si intende raccogliere.&nbsp;<br>Oltre al server su cui installeremo lo stack ELK, dovremo ovviamente disporre di altre macchine su cui installeremo Filebeat per raccogliere i log:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Sistema operativo: Ubuntu Server 18.04<\/li><li>RAM: 4 GB      CPU: 2<\/li><li>indirizzo IP: 10.1.10.129<\/li><li>hostname: clientelk<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<p>Colleghiamoci alla macchina serverelk e iniziamo la configurazione dello stack.<br>Colleghiamoci all&#8217;utente root per avere tutti i privilegi necessari per eseguire la nostra configurazione utilizzando il comando:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em><code>sudo su<\/code><\/em><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><span class=\"has-inline-color has-very-dark-gray-color\">1.Installazione Java<\/span><\/strong><\/h2>\n\n\n\n<p>Elasticsearch richiede Java 8. Installeremo la JDK 1.8 con il seguente comando:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em><code>sudo apt install openjdk-8-jre-headless<\/code><\/em><\/pre>\n\n\n\n<p>Al termine dell&#8217;installazione, controllare la versione di java.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em><code>java -version<\/code><\/em><\/pre>\n\n\n\n<p>Java 1.8 risulter\u00e0 installato.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2.Installazione di Elasticsearch<\/h2>\n\n\n\n<p>Dopo aver installato Java, installeremo il primo componente di Elastic Stack: Elasticsearch.<\/p>\n\n\n\n<p>Aggiungiamo la chiave pubblica GPG di Elasticsearch e il repository di Elastic.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>wget -qO - https:\/\/artifacts.elastic.co\/GPG-KEY-elasticsearch | sudo apt-key add -<\/em><\/code><em>\n\n<\/em><code><em>echo \"deb https:\/\/artifacts.elastic.co\/packages\/7.x\/apt stable main\" | sudo tee -a \/etc\/apt\/sources.list.d\/elastic-7.x.list<\/em><\/code><\/pre>\n\n\n\n<p>Ora aggiorniamo il repository e installiamo il pacchetto di Elasticsearch usando i seguenti comandi.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em><code><em>sudo apt update<\/em><\/code><\/em><\/code>\n\n<code><em><code><em>sudo apt install elasticsearch -y<\/em><\/code><\/em><\/code><\/pre>\n\n\n\n<p>Al termine dell&#8217;installazione, rechiamoci nella directory &#8216;\/ etc \/ elasticsearch&#8217; e modifichiamo il file di configurazione &#8216;elasticsearch.yml&#8217;.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>vim \/etc\/elasticsearch\/elasticsearch.yml<\/em><\/code><\/pre>\n\n\n\n<p>Limitiamo l&#8217;accesso esterno all&#8217;istanza di Elasticsearch.<br>Scommentiamo (rimuovendo <strong>#<\/strong>) le righe &#8220;network.host&#8221; e  &#8220;http.port&#8221; per la configurazione della porta di default utilizzata da elasticsearch.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><span class=\"has-inline-color has-very-dark-gray-color\">network.host: localhost\nhttp.port: 9200<\/span><\/pre>\n\n\n\n<p>Salva ed esci premendo <strong>Esc <\/strong>e digitando <strong>:wq!<\/strong> seguito dal tasto <strong>Invio<\/strong>.<\/p>\n\n\n\n<p>Ora avviamo il servizio elasticsearch e lo abilitiamo per fare in modo che si avvii automaticamente ad ogni avvio del sistema.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>systemctl start elasticsearch<\/em><\/code><em><br>\n<\/em><code><em>systemctl enable elasticsearch<\/em><\/code><em><\/em><\/pre>\n\n\n\n<p>Ora elasticsearch \u00e8 attivo e funzionante, possiamo controllare utilizzando i comandi di seguito. Con il comando netstat otterremo la porta predefinita &#8216;9200&#8217; su cui elastichsearch \u00e8 in ascolto. Con il curl otterremo invece informazioni sulla versione di elasticsearch che abbiamo installato.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>netstat -plntu<\/em><\/code><em>\n\n<\/em><code><em>curl -XGET 'localhost:9200\/?pretty'<\/em><\/code><\/pre>\n\n\n\n<p>L&#8217;installazione di elasticsearch \u00e8 stata completata.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.Installazione di Kibana<\/h2>\n\n\n\n<p>Il secondo componente da installare \u00e8 Kibana.&nbsp;Installeremo la dashboard di Kibana dal repository elastic e configureremo il servizio kibana per l&#8217;esecuzione sull&#8217;indirizzo localhost.<\/p>\n\n\n\n<p>Installiamo la dashboard di Kibana usando il comando apt qui sotto.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>sudo apt install kibana -y<\/em><\/code><em><\/em><\/pre>\n\n\n\n<p>Ora modifichiamo il file di configurazione &#8216;kibana.yml&#8217;.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>vim \/etc\/kibana\/kibana.yml<\/em><\/code><\/pre>\n\n\n\n<p>Scommentiamo le righe relative a &#8216;server.port&#8217;, &#8216;server.host&#8217; e &#8216;elasticsearch.url&#8217;.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-left\"><span class=\"has-inline-color has-very-dark-gray-color\">server.port: 5601<\/span>\n<span class=\"has-inline-color has-very-dark-gray-color\">server.host: \"localhost\"<\/span>\n<span class=\"has-inline-color has-very-dark-gray-color\">elasticsearch.url: \"http:\/\/localhost:9200\"<\/span><\/pre>\n\n\n\n<p>Questa impostazione fa in modo che Kibana sia accessibile solo all&#8217;host locale.&nbsp;Nei prossimi passaggi configureremo Nginx per consentire l&#8217;accesso esterno.<br>Salva ed esci.<\/p>\n\n\n\n<p>Ora avviamo il servizio kibana e abilitiamolo per avviarsi ogni volta all&#8217;avvio del sistema.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>sudo systemctl enable kibana<\/em><\/code><em>\n\n<\/em><code><em>sudo systemctl start kibana<\/em><\/code><\/pre>\n\n\n\n<p>L&#8217;installazione della dashboard di Kibana \u00e8 stata completata.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4.Installa Nginx come Reverse-Proxy per Kibana<\/h2>\n\n\n\n<p>Poich\u00e9 abbiamo configurato Kibana per renderlo accessibile solo su localhost, dovremo configurare Nginx come reverse-proxy per consentire l&#8217;accesso esterno. In questo modo, digitando l&#8217;ip del nostro server sul browser di un computer locale, andremo a interrogare Nginx sulla porta 80 che a sua volta ci reindirizzer\u00e0 sulla porta 5601 dove Kibana \u00e8 in ascolto.<\/p>\n\n\n\n<p>Installa Nginx e i pacchetti &#8216;apache2-utils&#8217; sul sistema.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>sudo apt install nginx apache2-utils -y<\/em><\/code><em><\/em><\/pre>\n\n\n\n<p>Con il comando htpasswd creeremo l&#8217; autenticazione di base per accedere alla dashboard di Kibana. Nel nostro caso cloudsurfers sar\u00e0 il nome del nostro utente, .<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>sudo htpasswd -c \/etc\/nginx\/.kibana-user cloudsurfers<\/em><\/code><em><\/em><\/pre>\n\n\n\n<p>Inseriamo la password da utilizzare quando richiesto e confermiamo premendo invio. Non dimenticate queste credenziali perch\u00e8 saranno necessarie per accedere alla dashboard di Kibana.<\/p>\n\n\n\n<p>Ora, rechiamoci nella directory di configurazione &#8216;\/ etc \/ nginx&#8217; e crea un nuovo file host virtuale chiamato &#8216;kibana&#8217;.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>vim \/etc\/nginx\/sites-available\/kibana<\/em><\/code><\/pre>\n\n\n\n<p>Copia la seguente configurazione dell&#8217;host virtuale Nginx di seguito. Accertati che server_name corrisponda al nome del tuo server.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-left\"><span class=\"has-inline-color has-very-dark-gray-color\">server {\n    listen 80;\n\n    server_name 10.1.10.126;\n \n    auth_basic \"Restricted Access\";\n    auth_basic_user_file \/etc\/nginx\/.kibana-user;\n\n    location \/ {\n        proxy_pass http:\/\/localhost:5601;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_cache_bypass $http_upgrade; \n    } \n}<\/span><\/pre>\n\n\n\n<p>Salva ed esci.<\/p>\n\n\n\n<p>Dopo aver inserito la password, attiviamo l&#8217;host virtuale di kibana e rimuoviamo la configurazione di default.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>ln -s \/etc\/nginx\/sites-available\/kibana \/etc\/nginx\/sites-enabled\/<\/em><\/code>\n\n<code><em>rm \/etc\/nginx\/sites-enabled\/default<\/em><\/code><\/pre>\n\n\n\n<p> Testiamo tutta la configurazione di nginx con il comando seguente:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>nginx -t<\/em><\/code><\/pre>\n\n\n\n<p>Se non ci sono errori, possiamo avviare il servizio Nginx e abilitarlo per avviarlo automaticamente ad ogni avvio del sistema.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>systemctl enable nginx<\/em><\/code><em><br>\n<\/em><code><em>systemctl restart nginx<\/em><\/code><em><\/em><\/pre>\n\n\n\n<p>L&#8217;installazione e la configurazione di Nginx come reverse proxy per la dashboard di Kibana sono state completate.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5.Installa Logstash<\/h2>\n\n\n\n<p><span class=\"has-inline-color has-very-dark-gray-color\">Installeremo Logstash per centralizzare i log sul nostro server e permettere l&#8217;elaborazione dei dati raccolti.&nbsp;Come accennato in precedenza, sarebbe possibile inviare dati direttamente ad Elasticsearch<\/span> se questi non richiedono trasformazioni.<br>Utilizziamo il seguente comando:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><span class=\"has-inline-color has-very-dark-gray-color\"><em>sudo apt install logstash -y<\/em><\/span><\/pre>\n\n\n\n<p>La configurazione \u00e8 composta da tre sezioni: <strong>input, filtri <\/strong>e<strong> output<\/strong>. Configureremo Logstash per accettare in ingresso nel nostro server i log provenienti dalle altre macchine client tramite Filebeat; imposteremo un filtro per raccogliere solo i dati che ci interessano e configureremo l&#8217;output affinch\u00e8 venga creato l&#8217;indice in Elasticsearch per consentire la ricerca dei dati raccolti. <br>I file di configurazione di Logstash sono in formato JSON e andranno creati in \/etc\/logstash\/conf.d.&nbsp;<\/p>\n\n\n\n<p>Creiamo un file di <strong>input <\/strong>chiamato filebeat-input.conf e :<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>vim \/etc\/logstash\/conf.d\/filebeat-input.conf<\/em><\/code><\/pre>\n\n\n\n<p>Impostiamo come nostro input &#8220;filebeat&#8221; attraverso la seguente configurazione:<\/p>\n\n\n\n<pre class=\"wp-block-verse\">input {\n  beats { \n    port =&gt; 5044\n  }\n}<\/pre>\n\n\n\n<p>Questo file specifica il beats in input che comunicher\u00e0 con Logstash sulla porta tcp&nbsp;5044.<br>Salva ed esci.<\/p>\n\n\n\n<p>Creiamo ora un file di configurazione che funger\u00e0 da <strong>filtro <\/strong>per Logstash denominato  syslog-filter.conf.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>vim \/etc\/logstash\/conf.d\/syslog-filter.conf<\/em><\/code><\/pre>\n\n\n\n<p>Con la seguente configurazione verranno ricercati da Filebeat solo i log che sono etichettati come &#8216;syslog&#8217;, per renderli strutturati e interrogabili.<\/p>\n\n\n\n<pre class=\"wp-block-verse\">filter {\n  if [type] == \"syslog\" {\n    grok {\n      match =&gt; { \"message\" =&gt; \"%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\\[%{POSINT:syslog_pid}\\])?: %{GREEDYDATA:syslog_message}\" }\n      add_field =&gt; [ \"received_at\", \"%{@timestamp}\" ]\n      add_field =&gt; [ \"received_from\", \"%{host}\" ]\n    }\n    date {\n      match =&gt; [ \"syslog_timestamp\", \"MMM  d HH:mm:ss\", \"MMM dd HH:mm:ss\" ]\n    }\n  }\n}<\/pre>\n\n\n\n<p>Salva ed esci.<\/p>\n\n\n\n<p>Configuriamo infine l&#8217;output di Elasticsearch &#8220;output-elasticsearch.conf&#8221;.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>vim \/etc\/logstash\/conf.d\/output-elasticsearch.conf<\/em><\/code><\/pre>\n\n\n\n<p>La seguente configurazione imposta logstash per conservare i dati di Filebeat in Elasticsearch (in ascolto sulla port 9200), in un indice che prender\u00e0 il nome del beat utilizzato (filebeat nel nostro caso) seguito dalla data di creazione.<\/p>\n\n\n\n<pre class=\"wp-block-verse\">output {\n  elasticsearch { \n    hosts =&gt; \"localhost:9200\"\n    sniffing =&gt; true\n    manage_template =&gt; false\n    index =&gt; \"%{[@metadata][beat]}-%{+YYYY.MM.dd}\"\n    document_type =&gt; \"%{[@metadata][type]}\" \n  } \n}<\/pre>\n\n\n\n<p>Salva ed esci.<\/p>\n\n\n\n<p>Testeremo la configurazione di Logstash con il seguente comando:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>sudo <span class=\"has-inline-color has-very-dark-gray-color\">-u logstash \/usr\/share\/logstash\/bin\/logstash --path.settings \/etc\/logstash -t<\/span><\/em><\/pre>\n\n\n\n<p>Se non ci sono errori di sintassi, dovrebbe essere visualizzato il seguente messaggio <strong>Config Validation Result: OK<\/strong> .&nbsp;In caso di errori, prova a leggere l&#8217;output dell&#8217;errore per vedere cosa c&#8217;\u00e8 che non va nella configurazione. Puoi anche controllare il file di log di logstash con il seguente comando:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\">tail -f \/var\/log\/logstash\/logstash-plain.log<\/pre>\n\n\n\n<p>Al termine, avviare il servizio logstash e abilitarlo l&#8217;avvio automatico.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>sudo systemctl enable logstash<\/em><\/code><em><br>\n<\/em><code><em>sudo systemctl start logstash<\/em><\/code><em><\/em><\/pre>\n\n\n\n<p>Controllare che il servizio logstash sia attivo usando il comando systemctl.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><code><em>systemctl status logstash<\/em><\/code><\/pre>\n\n\n\n<p>Il servizio Logstash \u00e8 ora attivo e funzionante. <br>L&#8217;installazione dello Stack-ELK \u00e8 stata completata.<\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<p><br><span class=\"has-inline-color has-very-dark-gray-color\">Ora sar\u00e0 necessario installare Filebeat sulle macchine client e configurarlo<\/span> per inoltrare i dati a Logstah.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6.Installa Filebeat<\/h2>\n\n\n\n<p>In questo passaggio, configureremo il client Ubuntu 18.04 &#8220;clientelk&#8221; installando su di esso Filebeat. Colleghiamoci quindi al server &#8220;clientelk&#8221; con privilegi di root e prima di installare Filebeat nel sistema, modifichiamo il file hosts utilizzando l&#8217;editor di vim.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>sudo su\n<\/em>\n<em>vim \/etc\/hosts<\/em><\/pre>\n\n\n\n<p>Aggiungiamo indirizzo ip e nome del nostro serverelk.<\/p>\n\n\n\n<pre class=\"wp-block-verse\">10.1.10.126 serverelk<\/pre>\n\n\n\n<p>Salva ed esci.<\/p>\n\n\n\n<p>Successivamente aggiungiamo anche qui la chiave e il repository di Elastic.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em><code><em>wget -qO - https:\/\/artifacts.elastic.co\/GPG-KEY-elasticsearch | sudo apt-key add -<\/em><\/code><\/em>\n\n<em><code><em>echo \"deb https:\/\/artifacts.elastic.co\/packages\/7.x\/apt stable main\" | sudo tee -a \/etc\/apt\/sources.list.d\/elastic-7.x.list<\/em><\/code><\/em><\/pre>\n\n\n\n<p>Aggiorna il repository e installa il pacchetto &#8220;filebeat&#8221; utilizzando il comando apt di seguito.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>apt update\n\napt install filebeat -y<\/em><\/pre>\n\n\n\n<p>Al termine dell&#8217;installazione, procediamo con la configurazione di Filebeat modificando il file &#8220;filebeat.yml&#8221;.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>vim \/etc\/filebeat\/filebeat.yml<\/em><\/pre>\n\n\n\n<p>Ora abilitiamo la configurazione di input modificando il valore della riga &#8220;enabled&#8221; da &#8220;false&#8221; a &#8220;true&#8221; e definiamo i percorsi dei file di log di sistema da inviare al server logstash.&nbsp;Per questa guida, aggiungeremo i log di ssh &#8220;auth.log&#8221; e i syslog.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-left\">  # Change to true to enable this input configuration.  \n  enabled: true\n  # Paths that should be crawled and fetched. Glob based paths.\n  path:\n    - \/var\/log\/auth.log\n    - \/var\/log\/syslog<\/pre>\n\n\n\n<p>Poich\u00e8 i dati andranno inviati a Logstash per le elaborazioni, commentiamo l&#8217;output predefinito relativo ad Elasticsearch e decommentiamo la riga di output di Logstash come di seguito.<\/p>\n\n\n\n<pre class=\"wp-block-verse\">#output.elasticsearch: \n   # Array of hosts to connect to. \n   # hosts: [\"localhost:9200\"]<\/pre>\n\n\n\n<pre class=\"wp-block-verse\">output.logstash:\n  # The Logstash hosts\n  host: [\"serverelk:5044\"]<\/pre>\n\n\n\n<p>Salva ed esci.<\/p>\n\n\n\n<p>Successivamente, dobbiamo modificare il file &#8216;filebeat.reference.yml&#8217; per abilitare i moduli filebeat che ci interessano.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>vim \/etc\/filebeat\/filebeat.reference.yml<\/em><\/pre>\n\n\n\n<p>Abilitiamo il modulo di sistema syslog per filebeat scommentando le righe come di seguito.<\/p>\n\n\n\n<pre class=\"wp-block-verse\">- module: system\n  # Syslog\n  syslog:\n  enabled: true<\/pre>\n\n\n\n<p>Salva ed esci. Abilitare il modulo con il seguente comando:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>filebeat modules enable system<\/em><\/pre>\n\n\n\n<p>Per visualizzare l&#8217;elenco dei moduli abilitati e di quelli disponibili possiamo utilizzare il comando:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>filebeat modules list<\/em><\/pre>\n\n\n\n<p>L&#8217;installazione e la configurazione di Filebeat sono state completate.&nbsp;Possiamo controllare che tutto sia configurato correttamente compreso l&#8217;output per verificare che la connessione al server vada a buon fine. Utilizziamo i comandi:<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>filebeat test config\n\nfilebeat test output<\/em><\/pre>\n\n\n\n<p>Se vengono mostrati errori controllate la sintassi dei file di configurazione modificati in precedenza.<\/p>\n\n\n\n<p>Se \u00e8 tutto OK il prossimo step sar\u00e0 quello di caricare in Elasticsearch l&#8217;indice necessario per Filebeat e in Kibana le dashboard necessarie per visualizzare correttamente i file di log e tutti i job di machine learning.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>sudo filebeat -e<\/em><\/pre>\n\n\n\n<p>Ora avviamo il servizio di Filebeat e abilitiamolo per l&#8217;avvio automatico.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>systemctl start filebeat\n\nsystemctl enable filebeat<\/em><\/pre>\n\n\n\n<p>Controlla il servizio Filebeat utilizzando i comandi seguenti.<\/p>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><em>systemctl status filebeat\n\ntail -f \/var\/log\/filebeat\/filebeat<\/em><\/pre>\n\n\n\n<p>I log shipper di filebeat sono attivi e comunicano con il serverelk sulla porta 5044. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Test<\/h2>\n\n\n\n<p>Apriamo un browser web e colleghiamoci al nostro server digitando l&#8217;indirizzo IP. Apparir\u00e0 la finestra di autenticazione in cui andremo ad inserire i dati dell&#8217;utente creato al punto <strong>4<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"156\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-301-1024x156.png\" alt=\"\" class=\"wp-image-2767\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-301-1024x156.png 1024w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-301-300x46.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-301-768x117.png 768w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-301-1536x234.png 1536w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-301-600x91.png 600w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-301.png 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Se le credenziali sono corrette verr\u00e0 caricata la dashboard dello stack.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"539\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-306-1024x539.png\" alt=\"\" class=\"wp-image-2774\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-306-1024x539.png 1024w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-306-300x158.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-306-768x404.png 768w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-306-1536x808.png 1536w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-306-600x316.png 600w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-306.png 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Apriamo il menu laterale e selezioniamo Stack Management. Kibana utilizza patterndi indice per recuperare i dati dagli indici di Elasticsearch.<br>Definiamo il pattern di &#8220;filebeat- *&#8221; e clicchiamo sul pulsante &#8220;&gt;Next Step&#8221;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-303-1-1024x577.png\" alt=\"\" class=\"wp-image-2773\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-303-1-1024x577.png 1024w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-303-1-300x169.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-303-1-768x433.png 768w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-303-1-1536x865.png 1536w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-303-1-2048x1154.png 2048w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-303-1-600x338.png 600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Selezioniamo @timestamp per ordinare i risultati in vase alla data e clicca su Create Index Pattern.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"453\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-298-1024x453.png\" alt=\"\" class=\"wp-image-2771\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-298-1024x453.png 1024w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-298-300x133.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-298-768x340.png 768w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-298-1536x679.png 1536w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-298-600x265.png 600w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-298.png 1917w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Torniamo nella Home e facciamo clic &#8220;Discover&#8221;.&nbsp;Selezioneremo l&#8217;indice predefinito di Filebeat e questo ci mostrer\u00e0 tutti i dati di log inviati dal nostro server &#8220;clientelk&#8221;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"522\" src=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-302-1024x522.png\" alt=\"\" class=\"wp-image-2772\" srcset=\"https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-302-1024x522.png 1024w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-302-300x153.png 300w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-302-768x392.png 768w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-302-1536x784.png 1536w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-302-600x306.png 600w, https:\/\/cloudsurfers.it\/wp-content\/uploads\/2020\/08\/Screenshot-302.png 1917w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusioni<\/h2>\n\n\n\n<p><span class=\"has-inline-color has-very-dark-gray-color\">Lo stack ELK pu\u00f2 essere sicuramente utile in moltissime situazioni in cui si tenta di identificare problemi di sistema o malfunzionamenti di applicazioni, poich\u00e9 consente di cercare in tutti i log di un determinato server.&nbsp;\u00c8 inoltre utile perch\u00e9 consente di individuare anche i problemi che si estendono su pi\u00f9 server, filtrando e correlando tutti i log generati durante un determinato intervallo di tempo. Grazie ai numerosi plugin aggiuntivi in continuo aumento \u00e8 possibile mettere in piedi una soluzione ad hoc per ogni tipo di esigenza<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><br>Link Utili &amp; Credits<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Documentazione Elastic <a href=\"https:\/\/www.elastic.co\/guide\/index.html\"><\/a><a href=\"https:\/\/www.elastic.co\/guide\/index.html\">https:\/\/www.elastic.co\/guide\/index.html<\/a><\/li><li>Best practice indici Elasticsearch <a href=\"https:\/\/logz.io\/blog\/managing-elasticsearch-indices\/\">https:\/\/logz.io\/blog\/managing-elasticsearch-indices\/<\/a><\/li><li>English Tutorial <a href=\"https:\/\/www.howtoforge.com\/tutorial\/how-to-install-elastic-stack-ubuntu-1804\/\">https:\/\/www.howtoforge.com\/tutorial\/how-to-install-elastic-stack-ubuntu-1804\/<\/a><\/li><\/ul>\n\n\n\n<div style=\"text-align:center\"><iframe style=\"width:120px;height:240px;\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" frameborder=\"0\" src=\"https:\/\/rcm-eu.amazon-adsystem.com\/e\/cm?ref=tf_til&#038;t=fontanamarcoi-21&#038;m=amazon&#038;o=29&#038;p=8&#038;l=as1&#038;IS2=1&#038;npa=1&#038;asins=1789954398&#038;linkId=5f897e7daf82c0e3866dae07077494ea&#038;bc1=ffffff&#038;lt1=_top&#038;fc1=333333&#038;lc1=0066c0&#038;bg1=ffffff&#038;f=ifr\" loading=\"lazy\"><\/iframe><\/div>\n","protected":false},"excerpt":{"rendered":"<p>I file di log sono spesso fonte di problemi, perch\u00e9 ad esempio presentano formati strani, perch\u00e9 sono accessibili solo connettendosi sulle singole macchine o perch\u00e9 nel corso degli anni andando &#8230;<\/p>\n","protected":false},"author":6,"featured_media":2721,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wds_primary_category":0,"footnotes":""},"categories":[36],"tags":[122,121,114,110],"class_list":["post-2769","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide","tag-log","tag-stackelk-2","tag-sysadmin","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/posts\/2769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/comments?post=2769"}],"version-history":[{"count":0,"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/posts\/2769\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/media\/2721"}],"wp:attachment":[{"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/media?parent=2769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/categories?post=2769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudsurfers.it\/index.php\/wp-json\/wp\/v2\/tags?post=2769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}