Если в двух словах, Elasticsearch предоставляет механизм поиска, Kibana — веб-интерфейс для работы с Elasticsearch, Logstash — инструмент для сбора логов и их передачи в Elasticsearch. Таким образом, связка Elasticsearch + Kibana + Logstash (или ELK Stack) является инструментом по сбору и хранению журналов операционных систем. При этом поддерживаются разные платформы (Windows, Linux, BSD).
В данной инструкции мы рассмотрим пример установки серверной части ELK на Linux CentOS. Также мы настроим сбор логов с CentOS, Ubuntu, Windows.
Прежде чем начать, подготовим к установке и настройке наш сервер.
В процессе установки пакетов нам понадобиться скачивать установочные файлы. Для этого в системе должен быть установлен wget:
yum install wget
Открываем порты для работы ELK:
firewall-cmd –permanent –add-port={5044,5601}/tcp
firewall-cmd –reload
где:
Отключаем SELinux двумя командами:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
* первая команда выключит систему безопасности до перезагрузки сервера, вторая — навсегда.
Все программные продукты стека ELK разработаны на Java, поэтому не будут работать без соответствующей платформы на сервере. Для ее установки необходимо загрузить дистрибутив с сайта Oracle и выполнить его установку.
Переходим на страницу загрузки Java — на открывшейся странице принимаем лицензионное соглашение:
После появятся ссылки на платформу — кликаем по ссылке для скачивания RPM пакета:
Нас перебросит на страницу ввода логина и пароля — необходимо авторизоваться или зарегистрироваться. После начнется процесс загрузки пакета, и когда он завершится, перекидываем файл на сервер CentOS, например, при помощи WinSCP.
Если у нас нет аккаунта на портале Oracle и нет возможности его зарегистрировать, то можно скачать более раннюю версию java командой:curl -L -C – -b “oraclelicense=accept-securebackup-cookie” -O ‘http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm’
Устанавливаем скачанный пакет командой:
rpm -ivh jdk-*
После окончания установки можно ввести команду:
java -version
Она должна вернуть, примерно, следующее:
openjdk version “1.8.0_212”OpenJDK Runtime Environment (build 1.8.0_212-b04)OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
Переходим на страницу загрузки эластика и копируем ссылку на последнюю версию пакета RPM:
… и скачиваем по ней сам пакет:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-x86_64.rpm
* в моем случае была версия 7.3.2.
После устанавливаем эластик на наш сервер:
rpm -ivh elasticsearch-*
Разрешаем автозапуск сервиса и запускаем его:
systemctl enable elasticsearch
systemctl start elasticsearch
Переходим на страницу загрузки Kibana и скачиваем ссылку на последнюю вервию пакета RPM:
… и скачиваем по ней пакет для установки kibana:
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.2-x86_64.rpm
Устанавливаем приложение:
rpm -ivh kibana-*
Открываем на редактирование конфигурационный файл:
vi /etc/kibana/kibana.yml
Редактируем параметр host:
server.host: 192.168.1.10
* в данном примере мы говорим, что сервер должен слушать на интерфейсе 192.168.1.10.
Разрешаем автозапуск Kibana и запускаем ее:
systemctl enable kibana
systemctl start kibana
Открываем браузер и переходим по ссылке http://<IP-адрес сервера>:5601. Если мы увидим сообщение «kibana not ready yet», просто ждем создания индекса (на это может уйти до 10 минут). После снова пробуем открыть страницу.
Мы должны увидеть страницу приветствия с заголовком «Welcome to Kibana».
Процесс установки Logstash аналогичен — переходим на страницу загрузки программного продукта, копируем ссылку на пакет RPM:
Скачиваем пакет на нашем сервере:
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.rpm
… и устанавливаем его:
rpm -ivh logstash-*
Разрешаем автозапуск и стартуем сервис:
systemctl enable logstash
systemctl start logstash
Настройки для логстэша хранятся в каталоге /etc/logstash/conf.d в файлах формата JSON. Для конфигурации используются следующие секции:
Для каждой из них мы создадим свой файл.
vi /etc/logstash/conf.d/input.conf
input { beats { port => 5044 }}
* в данном примере мы настроили logstash для приема логов на порту 5044.
vi /etc/logstash/conf.d/filter.conf
filter { if [type] == “syslog” { grok { match => { “message” => “%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}” } add_field => [ “received_at”, “%{@timestamp}” ] add_field => [ “received_from”, “%{host}” ] } date { match => [ “syslog_timestamp”, “MMM d HH:mm:ss”, “MMM dd HH:mm:ss” ] } }}
vi /etc/logstash/conf.d/output.conf
output { elasticsearch { hosts => [“localhost:9200”] hosts => “localhost:9200” manage_template => false index => “%{[@metadata][beat]}-%{+YYYY.MM.dd}” document_type => “%{[@metadata][type]}” }}
Перезапускаем сервис logstash:
systemctl restart logstash
Немного подождем — приложению нужно около 1 минуты, чтобы запуститься. После, введя команду:
ss -tunlp | grep 5044
… мы увидим что-то на подобие:
tcp LISTEN 0 128 :::5044 :::* users:((“java”,pid=11745,fd=114))
Сервис запустился и готов принимать логи.
Для отправки логов на сервер, мы будем использовать пакет Filebeat. Он поддерживается для различных систем — Linux, Windows, Mac. Мы разберем процедуру установки и настройки для первых двух.
Инструкция подходит для CentOS / Red Hat / Fedora. Переходим на страницу загрузки Filebeat — копируем ссылку на установочный пакет:
Используя скопированную ссылку, скачиваем пакет на сервере:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.2-x86_64.rpm
* если система вернет ошибку, устанавливаем wget командой yum install wget
После устанавливаем пакет:
rpm -ivh filebeat-*
Инструкция подходит для Ubuntu / Debian. Переходим на страницу загрузки Filebeat — копируем ссылку на установочный пакет:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.0-amd64.deb
dpkg -i filebeat-*
Переходим на страницу загрузки Filebeat — скачиваем архив для Windows:
Распаковываем его в папку C:\Program Files (где C: — диск, на котором установлена система).
Открываем Powershell и вводим команду:
set-executionpolicy unrestricted
На запрос «Вы хотите изменить политику выполнения?» отвечаем утвердительно:
(значением по умолчанию является “N”):Y
Переходим в каталог с Filebeat:
cd “C:\Program Files\Filebeat\”
… и запускаем скрипт установки сервиса:
.\install-service-filebeat.ps1
Открываем конфигурационный файл для filebeat.
а) в Linux
vi /etc/filebeat/filebeat.yml
б) в Windows открываем файл filebeat.yml любым текстовым редактором (сам файл находится в каталоге, который мы распаковали скаченный архив).
Находим раздел filebeat.inputs, в нем «type: log». Нам интересны две опции — enabled и paths:
… enabled: true … paths: – /var/log/*.log #- c:\programdata\elasticsearch\logs\* – /var/log/secure – /var/log/messages…
* в данном примере мы включили опцию сбора лога (enabled: true) и добавили отправку логов безопасности (/var/log/secure) и системных событий (/var/log/messages).* для Windows пути будут другие, например, C:\Windows\*.log
Находим опцию output.elasticsearch и комментируем 2 строки:
#output.elasticsearch: # Array of hosts to connect to.# hosts: [“localhost:9200”]
* так как мы собираемся отправлять логи через Logstash, нам они будут мешать.
Находим настройку отправки лога в Logstash и снимаем комментарии, меняем адрес сервера logstash и добавляем строки с template — должно получиться:
output.logstash: # The Logstash hosts hosts: [“192.168.1.10:5044”] template.name: “filebeat” template.path: “filebeat.template.json” template.overwrite: false
* где 192.168.1.10 — адрес, на котором крутится наш сервер.
Разрешаем автозапуск filebeat и стартуем сервис:
systemctl enable filebeat
systemctl start filebeat
Открываем наш веб-интерфейс с кибаной и переходим в разделы Management – Index Patterns:
В окне справа кликаем по Create Index Pattern:
В строке ввода текста вводим filebeat-*:
* filebeat — это значение параметра template.name, которое мы задавали на стадии настройки filebeat.
… и нажимаем Next Step.
В поле «Time field name» выбираем значение @timestamp и нажимаем Create index pattern:
Разберем пример удаления логов, которые старше 30 дней. Для этого будем использовать Elasticsearch Curator. Для установки последнего переходим на страницу Curator Reference, выбираем текущую версию программного продукта и кликаем по Installation:
В открывшемся окне переходим на нужную инструкцию по установки (так как у нас CentOS, выбираем YUM Repository):
В открывшемся окне следуем инструкции — в моем случае, версия была 5.8.
Загружаем и устанавливаем публичный gpg-ключ, которым подписаны пакеты добавляемого репозитория:
rpm –import https://packages.elastic.co/GPG-KEY-elasticsearch
Создаем файл репозитория:
vi /etc/yum.repos.d/curator.repo
[curator-5]name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packagesbaseurl=https://packages.elastic.co/curator/5/centos/7gpgcheck=1gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearchenabled=1
* на момент написания статьи уже вышла версия CentOS 8, но куратор был только для 7. Вполне возможно, что в ближайшее время появится curator для новой версии операционной системы.
Выполняем установку командой yum:
yum install elasticsearch-curator
После установки куратора, создаем каталог для конфигурационных файлов:
mkdir /etc/curator
Создаем конфигурационный файл config.yml:
vi /etc/curator/config.yml
client: hosts: – 127.0.0.1 port: 9200 url_prefix: use_ssl: False certificate: client_cert: client_key: ssl_no_validate: False http_auth: timeout: 30 master_only: False
* в данном файле нас интересует настройка hosts — мы указали, что curator должен подключаться к elasticsearch на локальном хосте (127.0.0.1) порту 9200.
vi /etc/curator/action.yml
actions: 1: action: close description: >- Close indices older than 30 days (based on index name). options: ignore_empty_list: True delete_aliases: False disable_action: False filters: – filtertype: pattern kind: prefix value: filebeat- – filtertype: age source: name direction: older timestring: ‘%Y.%m.%d’ unit: days unit_count: 30
2: action: delete_indices description: >- Delete indices older than 30 days (based on index name). options: ignore_empty_list: True disable_action: False filters: – filtertype: pattern kind: prefix value: filebeat- – filtertype: age source: name direction: older timestring: ‘%Y.%m.%d’ unit: days unit_count: 30
Запускаем curator для удаления устаревших логов:
curator –config /etc/curator/config.yml /etc/curator/action.yml
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies