Система ELK состоит из трех основных компонентов:
- Logstash — система принимающая данные, фильтрующая их и передающая их дальше.
- Elasticsearch — NoSQL база данных, которая хранит информацию и осуществляет по ней поиск.
- Kibana — служит для визуального представления данных, хранящихся в Elasticsearch.
В данном мануале я рассматриваю базовую настройку стека ELK.
В качестве сервера была выбрана такая конфигурация:
OS: Centos 7 minimal
Proc: 2 ядря
Ram: 4 Gb
HDD: 50 Gb
Во время установки настраиваем сеть, время, создаем пользователя.
Установку начнем с обновления системы:
# yum -y update
Далее добавим EPEL репозитарий:
# yum -y install epel-release
Для удобства работы я устанавливаю некоторые пакеты:
yum -y install net-tools vim mc wget unzip
Дальше пропишите правильные имена в файлы /etc/hosts и /etc/hostname
Установка Java.
Elasticsearch и Logstash для работы требуют Java, поэтому следующим шагом установим её.
На текущий момент последняя версия Java 8 Update 102
# cd ~# mkdir tmp# cd ~/tmp# wget --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-linux-x64.rpm# yum localinstall jdk-8u102-linux-x64.rpm
Проверим
# java -versionjava version «1.8.0_102»Java(TM) SE Runtime Environment (build 1.8.0_102-b14)Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Установка Elasticsearch.
Добавим репозиторий:
# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch# vim /etc/yum.repos.d/elasticsearch.repo
Вставляем следующие строчки:
[elasticsearch]name=Elasticsearch repositorybaseurl=http://packages.elastic.co/elasticsearch/2.x/centosgpgcheck=1gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearchenabled=1
сохраняем и выходим.
Далее установим сам elasticsearch:
# yum -y install elasticsearch
После установки отредактируем файл с настройками:
# vim /etc/elasticsearch/elasticsearch.yml
У меня он выглядит так:
Добавим elasticsearch в автозагрузку и запустим его:
# systemctl enable elasticsearch# systemctl start elasticsearch
Проверим его работоспособность:
# curl -X GET http://localhost:9200{«name» : «elk»,«cluster_name» : «elk.corp.ru»,«version» : {«number» : «2.4.0»,«build_hash» : «ce9f0c7394dee074091dd1bc4e9469251181fc55»,«build_timestamp» : «2016-08-29T09:14:17Z»,«build_snapshot» : false,«lucene_version» : «5.5.2»},«tagline» : «You Know, for Search»}
Установка Logstash.
Добавим репозиторий:
# vim /etc/yum.repos.d/logstash.repo
Вставляем следующие строчки:
[logstash-2.x]name=Logstash repository for 2.x.x packagesbaseurl=https://packages.elastic.co/logstash/2.4/centosgpgcheck=1gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearchenabled=1
сохраняем и выходим.
Устанавливаем logstash
# yum -y install logstash
Перейдем к настройке logstash.
В каталоге /etc/logstash/conf.d/ создадим файл с конфигом:
# vim /etc/logstash/conf.d/config.conf
Этот файл будет состоять из трех основных секций:
1) input — Это порты и протоколы, которые слушает logstash и соответственно принимает данные.
2) filter — В этой секции могут проводиться какие-либо действия с принятой информацией (выборка, модификация и т.д.)
3) output — В этой секции прописываются параметры выгрузки полученной информации, например в нашем случае это будет передача её в elasticsearch.
Рассмотрим простейший вариант — получение данных по syslog и передача их в elasticsearch. Так будет выглядеть файл config.conf :
input {udp {port => 5514type => «syslog»}}output {elasticsearch {hosts => [«localhost:9200»]sniffing => truemanage_template => falseindex => «syslog-%{+YYYY.MM.dd}»document_type => «%{type}»}}
Здесь используется нестандартный порт 5514 (syslog обычно на 514), т.к. что бы открыть стандартный порт, нужно запускать logstash от root. (подробнее тут)
После любых изменений конфига logstash, делайте его проверку
# service logstash configtest
Если все ок, добавим logstash в автозагрузку и запустим его:
# systemctl enable logstash# systemctl start logstash
Немного подождав, проверим, что порт слушается
# netstat -ntulp | grep 5514udp6 0 0 :::5514 :::* 22083/java
Установка Kibana.
Добавим репозиторий:
# vim /etc/yum.repos.d/kibana.repo
Вставляем следующие строчки:
[kibana-4.6]name=Kibana repository for 4.6.x packagesbaseurl=https://packages.elastic.co/kibana/4.6/centosgpgcheck=1gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearchenabled=1
сохраняем и выходим.
Устанавливаем kibana
# yum -y install kibana
В конфиге kibana подправим одну строчку:
# vim /opt/kibana/config/kibana.yml
Ищем нужную строчку правим и раскомментируем её:
server.host: «localhost»
Далее добавим kibana в автозагрузку и запустим её:
# systemctl enable kibana# systemctl start kibana
Установка Nginx.
Для kibana нам нужен reverse proxy, поэтому установим Nginx:
# yum -y install nginx httpd-tools
Создадим пользователя для web интерфеса kibana:
# htpasswd -c /etc/nginx/htpasswd.users admin
Далее настроим Nginx
# vim /etc/nginx/nginx.conf
Создаем файл настроек виртуального хоста
# vim /etc/nginx/conf.d/elk.corp.ru.conf
server { listen 80;server_name logger.domain.com;
auth_basic «Restricted Access»;
auth_basic_user_file /etc/nginx/htpasswd.users;location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Далее добавим nginx в автозагрузку и запустим её:
# systemctl enable nginx# systemctl start nginx
Проверим работу, зайдя через браузер по ссылке:
http://elk.corp.ru
Но пока ничего тут настраивать не будем.
Установка Kibana Dashboards.
Kibana Dashboards это подготовленные представления для отображения данных с индексами Beats.
На сайте Elastic есть несколько клиентов (Windows, Linux, FileLinux и д.р.), вот для данных от них мы и установим готовые дашборды.
# cd ~/tmp/# unzip beats-dashboards-1.3.1.zip# cd beats-dashboards-1.3.1/# ./load.sh
Обновив http://elk.corp.ru увидим новые индексы.
Работу с ними я рассмотрю в будущих статьях.
На этом связку ELK можно считать установленной!
Прямо сейчас можно отправлять логи syslog на 5514 порт. Ну и в качестве примера я направлю логи с D-link маршрутизатора и покажу как создать для них новый индекс.
На маршрутизаторе я прописываю в качестве syslog сервера elk.corp.ru, порт 5514 и протокол udp.
Далее заходим на http://elk.corp.ru и создаем новый индекс.
В качестве имени пропишем: syslog-*
Так как в конфиге logstash, в блоке output мы всем логам присваивали имя, вида: syslog-%{+YYYY.MM.dd}
Это очень важный момент, т.к. если ELK не увидит у себя таких логов, то он и не даст создать индекс с таким именем.
Далее перейдем на вкладку Discover и увидим собираемые логи!