• База знань
  • /
  • Блог
  • /
  • 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