• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Централизованный сбор и обработка логов с помощью Elasticsearch, Logstash и Kibana

Оглавление

 

Для чего нужен комплекс Elastic Stack

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

Сегодня, мы рассмотрим решение на основе СПО, которое называется — комплекс Elastic Stack (ранее ELK), в состав которого входят несколько продуктов, которые мы рассмотрим ниже.

  1. Elasticsearch — это мощный поисковый движок, предназначенный для поиска и индексирования данных в любом типе файлов.
  2. Logstash необходим для сбора файлов журналов из различных источников, он поддерживает разные типы входных данных (логи, метрики служб и сервисов и т.д.).
  3. Kibana — это веб-интерфейс, предназначенный для вывода индексированных Elasticsearch лог-файлов в виде текстовой информации, диаграмм, графиков и отчетов.
  4. Filebeat используется для передачи логов приложений с серверов на Logstash.*

*Примечание: могут использоваться также Metricbeat (для сбора метрических показателей систем и служб), Packetbeat (для сбора и анализа данных сети), Winlogbeat (для сбора данных журналов Windows), Auditbeat (для сбора данных аудита Linux), Heartbeat (для отслеживания доступности услуг с помощью зондирования).

Когда вы устанавливаете комплекс Elastic Stack, следите за тем, чтобы все инсталлируемые вами компоненты были одной и той же версии.

Перед установкой необходимо провести некоторые подготовительные работы и выполнить системные требования, необходимые для функционирования комплекса.

Подготовительные работы и системные требования

Все работы будем проводить на VPS сервере (2 процессора, 4 ГБ оперативной памяти) под Ubuntu 20.04. Как установить Ubuntu 20.04 на VPS сервер можно узнать в этой статье. Для выполнения действий нам необходим пользователь под Ubuntu 20.04 без прав root с привилегиями sudo. Системные требования к процессору и объему ОЗУ также зависят еще и от объема обрабатываемых комплексом журналов.

Для работ по установке нам будет необходим пакет OpenJDK 11 и веб-сервер Nginx, который нужно настроить в качестве обратного прокси для Kibana.

Комплекс Elastic будет использоваться для централизованного сбора и обработки данных лог-файлов, которые могут содержать критически важную или чувствительную информацию, поэтому необходимо соблюдать все требования информационной безопасности. Для этого настоятельно рекомендуем настроить на сервере Let’s Encrypt для обеспечения защиты сервера сертификатом TLS/SSL. Как это сделать, можно узнать из нашего обучающего материала на эту тему.

А теперь выполним предварительные установочные работы. Для начала обновим серверную ОС Ubuntu 20.04:

apt update && apt full-upgrade –y

На следующем этапе выполним установку комплекта JRE/JDK. Для начала проверим установлен он на сервере или нет.

java -version

Как мы видим, комплект JRE/JDK не установлен и нам нужно его установить. Далее, следует выполнить команду, чтобы инсталлировать среду выполнения Java (JRE) из OpenJDK 11:

sudo apt install default-jre

Установка и настройка JRE

Сделаем проверку установки:

java -version

На следующем этапе установим Java Development Kit (JDK) в дополнение к JRE:

sudo apt install default-jdk

Затем проверим результаты установки:

javac -version

На данном этапе следует выполнить установку и настройку веб-сервера Nginx, подробнее этот процесс описан в нашей статье «Выпуск и обновление сертификатов Let's encrypt и конфигурирование NGINX».

Команда для установки NGINX под OC Ubuntu 20.04:

sudo apt install nginx

Перед запуском Nginx нам стоит настроить брандмауэр, для разрешения доступа к сервису. Перечислим конфигурации приложений, с которыми работает ufw с помощью команды:

sudo ufw app list

Для разрешения соединения с Nginx, мы должны изменить правила с помощью команды:

sudo ufw allow 'Nginx Full'

Профиль Nginx Full открывает порты 80 и 443.

Если есть необходимость, то стоит еще разрешить соединения по порту 22 для SSH:

Сейчас включаем фаерволл:

sudo ufw enable

Выполним проверку статуса:

sudo ufw status

Затем происходит запуск веб-сервера Ngnix, проверим его статус работы:

systemctl status nginx

Проверка статуса ufw

Для проверки своего IP-адреса необходимо выполнить команду:

curl -4 icanhazip.com

Наберем в строке браузера адрес

http://178.20.156.90

Веб-сервер NGNIX установлен:

Как установить и настроить Elasticsearch

Как правило, в Ubuntu 20.04 нет «по умолчанию» компонентов Elasticsearch, однако, несложно будет установить их с помощью команды apt, если добавить список источников пакетов Elastic. Для начала, сделаем импорт открытого ключа Elasticsearch GPG и добавим список источников пакетов Elastic, чтобы в дальнейшем инсталлировать Elasticsearch:

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

На следующем шаге, добавим список источников Elastic в директорию sources.list.d, именно там 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

Теперь нужно обновить списки пакетов:

sudo apt update

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

sudo apt install elasticsearch

После успешной установки Elasticsearch, приступим к настройке программы. Откроем файл конфигурации elasticsearch.yml в редакторе nano:

sudo nano /etc/elasticsearch/elasticsearch.yml

Необходимо знать, что этот файл написан в формате YAM, т.е. нужно сохранять формат отступов и не добавлять лишних пробелов при редактировании файла. Напомним, что Elasticsearch слушает трафик порта 9200. Чтобы ограничить доступ и повысить уровень безопасности, нужно найти строчку с параметром network.host, раскомментировать ее и изменить значение в ней на localhost:

network.host: localhost

На следующем этапе, нам нужно запустить службу Elasticsearch и подождать несколько минут:

sudo systemctl start elasticsearch

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

sudo systemctl enable elasticsearch

Сейчас выполним тестирование Elasticsearch:

curl -X GET "localhost:9200"

После успешной установки и настройки Elasticsearch, можно перейти к установке Kibana. Компоненты пакета следует устанавливать именно в таком порядке, как описано в нашей инструкции.

Как установить Kibana

Инсталлируем Kibana с помощью команды apt:

sudo apt install kibana

На следующем этапе, активируем и запустим службу Kibana:

sudo systemctl enable kibana
sudo systemctl start kibana

Сейчас необходимо задать обратный прокси, так как Kibana прослушивает только localhost, а нам нужно разрешить и внешний доступ. Веб-сервер Nginx, который мы уже установили на первом этапе, понадобится нам для этих целей.

Для начала, необходимо создать учетную запись администратора Kibana, т.е. логин и пароль. Сделаем это таким образом:

echo "freehostadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Где:

login: freehostadmin password: lena1

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

Отредактируем файл серверного блока Nginx в nano, следующим образом, заменив содержимое его на код:

server {
    listen 80;

    server_name 178.20.156.90;

    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;
    }
}

Где, server_name — это ваш IP или доменное имя.

После окончания редактирования, нужно сохранить данный файл и выйти из nano.
Следующий этап — создание символической ссылки на каталог sites-enabled:

sudo ln -s /etc/nginx/sites-available/178.20.156.90 /etc/nginx/sites-enabled/178.20.156.90

После этого, проверьте конфигурацию:

sudo nginx -t

Если будут найдены ошибки, то следует проверить все команды на предыдущих шагах. Если ошибок нет, то на экране высветится сообщение:

syntax is ok

 

Сейчас нужно перезапустить службу Nginx:

sudo systemctl reload nginx

После всех установочных работ, приложение Kibana будет доступно в веб-браузере по адресу вашего IP (или домена).

http://178.20.156.90/status

Предварительно, необходимо ввести вручную ваши учетные данные в диалоговом окне ввода:

login: freehostadmin
password: lena1

На скриншоте изображена страница состояния сервера Kibana.

Как установить и настроить Logstash

С помощью сервисов Beats можно передавать данные напрямую в базу данных Elasticsearch. Однако, гораздо удобнее воспользоваться приложением Logstash. С помощью него возможно осуществлять сбор данных из самых разных источников, выполнять преобразование их в общий формат, а затем проводить экспорт их в другую базу данных.

Для установки Logstash выполним команду:

sudo apt install logstash

Далее перейдем к настройке файлов конфигурации Logstash, которые находятся в каталоге /etc/logstash/conf.d.

Создадим файл конфигурации в редакторе nano с именем 02-beats-input.conf для настройки ввода данных Filebeat:

nano /etc/logstash/conf.d/02-beats-input.conf

Затем вставим в файл следующий код:

input { 
  beats  { 
     port => 5044 
  }
}

После этого, сохраним и выйдем из редактора.

Создаем файл конфигурации 30-elasticsearch-output.conf для вывода:

nano /etc/logstash/conf.d/30-elasticsearch-output.conf

Внесем туда следующие строки:

output { if 
[@metadata][pipeline] { elasticsearch { hosts => ["localhost:9200"]
manage_template => false index =>
"%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" pipeline =>
"%{[@metadata][pipeline]}" } } else { elasticsearch { hosts =>
["localhost:9200"] manage_template => false index =>
"%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } } }

После сохранения и закрытия этого файла, протестируем конфигурацию на ошибки:

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

Если будут найдены ошибки, то стоит проверить, правильно ли вы выполнили предыдущие этапы установки. Если ошибок нет, то на экран будет выведено сообщение:

Config Validation Result: OK. Exiting Logstash

Примечание: Предупреждения от OpenJDK можно проигнорировать.

Затем следует запустить и активировать Logstash:

sudo systemctl start logstash
sudo systemctl enable logstash

После успешной установки и настройки Logstash необходимо перейти к инсталляции Filebeat.

Как установить и настроить Filebeat

С целью сбора данных из различных источников и их дальнейшей транспортировки в Logstash или Elasticsearch используются сервисы Beats, в начале статьи мы перечислили их типы. В нашем материале будем использовать сервис Filebeat, чтобы перенаправлять локальные журналы в комплекс Elastic.

Для начала, установим Filebeat:

sudo apt install filebeat

Теперь необходимо отредактировать файл конфигурации в редакторе nano:

sudo nano /etc/filebeat/filebeat.yml

Примечание: необходимо выдерживать точно такое же количество пробелов, как в образце, т.к. файл имеет формат YAML.

Используем Logstash, чтобы дополнительно обрабатывать данные, которые были собраны с помощью Filebeat. Отключим прямой вывод данных из Filebeat в Elasticsearch, для этого закомментируем раздел output.elasticsearch.

...
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]

Сейчас проведем настройки Filebeat таким образом, чтобы он подключался к Logstash на сервере комплекса Elastic Stack, используя порт 5044, который был ранее задан для ввода Logstash. Для этого раскомментируем следующие строки:

/etc/filebeat/filebeat.yml
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

Затем выполним сохранение и закроем файл.

Для расширения функционала Filebeat можно использовать различные модули. В качестве примера, воспользуемся модулем system, который служит для сбора и проверки данных журналов, которые открыты службой регистрации систем в ОС Linux.

Активируем модуль system командой:

sudo filebeat modules enable system

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

sudo filebeat modules list

Параметры модуля system можно настроить в файле его конфигурации:

sudo nano /etc/filebeat/modules.d/system.yml

Для нашего примера воспользуемся настройками файла «по умолчанию».

После этого, необходимо провести настройки конвейеров обработки Filebeat, которые служат для выполнения синтаксического анализа данных журнала, предварительно перед их отправкой через Logstash в Elasticsearch. Для загрузки конвейера обработки будем использовать следующую команду:

sudo filebeat setup --pipelines --modules system

На следующем шаге, загрузим в Elasticsearch шаблон индекса. Под индексом Elasticsearch понимают коллекцию документов с аналогичными характеристиками.

Идентификация индексов происходит по имени, а имя используется для ссылки на индекс, когда выполняются разные операции внутри него. При создании каждого нового индекса применяется шаблон индекса. Команда для загрузки шаблона:

sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

Для визуализации данных в Kibana необходимы информационные панели, они входят в комплект Filebeat. Перед использованием информационных панелей, необходимо создать шаблон индекса и загрузить панели в Kibana. В это время Filebeat будет подключен к Elasticsearch, чтобы проверить информацию о версиях. Чтобы загрузка информационных панелей прошла без сбоев, нужно при включенном Logstash отключить вывод Logstash и включить вывод Elasticsearch:

sudo filebeat setup -E output.logstash.enabled=false
 -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

Затем можно запустить и активизировать Filebeat:

sudo systemctl start filebeat
sudo systemctl enable filebeat

Если все настройки на предыдущих этапах выполнены правильно, то Filebeat будет производить отправку системного журнала, журналов авторизации в Logstash, а затем оттуда уже эти данные будут направляться в Elasticsearch.

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

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Результат выполнения команды представлен на скриншоте:

Проверьте свои результаты на ошибки, затем можно переходить к работе с информационными панелями Kibana.

Визуализация данных с помощью информационных панелей Kibana

Сделаем небольшой обзор по веб-интерфейсу приложения Kibana. Для входа в приложение введите в браузере свой IP или имя домена:

http://178.20.156.90

Затем появится окно ввода учетных данных, которые мы назначили в ходе установки Kibana и которые необходимо ввести вручную (не копированием).

После прохождения процедуры авторизации на сайте, мы увидим информационные панели приложения Kibana:

Слева в панели находится меню Kibana. Для просмотра аналитики в виде диаграмм и графиков, войдите в меню «Analytics»:

Для просмотра данных Filebeat, необходимо нажать ссылку Discover и выбрать индекс filebeat-*:

Для мониторинга и контроля событий по информационной безопасности, нужно выбрать меню «Security»:

Альтернативная реализация работы с логами без Logstash

Некоторым системным администраторам может показаться работа с комплексом Elastic Stack, изложенная выше в нашей статье, слишком трудоемкой и затратной по времени. Есть и альтернативный вариант передачи логов из Rsyslog в Elasticsearch без участия Logstash. Rsyslog может передавать данные в Elasticsearch напрямую через модуль omelasticsearch. Мало того, Rsyslog не требует никаких java-библиотек для работы, так как «по умолчанию» он использует HTTP для отправки данных. Существует еще такой дополнительный модуль, которые необходим для того, чтобы он мог указать Elasticsearch в качестве места назначения вывода данных. Это часть пакета rsyslog-elasticsearch, который доступен в Debian/Ubuntu. Если описывать кратко, то таким образом, можно обойтись без приложения Logstash.

Заключение

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

Если же у вас возникнут проблемы, то специалисты компании FREEhost.UA всегда проконсультируют вас по вопросам настройки Elastic Stack и организации работы с лог-файлами.

Подписывайтесь на наш телеграмм - канал t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш Youtube канал на youtube.com/freehostua.

Мы что-то упустили, в чем-то ошиблись?

Сообщите об этом в комментариях и мы обязательно это обсудим.

Дата: 23.02.2022
Автор: Елена Артамонова
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA