Cum să instalez Elasticsearch, Logstash și Kibana (Stiva ELK) în Ubuntu 18.04

Pasul 3 – Instalarea și configurarea Logstash

Deși este posibil ca Beats să trimită date direct către baza de date Elasticsearch, eu recomand folosirea Logstash pentru procesarea datelor. Asta vă va permite colectarea datelor din mai multe surse, transformarea lor într-un format comun și exportarea lor într-o altă bază de date.

Instalați Logstash cu următoarea comandă:

$ sudo apt install logstash

După instalarea Logstash, mergem mai departe cu configurarea acestuia. Fișierele de configurare Logstash sunt scrise în format și se găsesc în directorul /etc/logstash/conf.d. Pe măsură ce îl configurați, ar fi util să vă gândiți la Logstash ca la o conductă care preia date la un capăt și si le procesează trimițându-le la destinație (în acest caz destinația fiind Elasticsearch). O conducta Logstash are nevoie de două elemente, input (întrări) și output ieșiri și de un element opțional, filtru. Pluginurile de întrare consumă date de la sursă, pluginurile filtru procesează datele, și cele de ieșire scriu datele la destinație.

Diagramă de funcționare Logstash

Creați un fișier de configurare denumit 02-beats-input.conf în care vă veți seta intrările (input) Filebeat:

$ sudo nano /etc/logstash/conf.d/02-beats-input.conf

Inserați următoarea configurație pentru input (întrări). Aceasta specifică faptul că inputurilebeats se vor face pe portul TCP 5044.

input {
  beats {
    port => 5044
  }
}

Salvați și închideți fișierul. Apoi, creați un fișier de configurare denumit 10-syslog-filter.conf, unde vom adăuga un filtru pentru jurnalele de sistem, denumite și syslogs:

$ sudo nano /etc/logstash/conf.d/10-syslog-filter.conf

Inserați următorul filtru de configurare syslog. Acest exemplu de configurație de jurnale de sistem a fost preluat din documentația oficială Elastic. Acest filtru este folosit pentru a genera jurnalele de sistem sosite pentru a le structura și a le face folosibile de panourile de control și vizualizare din Kibana:

filter {
  if [fileset][module] == "system" {
    if [fileset][name] == "auth" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
        pattern_definitions => {
          "GREEDYMULTILINE"=> "(.|\n)*"
        }
        remove_field => "message"
      }
      date {
        match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
      geoip {
        source => "[system][auth][ssh][ip]"
        target => "[system][auth][ssh][geoip]"
      }
    }
    else if [fileset][name] == "syslog" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
        pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
        remove_field => "message"
      }
      date {
        match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
    }
  }
}

Salvați și închideți fișierul când ați terminat.

În final, creați un fișier de configurare denumit 30-elasticsearch-output.conf:

$ sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

Inserați următoarele următoare configurație de ieșire output. În principiu acest output configurează Logstash să stocheze datele Beats în Elasticsearch, care rulează pe un socket de forma localhost:9200, într-un index intitulat după denumirea Beat. Beat-ul folosit în acest tutorial este Filebeat:

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

Salvați și închideți fișierul.

Dacă mai doriți să adăugați filtre pentru alte aplicații care folosesc întrările Beat, fiți siguri să denumiți fișierele în așa fel încât sunt sortate între configurabile de intare și ieșire, ceea ce înseamnă că denumirile fisierelor ar trebui să înceapă cu un număr din două cifre între 02 și 30.

Testați-vă configurația Logstash configuration cu această comandă:

$ sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

Dacă nu vor exista erori de sintaxă, ecranul va afișa mesajul Configruation OK după câteva secunde. Dacă nu veți vedea acest mesaj, verificați mesajele de eroare care apar pe ecran și faceți modificările adecvate pentru a le corecta în configurare.

Dacă testul de configurare este în regula, porniți și activați Logstash pentru ca schimbările făcute în configurare să între în funcțiune:

$ sudo systemctl start logstash
$ sudo systemctl enable logstash

Acum că Logstash funcționează corect și este configurat în totalitate, haideți să instalăm Filebeat.

root

Un entuziast pasionat de tot ceea ce înseamnă Linux și Open Source și un energic promotor. Deschis la orice proiecte bazate pe aceste tehnologii.

Lasă un răspuns

Adresa ta de email nu va fi publicată.

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.