Консультация Oblako.kz

Установка и настройка стека ELK на Debian 9

В больших и высоконагруженных системах анализ журнальных файлов (логов) представляется достаточно сложным делом, так как генерируется большой объем информации, иногда также и разбросанной по различным местам. Для облегчения сбора и анализа логов таких систем существуют различные продукты, одним из примеров которых является и стек ELК.

  • Поисковый движок ElasticSearch для анализа логов;
  • Logstash - демон пересылки логов, позволяет перенаправлять различные журналы для дальнейшего анализа, может фильтровать эти журналы по определенным признакам;
  • Kibana - интерфейс для анализа содержимого лог-файлов и наглядного представления полученной информации.

Обновим пакетную базу Debian используя apt-get update.

apt-get update

Предварительно установим платформу JAVA. Для Debian берём пакет openjdk и устанавливаем его через apt.

apt-get install openjdk-8-jre

Также скачаем и установим apt-transport-https - это пакет, позволяющий подключать репозитории по протоколу https (обычно репозитории подключаются через http или ftp),

apt-get install apt-transport-https

Скачаем или добавляем ключ репозитория,

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -

Создадим файл с описанием репозитория (т.е сам репозиторий).

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elk.listфзе-пуе гзвфеу

Затем обновим еще раз информацию из репозиториев, чтобы получить список доступных пакетов с учетом нового репозитория.

apt-get update

Установим интересующие нас пакеты.

apt-get install elasticsearch logstash kibana

После этого можно начинать настройку. Рассмотрим для примера настройку анализа файлов журналов локального сервера (на котором установлен стек ELK). Раскомментируем в файле /etc/elasticsearch/elasticsearch.yml строчки network.host и http.port и впишем нижеприведенные значения. Они указывают с каких хостов и по какому порту elasticsearch будет принимать соединения. В нашем случае localhost.

network.host: localhost http.port: 9200

После этого запускаем elasticsearch и включаем его в автозагрузку.

systemctl enable elasticsearch systemctl start elasticsearch

Теперь создадим правило для обработки логов Squid локального сервера для logstash.

nano /etc/logstash/conf.d/09-squid.conf

input {
file {
type => "squid"
start_position => "beginning"
path => [ "/var/log/squid/access.log" ]
}
}
filter {
if [type] == "squid" {
grok {
match => [ "message", "%{NUMBER:timestamp}\s+%{NUMBER:response_time} %{IP:src_ip}
%{WORD:squid_request_status}/%{NUMBER:http_status_code} %{NUMBER:reply_size_include_header} %{WORD:http_method} %{WORD:http_protocol}://%{HOSTNAME:dst_host}%{NOTSPACE:request_url} %{NOTSPACE:user} %{WORD:squid}/(?:-|%{IP:dst_ip}) %
{NOTSPACE:content_type}" ]
add_tag => ["squid"]
}
geoip {
source => "dst_ip"
}
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => "localhost"
}
}

Каждый файл состоит как минимум из двух разделов.

  • input - какие данные и где брать для анализа.. В данном случае это файл /var/log/messages и все файлы *.log из каталога /var/log
  • output - куда пересылать данные - в данном случае это elasticsearch на localhost (т.е на этой же машине)
  • filter необязательный раздел задающий правила фильтрации исходных данных раздела input

Теперь можно запустить logstash.

systemctl enable logstash systemctl start logstash

Последним настраивается web-интерфейс kibana. В файле /etc/kibana/kibana.yml необходимо задать как-минимум адрес на котором будет доступна kibana и url elasticsearch.

server.host: "185.125.46.34" elasticsearch.url: "http://localhost:9200"

Теперь запустим Kibana и поместим ее в автозапуск.

systemctl enable kibana systemctl start kibana

Теперь можно зайти в Kibana по указанному адресу и порту 5601. Если необходим доступ снаружи, то в брандмауэре должны быть настроены разрешения на соединение с портом 5601. http://185.125.46.34:5601

Kibana стек ELK

Последнее обновление: 27.09.2018