Installere logstash på Centos 6

Fri 22 February 2013

Denne artikkelen er en trinn for trinn bruksanvisning på hvordan en kan komme igang med logstash på Centos 6. Guiden er fritt oversatt fra: http://www.logstash.net/docs/1.1.9/tutorials/getting-started-centralized

For ordens skyld lager jeg en arbeidsmappe i /root hvor jeg laster ned, bygger og tester alle komponentene. Når jeg vet at de funker flytter jeg de i tur og orden til /opt/komponentnavn.

Last ned Logstash

# wget http://logstash.objects.dreamhost.com/release/logstash-1.1.9-monolithic.jar


Last ned og pakk ut Elasticsearch


wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.5.zip

unzip elasticsearch-0.20.5.zip


Last ned og pakk ut Redis


# wget http://redis.googlecode.com/files/redis-2.6.10.tar.gz
# tar xfzv redis-2.6.10.tar.gz


Kompiler og test Redis


# make
# make test

Testen over viser at jeg mangler TCL 8

# yum install tcl
# make test

Nå har du forhåpentligvis passert alle 32 testene og kan med rimelig sikkerhet at Redis fungerer.

Vi trenger java

# yum install java-1.6.0-openjdk


Start Redis

# cd src
# ./redis-server --loglevel verbose


Start Elasticsearch

# cd bin

# ./elasticsearch -f


Konfigurer og test litt med logstash

For å teste de forskjellige delene av systemet vårt oppretter vi to konfigurasjonsfiler.

indexer.conf

input {
redis {
host => "127.0.0.1"
type => "redis-input"
# these settings should match the output of the agent
data_type => "list"
key => "logstash"

# We use json_event here since the sender is a logstash agent
format => "json_event"
}
}

output {
stdout { debug => true debug_format => "json"}

elasticsearch {
host => "127.0.0.1"
}
}

shipper.conf

input {
stdin {
type => "stdin-type"
}
}

output {
stdout { debug => true debug_format => "json"}
redis { host => "127.0.0.1" data_type => "list" key => "logstash" }
}

Vi skal nå kjøre to tester.

1: Logstash konfigurert til å videresende logger.

2: Logstash konfigurert til å samle og indeksere logger.

Vi har allerede startet de to komponentene i egne vinduer, med full debug og i forgrunnen.

1:Logstash som en shipper.

# java -jar logstash-1.1.9-monolithic.jar agent -f shipper.conf

Denne testen leser fra standard input og shipper det til Redis. Du vil se at det du skriver blir lagret i Redis.

Du kan også bruke Redis CLI for å se igjennom dataene som blir lagret.

# cd src
# ./redis-cli

redis 127.0.0.1:6379> llen logstash
(integer) 2
redis 127.0.0.1:6379> lpop logstash
"{\"@source\":\"stdin://vps.host.no/\",\"@tags\":[],\"@fields\":{},\"@timestamp\":\"2013-02-22T20:14:00.463Z\",\"@source_host\":\"vps.host.no\",\"@source_path\":\"/\",\"@message\":\"hei\",\"@type\":\"stdin-type\"}"
redis 127.0.0.1:6379> llen logstash
(integer) 1
redis 127.0.0.1:6379> lpop logstash
"{\"@source\":\"stdin://vps.host.no/\",\"@tags\":[],\"@fields\":{},\"@timestamp\":\"2013-02-22T20:14:00.471Z\",\"@source_host\":\"vps.host.no\",\"@source_path\":\"/\",\"@message\":\"tester\",\"@type\":\"stdin-type\"}"
redis 127.0.0.1:6379> exit

  • Vi leser lengden på listen
  • Poper toppen av stabelen
  • Sjekker lengden igjen
  • Poper toppen en gang til
  • Avslutter redis-cli

2: Logstash som en collector og indexer.

# java -jar logstash-1.1.9-monolithic.jar agent -f indexer.conf

Vi kobler nå til Redis og poper logstash listen. Hver gang en ny event kommer inn blir den plukket opp og sendt til Elasticsearch for indeksering.

Sjekk Elasticsearch vinduet ditt for å verifisere at Logstash kobler til ordentlig.

[2013-02-22 21:09:41,617][INFO ][cluster.service ] [Chondu the Mystic] added {[Bereet][c0u_WTuJQrizX-FjpBv6OA][inet[/311.42.312.47:9301]]{client=true, data=false},}, reason: zen-disco-receive(join from node[[Bereet][c0u_WTuJQrizX-FjpBv6OA][inet[/311.42.312.47:9301]]{client=true, data=false}])

Webgrensesnitt

Vi starter webgrenesnittet. Husk å åpne brannmuren din om du skal nå webguiet.

# java -jar logstash-1.1.9-monolithic.jar web --backend elasticsearch://127.0.0.1/

Oppsummering

Du har nå et komplett distribuert miljø kjørende på maskinen din. Dette er et rent teoretisk testmiljø og vil i praksis ikke kunne bruke til noe uten en ordentlig konfigurasjon.

I de aller fleste tilfeller vil man kjøre disse komponentene på forskjellige maskiner.

På serveren(e) som skal sende logger:

  • Last ned og kjør logstash (1: Logstash konfigurert til å videresende logger.)

På serveren som skal motta og indeksere logger:

  • Last ned og kjør Elasticsearch
  • Last ned og kjør Redis
  • Last ned og kjør Logstash (2: Logstash konfigurert til å samle og indeksere logger.)

Disse to oppsettene krever forskjellig konfigurasjon. Det vil også være greit å ha upstart script slik at du kan kjøre alt som demoner istedetfor i terminalvinduet ditt. Etterhvert vil vi du også føle behovet for å bytte ut webguiet til logstash med et litt mer robust et.

Jeg håper å få til en egen post på eksempel real world konfigurasjon om ikke lenge.