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

Preview:

Citation preview

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

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

Клинопись

Логи

ГДЕ РАЗНИЦА?

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

•  Логов много

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

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

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

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

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

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

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

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

Logstash

http://logstash.net

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

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

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

З слона Logstash

• Inputs

• Filters

• Outputs

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

Inputs •  file

•  eventlog

•  ganglia

•  heroku

•  syslog

•  tcp

Filters

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

•  anonymize

•  date

•  mutate

•  grok

•  grep

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

Outputs •  file

•  graphite

•  http

•  irc

•  email

•  zabbix

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    

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

Например

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    

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

Например

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    

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

Например

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

ElasticSearch

http://www.elasticsearch.org

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

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

l  «Real-time» поиск

l  RESTful API

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

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

Уже есть в logstash

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

http://kibana.org

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

Test  Node  

Test  Node  

Logstash   Elas/cSearch  

Kibana  

???

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

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

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

Сборка

Установка 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

Установка Logstash

mkdir /opt/logstash

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

Установка Elasticsearch

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

tar -zxf elasticsearch-0.20.2.tar.gz

Установка 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

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

•  ERROR: Failed to build gem native extension.

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

•  no such file to load – XXX (LoadError)

gem install XXX

Запуск 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

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

input {  

lumberjack {    

type => "apache-access"   

port => 3338

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

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

}

}

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

filter { 

date {    

type => "apache-access"   

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

}

}

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

output {  

elasticsearch {    

embedded => false   

cluster => logs    

host => "172.28.2.2"   

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

type => "apache-access"   

}

}

Запуск Logstash

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

you-want-the.log>

Конфигурируем 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

Запускаем Elasticsearch

./bin/elasticsearch –f

или в фоне

./bin/elasticsearch

Запускаем Kibana

ruby kibana.rb

Profit!

Полезные ссылки 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/

Twitter

@andrebrov

E-mail

arebrov@scrumtrek.ru

Skype

rebrov.andrey

Вопросы?

Recommended