Keskse logilahenduse rakendamine V2
Juhend on mõeldud Algaja/Keskmise oskustega GNU/Linux administraaotritele.
Juhend kehtib tarkvarale:
-CentOS 6.6
-Trisquel GNU/Linux 7.0
-Debian GNU/Linux 7.7
-Logstash 1.4.2
-Kibana 3.0.1
-Elasticsearch 1.1.1
-Logstash-forwarder 0.3.1
Autor: Kristjan Indlo A41
Kuupäev: 2014.11.22, 2014.12.03, 2014.12.09, 2014.12.10
Eesmärk
Antud juhendi põhiline eesmärk on algupärane labor Keskse logilahenduse rakendamine kaasajastada ja võimalikult palju lihtsustada.
Sekundaarne eesmärk on kasutada kolme erinevat operatsioonisüsteemi, kahest erinevast perekonnast:
1) Debian GNU/Linux (Debainiliste perekond)
2) Trisquel GNU/Linux (Ubuntu vabastatud asendus, Debianiliste perekond)
3) CentOS GNU/Linux (RHEL perekond)
Juhendi eelised
Selle juhendi eelisteks on:
-Uuema tarkvara kasutuselevõtt. Logstash, kibana ja elasticearch on muutunud palju.
-See juhend katab rohkem vabu operatsioonisüsteeme.
-Kasutusel on nii .deb, kui ka .rpm pakendusega süsteemid
-Kerge rakendus logstash-forwarder kogub logisi ja edastab neid logiserverile
-Ühenduse usalduse tagamiseks on kasutatud logiserveris loodud sertifikaati(nõutud parameeter logstash-forwarder poolt)
Juhendi puudused
Selle juhendi miinusteks on:
-Siin juhendis ei käsitleta Windows logide kogumist. Eelmisest juhendist võib sellisel juhul kasu olla
-Antud juhend venib pikaks võrreldes juhendi esimese versiooniga
Sissejuhatus laborisse
See juhend on mõeldud Keskse logihalduse labori eelneva versiooni värskenduseks.
Eelneva versiooni Keskse logihalduse laborist leiab SIIT
Selles juhendis on kasutatud logiserveri ülesseadmiseks samu põhikomponente:
-Logstash
-Elasticsearch
-Kibana
Logisi klientidel kogub logstash-forwarder
NB! Kõik käsureategevused on läbi viidud juurkasutaja õigustes (root).
Juhendis kasutatav tarkvara
Hüperviisorina on kasutuses Virt-Manager, Qemu ja KVM komplekt.
Logiserver: Debain Wheezy 7.7 x86_64
Ip addr:
eth0: 192.168.122.43/24 (DHCP)
eth1: 192.168.56.110/24 (Static)
FQDN: logiserver.minudomeen.midagi
CPU: 1x
MEM: 2084M
Video: Cirrus Logic 9M
Disk:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 254:0 0 8G 0 disk └─vda1 254:1 0 8G 0 part /
See on logiserver kuhu paigaldatakse järgnev tarkvara:
1. Logstash v1.4.2 (Logiserver)
2. Elasticsearch v1.1.1 (Logide otsing)
3. Kibana (Logide visualiseerimine veebiliideses)
Kuna kibana on veebirakendus, on vaja ka veebiserverit.
Siin laboris kasutatakse veebiserveriks ja proksimiseks Nginx
Trisquel Belenos 7.0 x86_64
Esimene tööjaam, millelt kogutakse logisi: syslog ja auth.log.
Tööjaamal on graafiline liides LXDE. Paigladatud on "Trisquel Mini"
Ip addr:
eth0: 192.168.122.20/24 (DHCP)
eth1: 192.168.56.111/24 (Static)
FQDN: logiklient1.minudomeen.midagi
CPU: 1x
MEM: 1024M
Video: QXL 64M
Disk:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 8G 0 disk └─vda1 253:1 0 8G 0 part /
CentOS 6.6 x86_64
Server, millelt kogutakse sama tüüpi logisid.
Logid(nende nimed) on erinevad, demonstreerimaks erinevusi Debianiliste ja Redhatiliste erinevust.
Ip addr:
eth0: 192.168.56.221 (DHCP)
eth1: 192.168.56.112 (Static)
FQDN: logiklient2.minudomeen.midagi
CPU: 1x
Video: Cirrus Logic 9M
Disk:
vda 252:0 0 8G 0 disk ├─vda1 252:1 0 500M 0 part /boot └─vda2 252:2 0 7.5G 0 part ├─VolGroup-lv_root (dm-0) 253:0 0 6.7G 0 lvm / └─VolGroup-lv_swap (dm-1) 253:1 0 816M 0 lvm [SWAP]
Paigaldus ja konfigureerimine
NB! Kõik käsureategevused on läbi viidud juurkasutaja õigustes (root).
CentOS puhul saab kasutada ka su, kuid tavakasutaja saab kirjeldada ära sudojate failis, mis võimaldab juurkasutajaks eskaleeruda tavakasutaja parooliga.
Selleks:
<tekstiredaktor> /etc/sudores |
või
visudo |
(avab sudojate faili programmiga vi).
Lisa polkki ## Allow root to run any commands anywhere:
<sinuusername> ALL=(ALL) ALL |
Logiserver
Java
Siin juhendis kasutatakse vaba java keskkonda. Üldiselt on see distributsioonide repositooriumites olemas, seega pole vaja alla laadida pakkfaile ega nõustuda kasutajatingimustega.
apt-get install openjdk-7-jre-headless |
Elasticsearch
Siin juhendis kasutatakse elasticsearch versioon 1.1.1, kuna see on soovitav versioon logstash 1.4.2'le.
Lisa elasticsearch repositooriumi apt-võti:
wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add - |
Lisa ka elasticsearch varamu(käsk uuendab tarkvaravaramute nimekirja):
echo 'deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main' > /etc/apt/sources.list.d/elasticsearch.list && apt-get update |
Paigalda elasticsearch(v1.1.1.)
apt-get install elasticsearch=1.1.1 |
Turvalisuse suurendamiseks keela skriptide dünaamilise koostamise. Skripte saab juurde lisada eraldi kaustast (sama põhimõte nagu httpd/apache konfiguratsiooni nö includemine)
echo 'script.disable_dynamic: true' >> /etc/elasticsearch/elasticsearch.yml |
Muuda elasticsearch teenus automaatselt käivituvaks(käsuga ühtlasi käivitatakse elasticsearch teenus).
update-rc.d elasticsearch defaults 95 10 && service elasticsearch start |
Kibana
Siin juhendis on kasutaud kibana versioon 3.0.1, sest see on soovitatav versioon logstash 1.4.2'le.
Lae alla kibana tarpakk.
wget "https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz" -O /tmp/kibana.tgz |
Loo httpd/apache veebiruudu kaust ja paki kibana sinna lahti.
mkdir -p /var/www && tar -xzvf /tmp/kibana.tgz -C /var/www/ |
Konfigureeri Kibana kasutama õiget veebiruutu
<tekstiredaktor> /var/www/kibana-3.0.1/config.js |
Seal muuda konfiguratsiooniparameeter
+elasticsearch: {server: "http://localhost:9200", withCredentials: true}+
selliseks nagu süsteemis vaja
+elasticsearch: {server: "http://<SINU SERVERI FQDN>:<KIBANA ACCESS PORT>", withCredentials: true}+
Juhendi looja näites on sätitud kibana järgmiselt: <Serveri fqdn> ja port 80, selleks, et veebilehitsejast saada kibanale ligi läbi pordi 80.
+elasticsearch: {server: "http://logiserver.minudomeen.midagi:80", withCredentials: true}+
Nginx
Paigala nginx
apt-get install nginx |
Lae alla nginx kibana sample konfiguratsioonifail kibana githubist:
NB! Käsk kirjutab üle NGINX tavaveebikonfi, kui tahad seda alles hoida, siis tee sellest tagavarakoopia!
wget https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf -O /etc/nginx/sites-available/default |
Muuda äsja allalaetud faili konfiguratsiooni:
<tekstiredaktor> /etc/nginx/sites-available/default |
Muuda parameetrid vastavalt vajadusele:
server_name kibana.myhost.org; root /usr/share/kibana3;
Juhendi autori näite puhul:
server_name logiserver.minudomeen.midagi; root /var/www/kibana-3.0.1;
Paigalda parooli genereerimise jaoks vajalik apache2-utils pakk:
apt-get install apache2-utils |
Genereeri kasutajanimi ja parool kibana veebirakendusele
htpasswd -c /etc/nginx/conf.d/<kibanaADDR>.htpasswd <USER> |
Juhendi autori näite puhul
htpasswd -c /etc/nginx/conf.d/logiserver.minudomeen.midagi.htpasswd student |
Taaskäivita nginx teenus
service nginx restart |
Testi tulemust, mine veebilehitsejaga:
http://<sinu logiserveri fqdn> |
Juhendi autoril on Trisquel GNU/Linux virtuaalmasinas graafiline keskkond ja kohalik nimelahendus, seega test sai läbi viidud eelmainitud masinas
http://logiserver.minudomeen.midagi |
Tulemuseks peab olema kibana tervitusleht.
Logstash
Lisa elasticsearch logstash varamu (käsk uuendab ka varamunimekirja)
echo 'deb http://packages.elasticsearch.org/logstash/1.4/debian stable main' > /etc/apt/sources.list.d/logstash.list && apt-get update |
Paigalda logstash
apt-get install logstash=1.4.2-1-2c0f5a1 |
Logstashile SSL sertifikaatide genereerimine
Esmalt loo sertifikaatide hoiustamiseks kaustad
mkdir -p /etc/pki/tls/certs && mkdir -p /etc/pki/tls/private |
Genereeri vajalik võti ja sertifikaat, sertifikaati kasutatakse hiljem logiserveri ja logitavate serveri vahel usalduse tekitamiseks
cd /etc/pki/tls; sudo openssl req -x509 -batch -nodes -days 3650 -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt |
Muuda sertifikaat loetavaks, et seda saaks kopeerida klientidesse, mille logisi koguma hakatakse:
chmod a+r /etc/pki/tls/certs/logstash-forwarder.crt |
Konfigureeri logstash input(käsk loob uue faili)
<tekstiredaktor> /etc/logstash/conf.d/01-lumberjack-input.conf |
Konfigureeri lumberjack: mis port on avatud, mis sertifikaati ja võtit kasutatakse, et luua usaldust logstash kliendi ja serveri vahel.
input { lumberjack { port => 5000 type => "logs" ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" } }
Konfigureeri syslog filter(käsk loob uue faili):
<tekstiredaktor> /etc/logstash/conf.d/10-syslog.conf |
Loo filter, mis filtreerib syslog nimelisi logisi:
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" ] } } }
Loo lumberjack väljundi konfiguratsioon(käsk loob uue faili):
<tekstiredaktor> /etc/logstash/conf.d/30-lumberjack-output.conf |
Konfigureeri elasticsearch asukoht, localhost, kuna elasticsearch asub samas serveris mis logstash, standardväljund, mis edastab informatsiooni standardväljundisse tavasätetes logstashi käsitsi käivitades suunatakse rubydebug'i[1]
output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Käivita logstash teenus, testimaks, kas siiani on kõig õigelt konfigureeritud
service logstash start |
Kontrolli kas teenus ka käivitus:
service logstash status |
Viimase käsu väljund peab olema:
logstash is running
Kontrolli, kas porti 5000(või sinu valitud porti) kuulatakse:
ss -lntp |
Eeldusel, et teenus toimib, siis muuda see ka automaatselt käivituvaks(käsk taaskäivitab ka logstash teenuse)
update-rc.d logstash defaults 95 10 && service logstash restart |
Logiklient1
Need käsud vii läbi oma esimeses logikliendis juurkasutajana
Lisa elasticsearch varamuvõti
wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add - |
Lisa logstash-forwarder varamu(käsk uuendab ka tarkvaravaramu nimekirjad):
echo 'deb http://packages.elasticsearch.org/logstashforwarder/debian stable main' > /etc/apt/sources.list.d/logstashforwarder.list && apt-get update |
Paigalda logstash forwarder pakk
apt-get install logstash-forwarder |
Lae logstash serverist sertifikaat, mille alusel saab serveri ja kliendi vahel usalduse luua:
scp <kasutaja>@<serverIP>:<sertifikaati asukoht> <soovitud allalaadimiste kaust> |
Juhendi autori näitel:
scp student@192.168.56.110:/etc/pki/tls/certs/logstash-forwarder.crt /home/student/ |
Loo sertifikaadile kaust ning tõsta äsja allalaetud sertifikaat sinna kausta:
mkdir -p /etc/pki/tls/certs && mv /home/student/logstash-forwarder.crt /etc/pki/tls/certs/ |
Konfigureeri logstash-forwarder(käsk loob uue faili)
<tekstiredaktor> /etc/logstash-forwarder |
Lisa sinna faili:
-logiserveri ip aadress
-logstashis konfigureeritud port(kontrollida saab ss -lntp )
-sertifikaadi asukoht, mille abil usaldust serveri ja kliendi vahel luua
Selles konfiguratsioonis saadetakse logiserverisse kaht logi: syslog ja auth.log
{ "network": { "servers": [ "<logstash serveri addr>:<logstash serveri kuulatav port>" ], "timeout": 15, "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt" }, "files": [ { "paths": [ "/var/log/syslog", "/var/log/auth.log" ], "fields": { "type": "syslog" } } ] }
Juhendi autori näites
{ "network": { "servers": [ "192.168.56.110:5000" ], "timeout": 15, "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt" }, "files": [ { "paths": [ "/var/log/syslog", "/var/log/auth.log" ], "fields": { "type": "syslog" } } ] }
Käivita logstash-forwarder teenus:
service logstash-forwarder start |
Logstash-forwarder teenuse automaatkäivitus süsteemi käivitumise ajal(käsk taaskäivitab ka hetkel töötava logstash forwarder teenuse):
update-rc.d logstash-forwarder defaults 95 10 && service logstash-forwarder restart |
Eelneva käsu edukuse testimiseks tuleb süsteem taaskäivitada ja vaadata kas pärast taaskäivitust logstash-forwarder teenus toimib:
Taaskäivitus
reboot |
Test
service logstash-forwarder status |
Eelneva käsu väljund peab olema:
* logstash-forwarder is running
Logiklient2
NB! Kõik käsud on käivitatud juurkasutaja õigustes(root)
Lae alla logiserveri sertifikaat, selleks et luua usaldust logiserveri ja kliendi vahel:
scp <kasutaja>@<logiserver ip addr>:<sertifikaadi asukoht> <allalaadimiste kaust> |
Juhendi koostaja näites:
scp student@192.168.56.110:/etc/pki/tls/certs/logstash-forwarder.crt /home/student/ |
Loo sertifikaadile kaust ja tõsta see sinna:
mkdir -p /etc/pki/tls/certs/ && mv /home/student/logstash-forwarder.crt /etc/pki/tls/certs/ |
Piagalda logstash-forwarder:
yum install http://packages.elasticsearch.org/logstashforwarder/centos/logstash-forwarder-0.3.1-1.x86_64.rpm |
Loo logstash-forwarder käivitusparameetrite konfiguratsioon logstash-forwarder käivitusskripti jaoks:
echo -e '# Options for the Logstash Forwarder
LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"'> /etc/sysconfig/logstash-forwarder |
Konfigureeri logstash-forwarder:
<tekstiredaktor> /etc/logstash-forwarder |
Täpsemalt vaja muuta:
-logstash serveri ip aadress
-logstash serveri port
{ "network": { "servers": [ "<logstash servri ip addr>:<logstash server port>" ], "timeout": 15, "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt" }, "files": [ { "paths": [ "/var/log/messages", "/var/log/secure" ], "fields": { "type": "syslog" } } ] }
Juhendi autori näites:
{ "network": { "servers": [ "192.168.56.110:5000" ], "timeout": 15, "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt" }, "files": [ { "paths": [ "/var/log/messages", "/var/log/secure" ], "fields": { "type": "syslog" } } ] }
Nimeta vana initscript ümber või tõsta see mujale, varunduseemsärgil:
mv /etc/init.d/logstash-forwarder /etc/init.d/logstash-forwarder.OLD |
Loo logstash-forwarder teenuse käivitusskript, skirpt saadaval ka siin[2]
<tekstiredaktor> /etc/init.d/logstash-forwarder |
#! /bin/sh
#
# chkconfig: 345 99 99
# description: logstash-forwarder
# processname: logstash-forwarder
# config: /etc/logstash-forwarder
# Source function library.
. /etc/init.d/functions
NAME=logstash-forwarder
DESC="log shipper"
PATH=/sbin:/usr/sbin:/bin:/usr/bin
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DAEMON=/opt/logstash-forwarder/bin/logstash-forwarder
DAEMON_ARGS="-config /etc/logstash-forwarder -spool-size 100 -log-to-syslog"
start() {
echo -n "Starting $NAME: "
daemon --pidfile $PIDFILE "nohup $DAEMON $DAEMON_ARGS >/dev/null 2>&1 &"
touch /var/lock/subsys/$NAME
echo $(pidofproc $NAME) > $PIDFILE
echo
return 0
}
stop() {
echo -n "Shutting down $NAME: "
killproc -p $PIDFILE
rm -f /var/lock/subsys/$NAME
echo
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p $PIDFILE $NAME
;;
restart)
stop
start
;;
*)
echo "Usage: service $NAME {start|stop|status|restart}"
exit 1
;;
esac
exit $?
Anna äsjaloodud skriptile käivitusbitt
chmod +x /etc/init.d/logstash-forwarder |
Käivita logstash-forwarder teenus:
service logstash-forwarder start |
Muuda logstash-forwarder teenus automaatselt käivituvaks:
chkconfig --add logstash-forwarder |
chkconfig logstash-forwarder on |
Kasutatud kirjandus
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-repositories.html
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html
http://logstash.net/docs/1.4.2/configuration
http://logstash.net/docs/1.4.2/codecs/rubydebug
http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig
http://logstashbook.com/code/4/logstash_forwarder_redhat_init
https://raw.githubusercontent.com/pmq/logstash-forwarder/mirakl/logstash-forwarder.rpm.init
https://github.com/pmq/logstash-forwarder/blob/mirakl/logstash-forwarder.rpm.init
http://smuth.me/listings/logstash-forwarder/logstash-forwarder.init.html
http://smuth.me/posts/centos-logstash-forwarder-init-script.html