Привет. Не так давно передо мной встала задача перебрать старые логи 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.1.2 Распакуйте файл:# wget download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.2.tar.gz
# 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
-
Git: Много Полезных И Разных Хуков
19 Oct, 24 -
Установка Opencv + Cuda В Windows
19 Oct, 24 -
Apple Первой Выпустила 64-Битный Чип Arm!
19 Oct, 24 -
Вечер Механики И Математики Мгу
19 Oct, 24