44
Не превращайте ваши логи в клинопись Ребров Андрей

Не превращайте ваши логи в клинопись

Embed Size (px)

Citation preview

Page 1: Не превращайте ваши логи в клинопись

Не превращайте ваши логи в клинопись

Ребров Андрей

Page 2: Не превращайте ваши логи в клинопись
Page 3: Не превращайте ваши логи в клинопись

Клинопись

Page 4: Не превращайте ваши логи в клинопись

Логи

Page 5: Не превращайте ваши логи в клинопись

ГДЕ РАЗНИЦА?

Page 6: Не превращайте ваши логи в клинопись

Так в чем проблема

•  Логов много

•  В логах очень много самой разной информации

•  Логи раскиданы по нескольким машинам

•  Человек не создан для чтения логов =)

Page 7: Не превращайте ваши логи в клинопись

Время инструментов!

Page 8: Не превращайте ваши логи в клинопись

•  Бесплатный инструмент

•  Собирает, парсит и хранит логи

•  Позволяет искать по логам

•  Анализирует логи

Logstash

http://logstash.net

Page 9: Не превращайте ваши логи в клинопись

Основная фишка

Много разных логов? •  syslog •  nginx access log •  application logs •  database logs

А все ли они в одном формате?

Page 10: Не превращайте ваши логи в клинопись
Page 11: Не превращайте ваши логи в клинопись

З слона Logstash

• Inputs

• Filters

• Outputs

Page 12: Не превращайте ваши логи в клинопись

http://logstash.net/docs/1.1.12/ - Весь список

Inputs •  file

•  eventlog

•  ganglia

•  heroku

•  syslog

•  tcp

Page 13: Не превращайте ваши логи в клинопись

Filters

http://logstash.net/docs/1.1.12/ - Весь список

•  anonymize

•  date

•  mutate

•  grok

•  grep

Page 14: Не превращайте ваши логи в клинопись

http://logstash.net/docs/1.1.12/ - Весь список

Outputs •  file

•  graphite

•  http

•  irc

•  email

•  zabbix

Page 15: Не превращайте ваши логи в клинопись

input  {  stdin  {  type  =>  "stdin-­‐type"}  }    output  {  stdout  {  debug  =>  true  debug_format  => "json"}  }    java  -­‐jar  logstash-­‐1.1.9-­‐monolithic.jar  agent  -­‐f logstash-­‐simple.conf    

Очень просто начать

Page 16: Не превращайте ваши логи в клинопись

Например

Page 17: Не превращайте ваши логи в клинопись

input  {  stdin  {  type  =>  "stdin-­‐type"}  }    filter  {  grok  {  type  =>  "stdin-­‐type"  pattern  => "Hello  %{DATA:message}!"  }  }    output  {  stdout  {  debug  =>  true  debug_format  => "json"}  }    java  -­‐jar  logstash-­‐1.1.9-­‐monolithic.jar  agent  -­‐f logstash-­‐simple.conf    

Время парсить

Page 18: Не превращайте ваши логи в клинопись

Например

Page 19: Не превращайте ваши логи в клинопись

input  {  stdin  {  type  =>  "stdin-­‐type"  }  } output  {     stdout  {  debug  =>  true  debug_format  =>  "json"  } elasticsearch  {  embedded  =>  true  }    }  

 java  -­‐jar  logstash-­‐1.1.9-­‐monolithic.jar  agent  -­‐f logstash-­‐search.conf    

Показать, все что скрыто

Page 20: Не превращайте ваши логи в клинопись

Например

Page 21: Не превращайте ваши логи в клинопись

Главное не потеряться

ElasticSearch

http://www.elasticsearch.org

Page 22: Не превращайте ваши логи в клинопись

Что такое и с чем едят

Распределенный RESTful поисковый сервер

l  «Real-time» поиск

l  RESTful API

l  Полнотекстовый поиск

l  Конфигурация в форматах YAML/JSON

Уже есть в logstash

Page 23: Не превращайте ваши логи в клинопись

Добавляем красоты

http://kibana.org

Page 24: Не превращайте ваши логи в клинопись

Читаем логи через user-friendly интерфейс

Page 25: Не превращайте ваши логи в клинопись

Test  Node  

Test  Node  

Logstash   Elas/cSearch  

Kibana  

???

Как можно все это собрать

Page 26: Не превращайте ваши логи в клинопись

Нужны почтовые голуби!

Page 27: Не превращайте ваши логи в клинопись

Logstash shippers

•  beaver - python, multiple outputs

•  woodchuck - ruby, multiple outputs

•  awesant - perl, multiple outputs supported

•  lumberjack - C, encrypted+compressed transport

•  syslog-shipper - ruby, syslog tcp

•  remote_syslog - ruby, syslog tcp/tls

•  Message::Passing - perl, multiple inputs and outputs

•  nxlog - C, multi platform including windows, tcp/udp/ssl/tls

•  logtail - perl, from flat files to redis

Page 28: Не превращайте ваши логи в клинопись

Сборка

Page 29: Не превращайте ваши логи в клинопись

Установка Lumberjack

apt-get install rubygems

gem install fpm

export PATH=$PATH:/var/lib/gems/1.8/bin

git clone https://github.com/jordansissel/ lumberjack.git

cd lumberjack

make

make deb

dpkg -i lumberjack_0.0.8_amd64.deb

Page 30: Не превращайте ваши логи в клинопись

Установка Logstash

mkdir /opt/logstash

wget https://logstash.objects.dreamhost.com/ release/logstash-1.1.9-monolithic.jar -O /opt/ logstash/logstash.jar

Page 31: Не превращайте ваши логи в клинопись

Установка Elasticsearch

wget http://download.elasticsearch.org/ elasticsearch/elasticsearch/ elasticsearch-0.20.2.tar.gz

tar -zxf elasticsearch-0.20.2.tar.gz

Page 32: Не превращайте ваши логи в клинопись

Установка Kibana

git clone --branch=kibana-ruby https://github.com/ rashidkpc/Kibana.git /opt/kibana

apt-get install rubygems libcurl4-openssl-dev

export PATH=$PATH:/var/lib/gems/1.8/bin

cd /opt/kibana

bundle install

Page 33: Не превращайте ваши логи в клинопись

Возможные проблемы с Kibana

•  ERROR: Failed to build gem native extension.

Лечится установкой каждого gem отдельного

•  no such file to load – XXX (LoadError)

gem install XXX

Page 34: Не превращайте ваши логи в клинопись

Запуск Lumberjack

/opt/lumberjack/bin/lumberjack -- host your.logstash.host --port port-for- these-logs --ssl-ca-path /etc/ssl/ logstash.pub

Для генерации ключей на logstash сервере:

openssl req -x509 -newkey rsa:2048 -keyout /etc/ ssl/logstash.key -out /etc/ssl/logstash.pub - nodes -days 365

Page 35: Не превращайте ваши логи в клинопись

Конфигурируем Logstash #1

input {  

lumberjack {    

type => "apache-access"   

port => 3338

        ssl_certificate => "/etc/ssl/logstash.pub"

      ssl_key => "/etc/ssl/logstash.key" 

}

}

Page 36: Не превращайте ваши логи в клинопись

Конфигурируем Logstash #2

filter { 

date {    

type => "apache-access"   

timestamp => "dd/MMM/yyyy:HH:mm:ss Z" 

}

}

Page 37: Не превращайте ваши логи в клинопись

Конфигурируем Logstash #3

output {  

elasticsearch {    

embedded => false   

cluster => logs    

host => "172.28.2.2"   

index => "apache-%{+YYYY.MM}"   

type => "apache-access"   

}

}

Page 38: Не превращайте ваши логи в клинопись

Запуск Logstash

/usr/bin/java -jar /opt/logstash/logstash.jar agent -f <path-to-your.conf> -l <path-to-where-

you-want-the.log>

Page 39: Не превращайте ваши логи в клинопись

Конфигурируем Elasticsearch

cluster.name: logs

index.number_of_replicas: 0

path.data: /elasticsearch/data

path.work: /elasticsearch/work

path.logs: /elasticsearch/logs

bootstrap.mlockall: true

discovery.zen.ping.multicast.enabled: false

Page 40: Не превращайте ваши логи в клинопись

Запускаем Elasticsearch

./bin/elasticsearch –f

или в фоне

./bin/elasticsearch

Page 41: Не превращайте ваши логи в клинопись

Запускаем Kibana

ruby kibana.rb

Page 42: Не превращайте ваши логи в клинопись

Profit!

Page 43: Не превращайте ваши логи в клинопись

Полезные ссылки l  http://www.logstashbook.com/code/

l  https://github.com/logstash/logstash/blob/v1.1.12/patterns/grok-patterns

l  http://grokdebug.herokuapp.com/

l  http://www.infoq.com/articles/review-the-logstash-booл

l  http://www.elasticsearch.org/tutorials/using-elasticsearch-for-logs/

l  https://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/queryparsersyntax.html

l  http://www.elasticsearch.org/tutorials/elasticsearch-on-ec2/

l  http://blog.lusis.org/blog/2012/01/31/load-balancing-logstash-with-amqp/

Page 44: Не превращайте ваши логи в клинопись

Twitter

@andrebrov

E-mail

[email protected]

Skype

rebrov.andrey

Вопросы?