A jelenlegi leírás a telepítést csak felületesen érinti, a példában Debian 7 64bit Linuxot használtam. A leírás célja, hogy gondolatébresztő legyen egy központi loggyűjtő kiválasztása során.
A rendszer fő részei
apt-get install syslog-ng
Az alábbi konfigurációval a sztenderd syslog-ng konfigurációt a jelenlegi példához szükséges beállításokkal kiegészíthetjük:
cat /etc/syslog-ng/conf.d/01-logstash.conf
source s_network {
tcp();
udp();
};
destination d_logstash {
udp("127.0.0.1" port(10000) localport(999));
};
log {
source(s_network);
destination(d_logstash);
};
wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add -
echo " deb http://packages.elasticsearch.org/logstash/1.4/debian stable main" > /etc/apt/sources.list.d/logstash.list
apt-get update
apt-get install logstash
__Logok fogadása
__
input {
udp {
port => 10000
type => syslog
}
}
filter {
grok {
type => "syslog"
pattern => [ "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" ]
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{@source_host}" ]
add_tag => ["Syslog"]
}
syslog_pri { }
date {
type => "syslog"
match => [ "syslog_timestamp", "MMM d HH:mm:ss.SSS","MMM d HH:mm:ss", "MMM dd HH:mm:ss.SSS","MMM dd HH:mm:ss","dd/MMM/yyyy:HH:mm:ss +0100","yyyy/MM/dd HH:mm:ss" ]
}
mutate {
type => "syslog"
exclude_tags => "_grokparsefailure"
replace => [ "@source_host", "%{syslog_hostname}" ]
replace => [ "@message", "%{syslog_message}" ]
}
mutate {
type => "syslog"
remove => [ "syslog_hostname", "syslog_message", "syslog_timestamp" , "received_from"]
}
if [syslog_facility] == "local1" or [syslog_facility] == "user-level" {
grok{
type => "syslog"
# Nginx log:
pattern => ["%{SYSLOGTIMESTAMP:syslog_timestamp} %{IPORHOST:http_host} %{IPORHOST:clientip} (%{NUMBER:bytes}|-) (%{NUMBER:user-identifier}|-) [%{HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request} (?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|"-") (%{QS:referrer}||"-")"]
}
mutate {
remove_tag => ["_grokparsefailure"]
remove_tag => ["Syslog"]
add_tag => ["Nginx"]
}
}
}
A logstash sokféle kimenetet támogat, ebben a példában a gyakran használt Elasticsearch és fájl kimenetet mutatom be:
output {
elasticsearch {
host => "localhost"
protocol => "http"
}
if [type] == "syslog" and "_grokparsefailure" in [tags] {
file { path => "/var/log/logstash/failed_syslog_events-%{+YYYY-MM-dd}.log" }
}
}
logstash --configtest -f /etc/logstash/conf.d/*
Ezt érdemes minden módosítás után megtenni, mert az indulásakor nem jelez hibát, esetleg leáll a Java processz :-).
2. A logstash számára az ulimit értéket érdemes megnövelni a /etc/init.d/logstash init szkript ulimit sorának szerkesztésével:
pl.:
ulimit -n 32768
A konfiguráció elsőre elég összetettnek tűnik, de a fenti pattern remélem segít elindulni a saját készítésében.
A mutate hasznos eszköz, mert a logokon tudunk segítségével változtatni. Itt az add_tag és remove_tag lehetőségeit használjuk.
Az egyes bejegyzésekhez tetszőlegesen lehet tag-et adni és elvenni, így a Kibana-ban ez szerint könnyű elkülöníteni a logokat.
A patternek szintaktiákja így néz ki :
%{BEJEGYZÉS_FAJTÁJA:bejegyzés neve}
A BEJEGYZÉS_FAJTÁJA mező csak meghatározott értéket vehet fel. Pontos listát nem találtam, se a /opt/logstash/patterns alatti fájlokból lehet
lesni. Mindenesetre a SYSLOGTIMESTAMP,IPORHOST, WORD,NUMBER értékekkel sokmindent le lehet fedni.
A bejegyzés neve tetszőleges lehet, pontos szabályokat itt sem találtam, de kis- nagybetűk, számok biztosan lehetnek.
A Logstash konfig innen letölthető egy köszönöm jólesik...
A telepítés szintén egyszerű (http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html):
wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add -
echo "deb http://packages.elasticsearch.org/elasticsearch/1.5/debian stable main" | > /etc/apt/sources.list.d/elasticsearch.list
apt-get update
apt-get install elasticsearch
update-rc.d elasticsearch defaults 95 10
vagy (ha nem működik a repo, mint ennek a bejegyzésnek az írása során :-) )
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.5.0.deb
dpkg -i elasticsearch-1.5.0.deb
update-rc.d elasticsearch defaults 95 10
cd /usr/share/elasticsearch/bin
./plugin -install mobz/elasticsearch-head
Így lehet elérni:
http://<Elasticsearch DB IP>:9200/_plugin/head/
Alap konfigurációval működik, az egyetlen változtatása a /etc/elasticsearch/elasticsearch.yml-ban:
discovery.zen.ping.multicast.enabled: false
wget https://download.elasticsearch.org/kibana/kibana/kibana-4.0.1-linux-x64.tar.gz
majd kitömörítettem az opt alá és egy symlinkkel fedtem el a verziót, így a verzióváltáskor ezzel már nem kell foglalkozni:
tar -xzf kibana-4.0.1-linux-x64.tar.gz
ln -s kibana-4.0.1-linux-x64 kibana
apt-get install supervisor
A logstash-web indulását akadályozzuk meg:
update-rc.d logstash-web remove
Supervidord konfig (/etc/supervisor/conf.d/kibana4.conf)
[program:Kibana4]
command = /opt/kibana/node/bin/node /opt/kibana/src/bin/kibana
directory = /opt/kibana
user = elasticsearch
autostart = true
autorestart = true
stdout_logfile = syslog
stderr_logfile = syslog
environment = CONFIG_PATH="/opt/kibana/config/kibana.yml", NODE_ENV="production"
http://
<Kibana 4 IP>
:5601
A beállításra péda:
A Discover-re kattintva láthatjuk a beérkezett és feldolgozott logokat.
Remélem hasznos volt a bejegyzés, várom a visszajelzéseket.