Top Banner
Logstash + Elasticsearch + Kibana Centralized Log server (as Splunk replacement) Marko Ojleski DevOps Engineer
38

Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Jan 26, 2015

Download

Technology

startit

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Logstash + Elasticsearch + Kibana Centralized Log server

(as Splunk replacement)

Marko Ojleski DevOps Engineer

Page 2: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

$plunk

Page 3: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Business as usual, untill…

Page 4: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

#Outage @03:00AM

Page 5: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Check logs….?!? 10 network devices

40 servers 100 logs

Page 6: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Massive RAGE

Page 7: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

tail cat

grep sed awk sort uniq

Page 8: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

and looots of |

Page 9: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

tail -10000 access_log | awk '{print $1}' | sort | uniq -c | sort -n

Page 10: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

it’s just too much

Page 11: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

1. collect data 2. parse/filter 3. send data

Logstash written in JRuby Author: Jordan Sissel

Page 12: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

output

parse/filter

input

Page 13: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

1. collect data

30+ inputs

Page 14: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Logstash input

1. collect data

file syslog tcp udp zmq

redis log4j

Page 15: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Log shippers

Logstash Beaver (Python) Lumberjack (Go)

Woodchuck (Ruby) Nxlog (C)

Page 16: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Sample conf

input { tcp { type => “server1" host => "192.168.1.1" port => "5555" }

Page 17: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

2. parse/filter

40+ filters

Page 18: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Logstash filters

2. parse/filter

grok

grep

json xml

csv

geoip

mutate key/value

Page 19: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

REGEX pattern collection

Page 20: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

Page 21: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

(?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-

9]{1,2}))(?![0-9])

Page 22: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

(?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-

9]{1,2}))(?![0-9])

IP

Page 23: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup
Page 24: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=( $!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;

$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++ ;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`

Page 25: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=( $!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;

$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++ ;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`

Just another Perl hacker.

Page 26: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

120+ regex patterns

USERNAME IP

HOSTNAME SYSLOGTIMESTAMP

LOGLEVEL etc…

Page 27: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

2.10.146.54 - 2013-12-01T13:37:57Z - some really boring message

Page 28: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

2.10.146.54 - 2013-12-01T13:37:57Z - some really boring message

%{IP:client} - %{TIMESTAMP_ISO8601:time} - %{GREEDYDATA:message}

Page 29: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

client => 2.10.146.54 time => 2013-12-01T13:37:57Z message = > some really boring message

Page 30: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Grok filter

input { tcp { type => “server1" host => "192.168.1.1" port => "5555" }

filter { if [type] == “server1" { grok { match => { "message" => "%{IP:client} - %{TIMESTAMP_ISO8601:time} - %{GREEDYDATA:message} "} } }

Page 31: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

3. send data

50+ outputs

Page 32: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Logstash output

3. send data

stdout

elastic redis mongo zmq tcp

statsd

Page 33: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

1. RESTful api 2. JSON-oriented 3. Horizontal scale 4. HA 5. Full Text search 6. Based on Lucene

Elasticsearch Distributed RESTful

search server

Page 34: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Logstash => elasticsearch

input { tcp { type => “server1" host => "192.168.1.1" port => "5555" } filter { if [type] == “server1" { grok { match => { "message" => "%{IP:client} - %{TIMESTAMP_ISO8601:time} - %{GREEDYDATA:message} "} } } output { elasticsearch {} }

Page 35: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

1. Clean and simple UI 2. Fully customizable 3. Bootstrap based 4. Old version running on Ruby 5. Milestone 3 fully rewritten in HTML/Angular.js

Kibana Awesome Elasticsearch

Web Frontend to search/graph

Page 36: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Real Life Scenarios

Page 37: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Scenario 1

L2 switch

Cisco ASA

L3 switch

Syslog broker (lightweight shipper)

Logstash (main log server)

Elasticsearch

Kibana

UDP

UDP

UDP

Page 38: Logstash + Elasticsearch + Kibana Presentation on Startit Tech Meetup

Scenario 2

Apache (lightweight shipper)

IIS (lightweight shipper)

Jboss (lightweight shipper)

Logstash (main log server)

Elasticsearch

Kibana

TCP

TCP

TCP