Просмотр Архивных Журналов Apache С Помощью Logstash+Elastisearch+Kibana.

Привет. Не так давно передо мной встала задача перебрать старые логи Apache. Необходимо было сделать выборку нескольких IP-адресов, найти какие-то аномалии и попытки SQL-инъекций.

Логов было не так много, около миллиона строк, и все легко можно было сделать с помощью стандартного набора grap-awk-uniq-wc и т.п.

Поскольку я уже некоторое время (более года) использую комбинацию Logstash-Elasticsearch-Kibana для анализа и просмотра всевозможных логов, я решил использовать ее в данной ситуации.

Краткое описание основных компонентов системы.

Логсташ — бесплатная программа с открытым исходным кодом на Java для сбора и нормализации журналов.

Может получать логи либо из локальных файлов, либо через порты TCP/UDP. На момент написания имеется 26 различных входных фильтров.

Есть даже модуль ввода для сбора сообщений из твиттера или irc. Эластичный поиск — бесплатный поисковый сервер с открытым исходным кодом, основанный на Apache Lucene. Быстрый, легко настраиваемый и легко масштабируемый.

Кибана — веб-интерфейс, написанный на Ruby, для отображения данных из Elasticsearch. Простая настройка, но много функций - поиск, графики, стрим.



1. Эластичный поиск

1.1 Загрузите Elasticsearch (размер 16 МБ): Важно отметить, что для Logstash версии 1.1.9 Elasticsearch должен быть версии 0.20.2.
 
 
 
 
 
 
 
 
 
  # wget download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.2.tar.gz 
1.2 Распакуйте файл: # tar -zxf elasticsearch-0.20.2.tar.gz Желающие удивить окружающих могут добавить клавишу «v» :) 1.3 По большому счету Elasticsearch можно запустить с заводскими настройками.

Но я все равно меняю некоторые параметры.

Зайдите в ваш любимый текстовый редактор в файл настроек: # vi elasticsearch-0.20.2/config/elasticsearch.yml Список моих изменений для автономного решения: cluster.name: logs index.number_of_replicas: 0 path.data: /elasticsearch/elasticsearch-0.20.2/data path.work: /elasticsearch/elasticsearch-0.20.2/work path.logs: /elasticsearch/elasticsearch-0.20.2/logs bootstrap.mlockall: true discovery.zen.ping.multicast.enabled: false Перед запуском Elasticsearch убедитесь, что каталоги, указанные в path.data, path.work и path.logs, существуют. 1.4 Запустите Elasticsearch в приоритетном режиме, чтобы убедиться, что сервер работает корректно: # .

/bin/elasticsearch -f Если мы видим такую строку, это означает, что сервер запустился [2013-01-11 1151:35,160][INFO ][node ] [Virgo] {0.20.2}[17620]: started 1.5 Чтобы запустить Elasticsearch в фоновом (демонном) режиме, достаточно удалить ключ " " # .

/bin/elasticsearch Если ваш сервер имеет два TCP-порта 9200 и 9300 в СЛУШАТЬ , то это означает, что Elasticsearch готов к работе.





2. Логсташ

2.1 Загрузите последнюю версию Logstash 1.1.9 (размер 60 МБ) # wget logstash.objects.dreamhost.com/release/logstash-1.1.9-flatjar.jar 2.2 Создайте файл конфигурации (apache.conf) для приема архивных журналов Apache, нормализуйте их и введите в базу данных Elasticsearch: input {

tcp {

type => "apache-access"

port => 3338

}

}

filter {

grok {

type => "apache-access"

pattern => "%{COMBINEDAPACHELOG}"

}

date {

type => "apache-access"

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

}

}

output {

elasticsearch {

embedded => false

cluster => logs

host => "172.28.2.2"

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

type => "apache-access"

max_inflight_requests => 500

}

}

Краткое описание некоторых параметров: port => 3338 В нашем случае Logstash будет прослушивать TCP-порт 3338. Мы будем отправлять журналы Apache в netcat. cluster => logs указываем имя кластера, которое мы вписали в имя_кластера: в настройках Elasticsearch host => "172.28.2.2" IP-адрес, на котором работает Elasticsearch index => "apache-%{+YYYY.MM}" в моем случае ежедневных логов Apache не так много, около 40 000, поэтому месячного индекса вполне достаточно.

Если в день логов 500 000 и более, то целесообразнее создать ежедневный индекс.

"apache-%{+ГГГГ.

ММ.

дд}" 2.3 Запуск Логсташа # java -Xmx64m -jar logstash-1.1.9-flatjar.jar agent -f .

/apache.conf Проверяем, что Logstash запущен: # netstat -nat |grep 3338 Если порт 3338 присутствует, Logstash готов получать логи.

2.4 Начинаем отправлять старые логи на apache Logstash # gunzip -c archived.apache.log.gz |nc 127.0.0.1 3338 Насколько быстро загружаются все логи, зависит от многих параметров — процессора, оперативной памяти, количества логов.

В моем случае 600 тысяч строк логов были полностью загружены в базу за 4 минуты.

Таким образом, ваш пробег может отличаться.

2.5 Пока идет процесс загрузки логов, вы можете проверить, включены ли данные в базу данных Elasticsearch. Для этого введите в браузере elasticsearch_ip :9200/_statusЭpretty=true , если вы обнаружите такие строки: "index" : "apache-2011.09" Это означает, что все работает так, как ожидалось.





3. Кибана

3.1 Установите Кибану: git clone --branch=kibana-ruby github.com/rashidkpc/Kibana.git cd Kibana gem install bundler bundle install Если вы находитесь за прокси-сервером, то перед командой «git clone.» укажите свой прокси-сервер: git config --global http.proxy proxy.domain.com:3128 3.2 Конфигурация Кибаны # vi KibanaConfig.rb Настройки, которые, возможно, потребуется изменить: Elasticsearch = "localhost:9200" KibanaPort = 5601 KibanaHost = '172.28.2.2' Smart_index_pattern = 'apache-%Y.%m' Smart_index_step = 2592000 3.3 Запуск Кибаны # ruby kibana.rb После успешного запуска на экране должен появиться следующий текст: == Sinatra/1.3.3 has taken the stage on 5601 for development with backup from Thin >> Thin web server (v1.5.0 codename Knife) >> Maximum connections set to 1024 >> Listening on 172.28.21.21:5601, CTRL+C to stop 3.4 Приступаем к просмотру логов Введите адрес в браузере http://172.28.21.21:5601 и получаем удобный, быстрый интерфейс для просмотра старых логов апача.

Для тех, кто хочет увидеть, что такое Kibana+Logsatsh+Elasticsearch, есть демо-страница.

http://demo.logstash.net/ Спасибо за внимание, Теги: #*nix #Системное администрирование #Apache #elasticsearch #kibana #logs #logstash

Вместе с данным постом часто просматривают: