Κεντρική διαχείριση log με το ELK Stack 5 σε Ubuntu 16.04

diaxirisi-log-elkstack

Η κεντρική διαχείριση τον αρχείων καταγραφής (log files) είναι πολύ χρήσιμη στην εύρεση και επίλυση τον προβλημάτων των Ubuntu Servers που διαχειριζόμαστε. Μπορείς δεις όλη τη πληροφορία συγκεντρωμένη καθώς και τη συνέβη συγκεκριμένες χρονικές στιγμές σε όλους του Server.

Σε αυτό τον οδηγό θα δούμε πως μπορούμε να εγκαταστήσουμε και να παραμετροποιήσουμε τα Elasticsearch ,Logstash , Kibana για να στήσουμε ένα Κεντρικό log server. Επίσης θα χρησιμοποιήσουμε τον Nginx σαν reverse proxy μπροστά από το Κibana. Τέλος θα δούμε πως να εγκαταστήσουμε το Filebeat σε κάθε μηχάνημα Ubuntu από το οποία θέλουμε να συγκεντρώνουμε τα αρχεία καταγραφής(log files).

Το ELK Stack μας περιλαμβάνει:

components
components
  1. Elasticsearch: O Server που επεξεργάζεται τα εισερχόμενα αρχεία καταγραφής.
  2. Logstash: Αποθηκεύει τα αρχεία καταγραφής.
  3. Kibana: Ιστοσελίδα διαχείρισης και οπτικοποιήσης αρχείων καταγραφής.
  4. Filebeat: Θα εγκατασταθεί στα συστήματα από τα οποία θα συγκεντρώνουμε τα αρχεία καταγραφής(clients) και θα επικοινωνεί με το Logstash

Για clients θα χρησιμοποιήσουμε ένα LAMP, ένα MEAN και ένα Mail Server. Μπορείτε να χρησιμοποιήσετε ότι clients θέλετε ή να ακολουθήσετε τους οδηγούς για να στήσετε τα ίδια συστήματα.

Στον ELΚ Server θα εγκαταστήσουμε όλα τα λογισμικά εκτός του Filebeat.

Επίσης θα χρειαστούμε ένα domain για να έχουμε πρόσβαση στο Web Interface το οποίο έχει ρυθμιστεί για να δείχνει στο server μας. Αν δεν έχετε κάποιο Domain μπορείτε να αποκτήσετε ένα νέο δωρεάν και να το ρυθμίσετε με τον αυτόν τον οδηγό: Απόκτηση και ρύθμιση δωρεάν domain name για χρήση στην Ιστοσελίδα μας.

Για την ολοκλήρωση του οδηγού θα χρησιμοποιήσουμε το elk.serverexpose.tk. Εσείς σε όλα τα βήματα θα χρειαστεί να το αντικαταστήσετε με το δικό σας domain.

Για να ολοκληρώσουμε με επιτυχία αυτόν τον οδηγό χρειαζόμαστε ένα λογαριασμό με δικαιώματα χρήσης της εντολής sudo

Στο τέλος του άρθρου θα βρείτε σε συνημμένο τα αρχεία ρυθμίσεων που θα χρησιμοποιηθούν στον οδηγό.

Εγκατάσταση και παραμετροποίηση του ELK Server:

Εγκατάσταση Java

Τα λογισμικά που θα χρησιμοποιήσουμε δουλεύουν σε Java και θα πρέπει να τη περάσουμε, θα περάσουμε την επίσημη Java 8 της Oracle περνώντας το αποθετήριο της:

sudo add-apt-repository -y ppa:webupd8team/java

Κάνουμε ανανέωση των αποθετηρίων του συστήματος μας:

sudo apt update

και θα περάσουμε τη Java 8:

sudo apt -y install oracle-java8-installer

θα μας εμφανιστεί μήνυμα στο τερματικό μας για να αποδεχτούμε τους όρους χρήσης της Oracle:

oracle license
oracle license

πατάμε Enter.

Στη επόμενη οθόνη επιλέγουμε Yes και πατάμε Enter

oracle license yes
oracle license yes

θα μας εμφανίσει ένα μήνυμα πως ολοκληρώθηκε η εγκατάσταση και μας δίνει οδηγίες για να δηλώσουμε τη Java 8 σαν τη προκαθορισμένη στο σύστημα μας.

oracle finish setup
oracle finish setup

To οποίο θα κάνουμε:

sudo apt install oracle-java8-set-default

Εγκατάσταση Elasticsearch

Θα κάνουμε την εγκατάσταση με χρήση του αποθετηρίου της Elasticsearch που δεν υπάρχει στην Ubuntu. Για να το περάσουμε:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list

Κάνουμε ενημέρωση τα αποθετήρια του συστήματος μας και εγκατάσταση του Elastcisearch:

sudo apt update && sudo apt install elasticsearch

Έχουμε εγκαταστήσει το Elasticsearch και θα κάνουμε μια αλλαγή στο αρχείων ρυθμίσεων του ώστε να μην μέσο της Public IP αλλά μόνο μέσα από το localhost:

sudo nano /etc/elasticsearch/elasticsearch.y

πατάμε ctrl+W για αναζήτηση πληκτρολογούμε network.host και πατάμε enter.

θα μας εμφανίσει μια ίδια γραμμή σε σχόλιο

#network.host: 192.168.0.1

την αντικαθιστούμε με:

network.host: localhost

Πατάμε ctrl+X για έξοδο και Y για αποθήκευση.

Κάνουμε Restart την εφαρμογή:

sudo systemctl restart elasticsearch

Τέλος ενεργοποιούμε την εκκίνηση της εφαρμογής στην εκκίνηση του συστήματος μας:

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch

Έχουμε τελειώσει με την εγκατάσταση του Elasticsearch και προχωράμε στην εγκατάσταση του επόμενου λογισμικού.

Εγκατάσταση Kibana

Θα εγκαταστήσουμε το Kibana από το αποθετήριο του Elasticsearch που περάσαμε προηγουμένως:

sudo apt -y install kibana

Έχουμε εγκαταστήσει το Kibana και θα κάνουμε μια αλλαγή στις ρυθμίσεις του:

sudo nano /etc/kibana/kibana.yml

πατάμε ctrl+W για αναζήτηση πληκτρολογούμε server.host και πατάμε enter.

θα μας εμφανίσει μια ίδια γραμμή σε σχόλιο

#server.host: “localhost”

Αφαιρούμε το # από την αρχή της γραμμής:

server.host: "localhost"

Πατάμε ctrl+X για έξοδο και Y για αποθήκευση.

Με αυτή τη ρύθμιση έχουμε δηλώσει στο Kibana να τρέχει μόνο σε localhost. Θα έχουμε πρόσβαση στο Kibana μέσο του Nginx που θα ρυθμίσουμε ως Reverse Proxy.

Τέλος θα ενεργοποιήσουμε την εκκίνηση της εφαρμογής μαζί με τους συστήματος και θα εκκινήσουμε την εφαρμογή:

sudo systemctl daemon-reload
sudo systemctl enable kibana
sudo systemctl start kibana

Έχουμε τελειώσει την εγκατάσταση του Kibana. Για να έχουμε πρόσβαση στο Web Interface του πρέπει να ρυθμίσουμε τον Nginx σαν Reverse Proxy.

Εγκατάσταση Nginx

Για την εγκατάσταση του Nginx πληκτρολογούμε:

sudo apt install nginx

θα φτιάξουμε το χρήστη Kibanauser που θα έχει πρόσβαση στο Web interface Kibana, μπορείτε να τον ονομάσετε οπως θελετε, θα μας ζητήσει να γράψουμε και να επιβεβαιώσουμε τον κωδικό με τον οποίο θα συνδεόμαστε στο Web interface του Kibana.:


echo "kibanauser:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Ανοίγουμε το default server block του Nginx:

sudo nano /etc/nginx/sites-available/default

Αντικαθιστούμε το περιεχόμενο με το παρακάτω, για Server name βάζετε το δικό σας domain:

server {
listen 80;

server_name elk.serverexpose.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;
}
}

Πατάμε ctrl+X για έξοδο και Y για αποθήκευση.

Στο παραπάνω Server block δηλώνουμε στον Nginx να προωθεί την κίνηση στο localhost στη θύρα 5601 όπου ακούει το Kibana. Επίσης χρησιμοποιούμε για Authentication τον User που φτιάξαμε πριν λίγο.

θα ανοίξουμε τη θύρα 80 για τον Nginx:

sudo ufw allow 80/tcp'

Τέλος θα κάνουμε restart τον Nginx:

sudo systemctl restart nginx

Αν έχουμε κάνει σωστά τα προηγούμενα βήματα πληκτρολογώντας το domain που δηλώσαμε στον Nginx θα πρέπει να μπορούμε να δούμε το Web interface του Kibana και να κάνουμε Login με τον User που δημιουργήσαμε.

kibana login
kibana login
kibana index
kibana index

Θα συνεχίσουμε με την εγκατάσταση και παραμετροποίηση των υπολοίπων λογισμικών.

Εγκατάσταση Logstash

Θα εγκαταστήσουμε το Logstash από το αποθετήριο του Elasticsearch που περάσαμε προηγουμένως:

sudo apt install logstash

Θα ενεργοποιήσουμε την εκκίνηση της εφαρμογής μαζί με τους συστήματος και θα εκκινήσουμε την εφαρμογή.

sudo /bin/systemctl daemon-reload
sudo systemctl enable logstash

Παραμετροποίηση του Logstash

Τα αρχεία του Logstash βρίσκονται στο φάκελο /etc/logstash/conf.d/ και αφορούν 3 τομείς, είσοδος, Φίλτρο και έξοδος χρησιμοποιώντας JSON format. Εκεί θα δημιουργήσουμε τα αρχεία μας.

Στο πρώτο αρχείο θα δηλώσουμε σε ποια θύρα θα λαμβάνει την κίνηση το Logstash και από που θα διαβάζει το certification.Για τη δημιουργία του αρχείου εισόδου:

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

Προσθέτουμε:

input {
beats {
port => 5044
}
}

Πατάμε ctrl+X για έξοδο και Y για αποθήκευση.

Θα πρέπει να ανοιξουμε και τη Θύρα στο Firewall:

sudo ufw allow 5044

Το δεύτερο αρχείο θα εχει το φιλτρο μας, θα διαβάζει τα εισερχόμενα μηνύματα από filebeat που έχουν την τιμή Syslog. Για τη δημιουργία του αρχείου φίλτρου:

sudo nano /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" ]
}
}
}

Πατάμε ctrl+X για έξοδο και Y για αποθήκευση.

Τέλος θα δημιουργήσουμε το αρχείο για το Output. Εκεί θα δολώνουμε ως έξοδο το localhost:9200 όπου ακούει το Elasticsearch:

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

Προσθέτουμε:

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

Πατάμε ctrl+X για έξοδο και Y για αποθήκευση.

Κάνουμε restart για να διαβάσει τις καινούργιες ρυθμίσεις:

sudo systemctl restart logstash.service

Φόρτωσή των Index Template στο Kibana.

θα φορτώσουμε templates στο Kibana ώστε να ξέρει πως να απεικονίσει τη πληροφορία που θα λαμβάνουμε από το filebeat.

cd ~
curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.2.2.zip
sudo apt -y install unzip
unzip beats-dashboards-*.zip
cd beats-dashboards-*
./load.sh

‘Oταν θα συνδεθούμε στο Web Interface θα επιλέξουμε το filebeat index

Φόρτωσή των Index Template στο Elasticsearch.

Θα χρειαστεί να περάσουμε το Template και στο Elasticsearch:

cd ~
curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

Αν το Template φορτωθεί σωστά θα μας επιστρέψει το παρακάτω κείμενο:

{
“acknowledged” : true
}

Εγκατάσταση και παραμετροποίηση των Clients:

Τον υπόλοιπο οδηγό θα τον τρέξουμε στους clients που θέλουμε να στέλνουν τα Log files τους στον ELK Server μας. Όπως περιγράψαμε και στην αρχή του οδηγού σε ένα LAMP Server, ένα MEAN Server και σε ένα Email Server.

Σημείωση: Τα παρακάτω βήματα θα πρέπει να γίνουν σε όλους τους clients.

Εγκατάσταση Filebeat

θα εγκαταστήσουμε το αποθετήριο που βρήσκετε το Filebeat:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list

θα ενημερώσουμε τα αποθετήρια του συστήματος μας και θα εγκαταστήσουμε το Filebeat:

sudo apt update && sudo apt install filebeat

θα ενεργοποιήσουμε την εκκίνηση του Filebeat με την εκκίνηση του συστήματος:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable filebeat.service

Παραμετροποίηση Filebeat

Τώρα θα παραμετροποιήσουμε το Filebeat να στέλνει τα αρχεία καταγραφής στον ELK Server μας, ανοίγουμε το αρχείο config του Filebeat:

sudo nano /etc/filebeat/filebeat.yml

Θα δηλώσουμε στο Fileabeat να στέλνει τα auth.log και sys.log στον server μας. Επίσης πόσο συχνα να στέλνει τα log files:

filebeat:
prospectors:
-
paths:
- /var/log/auth.log
- /var/log/syslog
# - /var/log/*.log

input_type: log

document_type: syslog

registry_file: /var/lib/filebeat/registry

output:
logstash:
hosts: [“elk.serverexpose.tk:5044”]
bulk_max_size: 1024

shipper:

logging:
files:
rotateeverybytes: 10485760 # = 10MB

Τέλος θα κάνουμε restart στο Filebeat για να πάρει τις αλλαγές:

sudo systemctl restart filebeat

Τώρα όλα τα λογισμικά μας ειναι ρυθμισμένα να επικοινωνούν, μπορούμε να επιβεβαιώσουμε οτι ο ELK Server μας λαμβάνει δεδομένα αν τρέξουμε στον ELK Server την παρακάτω εντολή:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Θα πρέπει να δείτε μια παρόμοια εικόνα:

elastic check
elastic check


Εάν το output είναι μηδενικό θα πρέπει να δούμε τι έχουμε κάνει λάθος.

Τώρα μπορούμε να συνδεθούμε στο Kibana, στη αρχική οθόνη που θα μας βγάλει, θα πατήσουμε στο filebeat και set as default:

filibeat-choose

Τέλος αν πατήσουμε στο discover θα μπορούμε να δούμε γραφήματα με τα εισερχόμενα δεδομένα.

kibana discover
kibana discover

Αν έχουμε πρόβλημα με τα αρχεία ρυθμίσεων που είναι σε yml πρότυπο μπορούμε να τα κατεβάσουμε από εδώ: 02-beats-input, 10-syslog-filter, 30-elasticsearch-output, filebeat.

Με αυτόν τον τρόπο πλέον έχουμε έναν πλήρη και λειτουργικό ELK Server που συγκεντρώνει και αναλύει τα log files μας απο όλους τους clients. Ο χρόνος ολοκλήρωσης του παραπάνω οδηγού υπολογίζεται περίπου στα 90 λεπτά.

Μην διστάσετε να αφήσετε σχόλιο για οποιαδήποτε απορία ή παρατήρηση που μπορεί να έχετε.

Site Footer