Установка elk (elasticsearch/logstash/kibana) в unix/linux

Установка Elastic Logstash на Ubuntu 18.04

Установка Java

Так как Logstash не поддерживает Java 9, установим Java 8.
Будем использовать установку Oracle Java сторонним скриптом от проекта webupd8.org (JRE и JDK).
В связи с тем, что Oracle изменила условия распространения своей реализации Java, в репозитории Ubuntu не содержатся компоненты Oracle Java.

Существует PPA организованный сайтом webupd8.org содержащий в себе программу, которая будет автоматически проверять версию Java на сайте Oracle и сравнивать её с версией установленной на вашем компьютере. Это позволяет обойти ограничения наложенные на распространение Oracle Java.

Проверяем наличие java:

java -version
javac -version

Чтобы добавить данный репозиторий и использовать последнюю версию Java с сайта Oracle, выполните в терминале следующие действия:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Кроме того, данный репозиторий изменяет зависимости пакетов, использующих Java, так, что становится возможным безболезненное удаление OpenJDK из системы.

Шаг 3

Проверьте установленную версию:

java -version
javac -version

Инсталятор требует подтвердить принятие лицензии, если вы хотите принять лицензию автоматически, то выполните команду:

echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

Шаг 5

Для автоматической установки переменных среды вы можете выполнить команду:

sudo apt-get install oracle-java8-set-default

Установка ElasticSearch

Для функционирования ElasticLogstash необходимо будет установить ElasticSeacrh.

Шаг 3

Перейти в эту папку, перейти в папку bin и установить elasticsearch из исходников.

./elasticserach

Шаг 3

Перейти в эту папку, и создать там конфигурационный файл logsatsh.conf
Со следующими параметрами:

input { stdin { } }
output {
  elasticsearch { hosts => "localhost:9200" }
  stdout { codec => rubydebug }}

Запустим logsatsh

bin/logstash -f logstash.conf 

Шаг 5

Проверяем, что Logstash запущен:

netstat -nat |grep 9200 

Если порт 9200 присутствует, значит Logstash готов принимать логи.

Примечание

Если вы разворачиваете ELK на VirtualBox/VMware или на любом другом продукте виртуализации ОС, у вас может возникнуть ошибка hs_err_pid3889.
Это связано с тем,что :

  • Cистема находится вне физической памяти;
  • В 32-битном режиме был достигнут предел размера процесса.

Возможные решения:

  • Уменьшить нагрузку на память в системе;
  • Увеличить физическую память;
  • Использовать 64-разрядную Java на 64-битной ОС;
  • Уменьшить размер «кучи» Java (-Xmx / -Xms);
  • Уменьшить размеры стека потоков Java (-Xss).

Установка Nginx

Добавьте репозиторий Nginx с помощью команды:

Чтобы интерфейс Kibana мог взаимодействовать с пользователем Elasticsearch (пользователь должен иметь возможность напрямую обращаться к Elasticsearch), нужно настроить Nginx как обратный прокси-сервер. Он будет проксировать запросы порта 80 на порт 9200 (который по умолчанию прослушивается Elasticsearch). Kibana предоставляет образец конфигурации сервера Nginx.

Загрузите образец конфигурационного файла Nginx из репозитория github в домашний каталог:

Откройте файл:

Найдите строку server_name и укажите в ней свой FQDN (если у вас нет домена, укажите localhost). В строке root укажите путь к установке Kibana.

Сохраните и закройте файл.

Скопируйте его в стандартный виртуальный хост Nginx:

Установите apache2-utils, чтобы получить доступ к утилите htpasswd, которая сгенерирует имя пользователя и пароль.

Сгенерируйте логин для работы в Kibana (вместо условных данных укажите свои данные):

Введите пароль и подтвердите его.

На только что созданный файл htpasswd уже есть ссылка в конфигурационном файле Nginx.

Теперь перезапустите Nginx, чтобы изменения вступили в силу:

Добавьте Nginx в автозагрузку:

Теперь доступ к Kibana можно получить по FQDN или IP-адресу сервера Logstash. Попробуйте открыть домен или IP в браузере. На экране должна появиться приветственная страница Kibana, на которой вы сможете просмотреть дашборды. Но пока что в Logstash нет никаких данных, потому инструменту Kibana нечего визуализировать.

Очистка устаревших данных

Разберем пример удаления логов, которые старше 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

name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages
baseurl=https://packages.elastic.co/curator/5/centos/7
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=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

Установка Filebeat для отправки логов в Logstash

Установим первого агента Filebeat на сервер с nginx для отправки логов веб сервера на сервер с ELK. Ставить можно как из общего репозитория, который мы подключали ранее, так и по отдельности пакеты. Как ставить — решать вам. В первом случае придется на все хосты добавлять репозиторий, но зато потом удобно обновлять пакеты. Если подключать репозиторий не хочется, можно просто скачать пакет и установить его.

Ставим на Centos.

В Debian/Ubuntu ставим так:

Или просто:

После установки рисуем примерно такой конфиг /etc/filebeat/filebeat.yml для отправки логов в logstash.

Некоторые пояснения к конфигу, так как он не совсем дефолтный и минималистичный. Я его немного модифицировал для удобства. Во-первых, я разделил логи access и error с помощью отдельного поля type, куда записываю соответствующий тип лога: nginx_access или nginx_error. В зависимости от типа меняются правила обработки в logstash. Плюс, я включил мониторинг и для этого указал адрес elastichsearch, куда filebeat передает данные мониторинга напрямую. Показываю это для вас просто с целью продемонстрировать возможность. У меня везде отдельно работает мониторинг на zabbix, так что большого смысла в отдельном мониторинге нет. Но вы посмотрите на него, возможно вам он пригодится. Чтобы мониторинг работал, его надо активировать в соответствующем разделе в Kibana — Monitoring. И не забудьте запустить elasticsearch на внешнем интерфейсе. В первоначальной настройке я указал слушать только локальный интерфейс.

Запускаем filebeat и добавляем в автозагрузку.

Проверяйте лог по адресу /var/log/filebeat/filebeat. Он весьма информативен. Если все в порядке, увидите список всех логов в директории /var/log/nginx, которые нашел filebeat и начал готовить к отправке. Если все сделали правильно, то данные уже потекли в elasticsearch. Мы их можем посмотреть в Kibana. Для этого открываем web интерфейс и переходим в раздел Discover. Так как там еще нет индекса, нас перенаправит в раздел Managemet, где мы сможем его добавить.

Вы должны увидеть индекс, который начал заливать logstash в elasticsearch. В поле Index pattern введите nginx-* и нажмите Next Step. На следующем этапе выберите имя поля для временного фильтра. У вас будет только один вариант — @timestamp, выбирайте его и жмите Create Index Pattern.

Новый индекс добавлен. Теперь при переходе в раздел Discover, он будет открываться по-умолчанию со всеми данными, которые в него поступают.

Получением логов с linux серверов настроили. Теперь сделаем то же самое для журналов windows.

Настройка Logstash Forwarder на клиентских серверах

Примечание: Данный раздел нужно выполнить на всех клиентских серверах Debian, данные которых нужно передавать на сервер Logstash.

Копирование сертификата

На сервере Logstash нужно скопировать SSL-сертификат и переместить его копию на клиентский сервер:

Примечание: Вместо client_server_private_address укажите внутренний адрес сервера.

Пройдя аутентификацию, убедитесь, что сертификат успешно скопирован.

Установка Logstash Forwarder

Добавьте в домашний каталог на клиентском сервере RPM для Logstash Forwarder.

Установите пакет Logstash Forwarder:

Добавьте сценарий инициализации Logstash Forwarder в автозагрузку.

Сценарий инициализации зависит от /etc/sysconfig/logstash-forwarder. Загрузите этот файл:

Откройте его в редакторе:

Измените значение LOGSTASH_FORWARDER_OPTIONS:

Сохраните и закройте файл.

Скопируйте сертификат в каталог /etc/pki/tls/certs на клиенте.

Настройка Logstash Forwarder

Теперь нужно настроить взаимодействие Logstash Forwarder и Logstash.

Откройте конфигурационный файл Logstash Forwarder на клиентском сервере:sudo vi /etc/logstash-forwarder

Добавьте следующие строки в файл, вместо logstash_server_private_IP укажите внутренний IP-адрес сервера Logstash:

Сохраните и закройте файл. Теперь Logstash Forwarder может взаимодействовать с Logstash через порт 5000 и использовать сертификат

SSL. Раздел paths определяет логи, которые нужно передавать в Logstash (в данном случае syslog и auth.log). Раздел type определяет тип логов (в данном случае syslog; чтобы Logstash Forwarder собирал больше файлов, добавьте их настройки в этот раздел).

Добавьте сервис Logstash Forwarder:

Запустите Logstash Forwarder:

Install Elasticsearch

Elasticsearch is an open-source search server, offers a real-time distributed search and analytics with the RESTful web interface.

Elasticsearch stores all the data that are sent by the logstash and displays through the kibana on users request.

This topic covers configuration settings that are required for ELK. You can also take at  Install Elasticsearch on CentOS 7 / Ubuntu 16.04 / Linux Mint 18 for more instruction.

Setup the Elasticsearch repository.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elk.list

Install Elasticsearch.

apt-get update
apt-get install -y elasticsearch

Configure Elasticsearch to start during system startup.

systemctl enable elasticsearch
systemctl start elasticsearch

Elastisearch should be now listening on 9200 for processing HTTP request; we can use CURL to get the response.

curl -X GET http://localhost:9200

Output:

{
 "name" : "gf5QYAn",
 "cluster_name" : "elasticsearch",
 "cluster_uuid" : "S6gZNkMERpSr-MGXqEFUJw",
 "version" : {
 "number" : "5.5.2",
 "build_hash" : "b2f0c09",
 "build_date" : "2017-08-14T12:33:14.154Z",
 "build_snapshot" : false,
 "lucene_version" : "6.6.0"
 },
 "tagline" : "You Know, for Search"
}

IV — Установка различных инструментов

а — Установка Java в Ubuntu

Перед установкой стека ELK вам необходимо установить Java на свой компьютер.

Для этого выполните следующую команду:

$ sudo apt-get install default-jre

На момент написания этого руководства этот экземпляр запускает OpenJDK версии 11 .

ubuntu:~$ java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu218.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu218.04.1, mixed mode, sharing)

б — Добавление эластичных пакетов в ваш экземпляр

В этом руководстве я собираюсь использовать машину Ubuntu, но подробности будут приведены для Debian.

Сначала добавьте ключ GPG в репозиторий APT.

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

Затем вы можете добавить эластичный источник в свой файл списка источников APT.

$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

$ cat /etc/apt/sources.list.d/elastic-7.x.list
deb https://artifacts.elastic.co/packages/7.x/apt stable main

$ sudo apt-get update

После этого вы должны быть готовы к установке всех инструментов в стеке ELK.

Начнем с ElasticSearch.

c — Установка ElasticSearch

ElasticSearch — это поисковая система, созданная Elastic, которая хранит данные в индексах для очень быстрого поиска.

Чтобы установить его, выполните следующую команду:

$ sudo apt-get install elasticsearch

Следующая команда автоматически выполнит:

  • Загрузите пакет deb для ElasticSearch;
  • Создайте пользователя elasticsearch ;
  • Создайте группу elasticsearch ;
  • Автоматически создавать полностью настроенную службу systemd (по умолчанию неактивную)

При первом запуске служба неактивна, запустите ее и убедитесь, что все работает нормально.

$ sudo systemctl start elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2019-07-08 18:19:45 UTC; 2 days ago
Docs: http://www.elastic.co

Чтобы убедиться, что ElasticSearch действительно запущен, вы можете выполнить одну из этих двух команд:

Наблюдение за тем, какие приложения прослушивают целевой порт

$ sudo lsof -i -P -n | grep LISTEN | grep 9200
java 10667 elasticsearch 212u IPv6 1159208890 0t0 TCP :9200 (LISTEN)
java 10667 elasticsearch 213u IPv6 1159208891 0t0 TCP 127.0.0.1:9200 (LISTEN)

Выполнение простого запроса ElasticSearch

$ curl -XGET 'http://localhost:9200/_all/_search?q=*&pretty'

Ваш экземпляр ElasticSearch готов!

Теперь давайте установим Logstash в качестве нашего инструмента для сбора и фильтрации журналов.

d — Установка Logstash

Если вы ранее добавляли эластичные пакеты, установить Logstash так же просто, как выполнить:

$ sudo apt-get install logstash

Опять же, будет создан сервис Logstash, и вам нужно его активировать.

$ sudo systemctl status logstash 
$ sudo systemctl start logstash

По умолчанию Logstash прослушивает метрики на порту 9600. Как и раньше, перечислите открытые порты на вашем компьютере в поисках этого конкретного порта.

$ sudo lsof -i -P -n | grep LISTEN | grep 9600
java 28872 logstash 79u IPv6 1160098941 0t0 TCP 127.0.0.1:9600 (LISTEN)

Нам нужно только установить Kibana для завершения всей нашей установки.

e — Установка Kibana

Напоминаем, что Kibana — это инструмент визуализации, специально разработанный для ElasticSearch и используемый для отслеживания наших окончательных журналов.

Не очень удивительно, но вот команда для установки Kibana:

$ sudo apt-get install kibana

Как обычно, запустите службу и убедитесь, что она работает правильно.

$ sudo systemctl start kibana
$ sudo lsof -i -P -n | grep LISTEN | grep 5601
node 7253 kibana 18u IPv4 1159451844 0t0 TCP *:5601 (LISTEN)

Веб-интерфейс Kibana доступен на порту 5601 .

Перейдите по адресу http: // localhost: 5601 в своем браузере, и вы должны увидеть следующий экран.

Теперь мы очень готовы принять журналы из rsyslog и начать их визуализацию в Kibana.

Шаг 1 — Установка и настройка Elasticsearch

Компоненты Elasticsearch отсутствуют в репозиториях пакетов Ubuntu по умолчанию. Однако их можно установить с помощью APT после добавления списка источников пакетов Elastic.

Все пакеты подписаны ключом подписи Elasticsearch для защиты вашей системы от поддельных пакетов. Ваш диспетчер пакетов будет считать надежными пакеты, для которых проведена аутентификация с помощью ключа. На этом шаге вы импортируете открытый ключ Elasticsearch GPG и добавить список источников пакетов Elastic для установки Elasticsearch.

Для начала используйте cURL, инструмент командной строки для передачи данных с помощью URL, для импорта открытого ключа Elasticsearch GPG в APT

Обратите внимание, что мы используем аргументы -fsSL для подавления всех текущих и возможных ошибок (кроме сбоя сервера), а также чтобы разрешить cURL подать запрос на другой локации при переадресации. Выведите результаты команды cURL в программу apt-key, которая добавит открытый ключ GPG в APT

Затем обновите списки пакетов, чтобы APT мог прочитать новый источник Elastic:

Установите Elasticsearch с помощью следующей команды:

Теперь система Elasticsearch установлена и готова к настройке. Используйте предпочитаемый текстовый редактор для изменения файла конфигурации Elasticsearch, elasticsearch.yml. Мы будем использовать nano:

Примечание. Файл конфигурации Elasticsearch представлен в формате YAM. Это означает, что нам нужно сохранить формат отступов. Не добавляйте никакие дополнительные пробелы при редактировании этого файла.

Файл elasticsearch.yml предоставляет варианты конфигурации для вашего кластера, узла, пути, памяти, сети, обнаружения и шлюза. Большинство из этих вариантов уже настроены в файле, но вы можете изменить их в соответствии с вашими потребностями. В нашем случае для демонстрации односерверной конфигурации мы будем регулировать настройки только для хоста сети.

Elasticsearch прослушивает весь трафик порта 9200. По желанию вы можете ограничить внешний доступ к вашему экземпляру Elasticsearch, чтобы посторонние не смогли прочесть ваши данные или отключить ваш кластер Elasticsearch через REST API. Для ограничения доступа и повышения безопасности найдите строку с указанием network.host, разкомментируйте ее и замените значение на localhost, чтобы она выглядела следующим образом:

/etc/elasticsearch/elasticsearch.yml

. . .




network.host: localhost
. . .

Мы указали localhost, и теперь Elasticsearch прослушивает все интерфейсы и связанные IP-адреса. Если вы хотите, чтобы прослушивался только конкретный интерфейс, вы можете указать его IP-адрес вместо localhost. Сохраните и закройте elasticsearch.yml. Если вы используете nano, вы можете сделать это, нажав CTRL+X, затем Y, а затем ENTER.

Это минимальные настройки, с которыми вы можете начинать использовать Elasticsearch. Теперь вы можете запустить Elasticsearch в первый раз.

Запустите службу Elasticsearch с помощью systemctl. Запуск Elasticsearch может занять некоторое время. В другом случае вы можете увидеть сообщение об ошибке подключения.

Затем запустите следующую команду, чтобы активировать Elasticsearch при каждой загрузке сервера:

Вы можете протестировать работу службы Elasticsearch, отправив запрос HTTP:

Вы получите ответ, содержащий базовую информацию о локальном узле:

{
  "name" : "Elasticsearch",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
  "version" : {
    "number" : "7.7.1",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Мы настроили и запустили Elasticsearch, и теперь можем перейти к установке Kibana, следующего компонента комплекса Elastic.

Автоматический запуск

Задание на автоматический запуск создается по умолчанию в файле /etc/cron.daily/logrotate. Если изучить его содержимое, мы увидим, что идет запуск logrotate, который читает все файлы в директории /etc/logrotate.d/ и выполняющий для каждого из них ротацию.

Если для какого-то приложения необходимо выполнять ротацию лога по особому расписанию, узнаем полный путь до утилиты logrotate:

which logrotate

* в моем случае, это было /usr/sbin/logrotate.

Получив путь, создаем правило в cron:

crontab -e

0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/logstash

* в данном примере в 00:00 будет запускаться logrotate и чистить логи с нашей настройкой для logstash-forwarder.

или запуск чистки всех логов:

0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: