Поиск по сайту:

Как установить стек EFK (Elasticsearch, Fluentd и Kibana) в Ubuntu


Elasticsearch — поисковая система с открытым исходным кодом, основанная на Lucene и разработанная на Java. Он предоставляет распределенную и многопользовательскую полнотекстовую поисковую систему с веб-интерфейсом панели мониторинга HTTP (Kibana). Данные запрашиваются, извлекаются и сохраняются в формате JSON. Elasticsearch — масштабируемая поисковая система, которая может искать все виды текстовых документов, включая файлы журналов.

Fluentd — это кроссплатформенное программное обеспечение для сбора данных, написанное на Ruby. Это инструмент сбора данных с открытым исходным кодом, который позволяет анализировать журналы событий, журналы приложений, системные журналы и т. д.

Kibana — это интерфейс визуализации данных для Elasticsearch. Kibana предоставляет красивую панель управления (веб-интерфейсы), позволяющую самостоятельно управлять и визуализировать все данные из Elasticsearch. Это не только красиво, но и мощно.

В этом руководстве показано, как шаг за шагом создавать централизованные журналы с использованием стека EFK (Elasticsearch, Fluentd и Kibana). Мы установим EFK Stack в системе Ubuntu 18.04, а затем попытаемся собрать журналы с клиентов Ubuntu и CentOS на сервер EFK.

Предварительные условия

  • 3 сервера

    • эфк-мастер 10.0.15.10 Ubuntu 18.04
    • client01 10.0.15.11 Ubuntu 18.04
    • client02 10.0.15.12 CentOS 7.5
  • Корневые права

Что мы будем делать?

  1. Глобальная конфигурация сервера

    • Настроить НТП
    • Увеличение максимального дескриптора файла
    • Оптимизация параметров сетевого ядра
  2. Настройка сервера ЕФК

    • Установить Java
    • Установите и настройте Elasticsearch
    • Установите и настройте Кибану
    • Установите и настройте Nginx в качестве обратного прокси для Kibana
    • Установите и настройте Fluentd
  3. Настройка клиентов Ubuntu и CentOS

    • Установите и настройте Fluentd
    • Настройка системного журнала
  4. Тестирование

Шаг 1 — Глобальная конфигурация сервера

На этом этапе мы подготовим все серверы Ubuntu и CentOS для установки Fluentd. Итак, запустите все приведенные ниже команды на всех трех серверах.

Настроить НТП

В этом руководстве мы будем использовать ntpd для настройки NTP-сервера.

Установите пакеты NTP, используя команды ниже.

На серверах Ubuntu.

sudo apt install ntp ntpdate -y

На сервере CentOS.

sudo yum install ntp ntpdate -y

После завершения установки отредактируйте файл конфигурации NTP /etc/ntp.conf с помощью редактора vim.

vim /etc/ntp.conf

Теперь выберите регион своего континента, на котором расположен сервер, посетив список пулов NTP. Прокомментируйте пул по умолчанию и замените его собственным пулом, как показано ниже.

server 0.id.pool.ntp.org iburst
server 1.id.pool.ntp.org iburst
server 2.id.pool.ntp.org iburst
server 3.id.pool.ntp.org iburst

Сохранить и выйти.

Теперь перезапустите службы ntpd.

На серверах Ubuntu.

systemctl restart ntp

На сервере CentOS.

systemctl restart ntpd

Настройка NTP-сервера завершена.

Увеличение максимального дескриптора файла

Максимальный файловый дескриптор по умолчанию на сервере Linux — «1024». А для установки fluentd рекомендуется установить дескриптор файла на «65536».

Перейдите в каталог «/etc/security» и отредактируйте файл конфигурации «limits.conf».

cd /etc/security/
vim limits.conf

Вставьте конфигурацию ниже в конец строки.

root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536

Сохранить и выйти.

Оптимизация параметров сетевого ядра

Отредактируйте файл /etc/sysctl.conf с помощью vim.

vim /etc/sysctl.conf

И вставьте конфигурацию ниже.

net.core.somaxconn = 1024
net.core.netdev_max_backlog = 5000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_wmem = 4096 12582912 16777216
net.ipv4.tcp_rmem = 4096 12582912 16777216
net.ipv4.tcp_max_syn_backlog = 8096
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535

Сохранить и выйти.

Примечание:

  • Эти параметры ядра изначально были взяты из презентации «Как Netflix настраивает экземпляры EC2 для повышения производительности» Брендана Грегга, старшего архитектора производительности на AWS re:Invent 2017.

Теперь перезагрузите параметры ядра с помощью команды sysctl.

sysctl -p

Глобальная настройка сервера для установки Fluentd завершена.

Шаг 2. Настройка стекового сервера EFK

На этом этапе мы установим и настроим стек EFK на сервере efk-master. На этом этапе будет рассмотрена установка Java, elasticsearch, Kibana и Fluentd в системе Ubuntu.

Установить Java

Мы установим Java из репозитория PPA webupd8team.

Установите пакет «software-properties-common» и добавьте репозиторий Java.

sudo apt install software-properties-common apt-transport-https -y
sudo add-apt-repository ppa:webupd8team/java -y

Теперь установите установщик java8.

sudo apt install oracle-java8-installer -y

После завершения установки проверьте версию Java.

java -version

В системе установлена Java 1.8.

Далее мы настроим среду Java. Проверьте двоичный файл Java, используя команду ниже.

update-alternatives --config java

И вы получите двоичный файл Java в каталоге «/usr/lib/jvm/java-8-oracle».

Теперь создайте файл профиля «java.sh» в каталоге «profile.d».

vim /etc/profile.d/java.sh

Вставьте конфигурацию среды Java ниже.

#Set JAVA_HOME
JAVA_HOME="/usr/lib/jvm/java-8-oracle"
export JAVA_HOME
PATH=$PATH:$JAVA_HOME
export PATH

Сохранить и выйти.

Сделайте файл исполняемым и загрузите файл конфигурации.

chmod +x /etc/profile.d/java.sh
source /etc/profile.d/java.sh

Теперь проверьте среду Java, используя команду ниже.

echo $JAVA_HOME

И вы получите каталог Java, расположенный в каталоге «/usr/lib/jvm/java-8-oracle».

Установите Elasticsearch

После установки Java мы установим первый компонент стека EFK (установим elasticsearch).

Добавьте эластичный ключ и репозиторий в систему.

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

Теперь обновите репозиторий и установите пакет elasticsearch, используя команду ниже.

sudo apt update
sudo apt install elasticsearch -y

После завершения установки перейдите в каталог «/etc/elasticsearc» и отредактируйте файл конфигурации «elasticsearch.yml».

cd /etc/elasticsearch/
vim elasticsearch.yml

Раскомментируйте строку «network.host» и измените значение на «localhost», а также раскомментируйте строку «http.port» для конфигурации порта elasticsearch.

network.host: localhost
http.port: 9200

Сохранить и выйти.

Теперь запустите службу elasticsearch и включите ее каждый раз при загрузке системы.

systemctl start elasticsearch
systemctl enable elasticsearch

Elasticsearch теперь запущен и работает, проверьте его с помощью команд netstat и Curl ниже.

netstat -plntu
curl -XGET 'localhost:9200/?pretty'

Теперь вы получите версию elasticsearch «6.2.4», работающую на порту по умолчанию «9200».

Установите и настройте Кибану

Второй компонент — это панель управления Kibana. Мы установим панель управления Kibana из эластичного репозитория и настроим службу Kibana для запуска по адресу локального хоста.

Установите панель управления Kibana, используя приведенную ниже команду apt.

sudo apt install kibana -y

Теперь перейдите в каталог «/etc/kibana» и отредактируйте файл конфигурации «kibana.yml».

cd /etc/kibana/
vim kibana.yml

Раскомментируйте строки «server.port», «server.host» и «elasticsearch.url».

server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"

Сохранить и выйти.

Теперь запустите службу Kibana и включите ее каждый раз при загрузке системы.

sudo systemctl enable kibana
sudo systemctl start kibana

Панель управления Kibana теперь запущена и работает по адресу «localhost» и порту по умолчанию «5601». Проверьте это с помощью команды netstat ниже.

netstat -plntu

Установка Kibana завершена.

Установите и настройте Nginx в качестве обратного прокси для Kibana

В этом уроке мы будем использовать веб-сервер Nginx в качестве обратного прокси-сервера для панели управления Kibana.

Установите в систему Nginx и пакеты apache2-utils.

sudo apt install nginx apache2-utils -y

После завершения установки перейдите в каталог конфигурации «/etc/nginx» и создайте новый файл виртуального хоста с именем «kibana».

cd /etc/nginx/
vim sites-available/kibana

Вставьте сюда следующую конфигурацию виртуального хоста Nginx.

server {
    listen 80;
 
    server_name efk-stack.io;
 
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;
 
    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;
    }
}

Сохранить и выйти.

Далее мы создадим новый веб-сервер базовой аутентификации для доступа к панели управления Kibana. Мы создадим базовую аутентификацию с помощью команды htpasswd, как показано ниже.

sudo htpasswd -c /etc/nginx/.kibana-user elastic

ВВЕДИТЕ ЭЛАСТИЧНЫЙ ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ

Активируйте виртуальный хост Kibana и проверьте всю конфигурацию nginx.

ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t

Убедитесь, что нет ошибок, теперь запустите службу Nginx и включите ее каждый раз при загрузке системы.

systemctl enable nginx
systemctl restart nginx

Установка и настройка Nginx в качестве обратного прокси для панели управления Kibana завершена.

Установите и настройте Fluentd

Теперь мы установим пакеты Fluentd, используя пакеты Debian Stretch 9. Мы установим пакеты fluentd из репозитория, а затем настроим fluentd для безопасной пересылки данных через SSL.

Загрузите и установите fluentd с помощью сценария установки Debian, как показано ниже.

curl -L https://toolbelt.treasuredata.com/sh/install-debian-stretch-td-agent3.sh | sh

И после завершения установки нам нужно добавить новые плагины fluentd elasticsearch и secure-forward.

Установите плагины fluentd elasticsearch и secure_forward, используя команды ниже.

sudo /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch --no-document
sudo /usr/sbin/td-agent-gem install fluent-plugin-secure-forward --no-document

Установлены плагины Fluentd и fluentd.

Далее нам нужно сгенерировать новый файл сертификата для безопасной передачи журналов от клиентов на сервер efk-master.

Создайте файл сертификата, используя команду ниже.

cd /opt/td-agent/
./embedded/lib/ruby/gems/2.4.0/bin/secure-forward-ca-generate /etc/td-agent/ hakase321

Файлы сертификатов «ca_cert.pem» и «ca_key.pem» с паролем «hakase321» были созданы в каталоге «/etc/td-agent».

ls -lah /etc/td-agent/

Теперь перейдите в каталог «/etc/td-agent», сделайте резервную копию исходного файла конфигурации «td-agent.conf» и создайте новый.

cd /etc/td-agent/
mv td-agent.conf td-agent.conf.orig

vim td-agent.conf

Вставьте туда следующую конфигурацию.

<source>
  @type secure_forward
  shared_key FLUENTD_SECRET
  self_hostname efk-master
  secure yes
  cert_auto_generate yes

  ca_cert_path /etc/td-agent/ca_cert.pem
  ca_private_key_path /etc/td-agent/ca_key.pem
  ca_private_key_passphrase hakase321
</source>

<match *.**>
  @type elasticsearch
  logstash_format true
  logstash_prefix fluentd
  <buffer>
  flush_interval 10s
  </buffer>
</match>

Сохранить и выйти.

Проверьте конфигурацию fluentd и убедитесь, что нет ошибок, а затем перезапустите службу.

td-agent --dry-run
systemctl restart td-agent

Fluentd теперь запущен и работает в системе Ubuntu, проверьте его с помощью команды netstat ниже.

netstat -plntu

И вы получите порт по умолчанию «24284» в состоянии «LISTEN» — он используется источником «secure_forward».

Настройка сервера EFK Stack завершена.

Шаг 3. Настройка клиентов Ubuntu и CentOS

На этом этапе мы настроим клиенты Ubuntu 18.04 и CentOS 7. Мы установим и настроим агент Fluentd на обоих серверах для сбора журналов сервера, а затем отправим все журналы на сервер «efk-master» через SSL «secure_forward».

Настроить файл хостов

Отредактируйте файл «/etc/hosts» в обеих системах и добавьте IP-адрес сервера efk-master.

vim /etc/hosts

Вставьте конфигурацию ниже.

10.0.15.10  efk-master  efk-master

Сохранить и выйти.

Установите и настройте Fluentd

Теперь установите Fluentd, используя сценарий установки, как показано ниже.

Для системы Ubuntu 18.04.

curl -L https://toolbelt.treasuredata.com/sh/install-debian-stretch-td-agent3.sh | sh

Для системы CentOS 7.

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

После завершения установки установите плагин «secure_forward», используя приведенную ниже команду «td-agent-gem».

sudo /usr/sbin/td-agent-gem install fluent-plugin-secure-forward --no-document

Установлены пакеты Fluentd с плагинами Secure_forward.

Теперь нам нужно загрузить файл сертификата ca_cert.pem с сервера efk-master всем клиентам.

Загрузите сертификат ca_cert.pem с помощью scp.

scp root@efk-master:/etc/td-agent/ca_cert.pem /etc/td-agent/
TYPE THE ROOT PASSWORD

Файл сертификата ca_cert.pem был загружен в каталог /etc/td-agent/.

ls -lah /etc/td-agent/

Далее нам нужно создать новый файл конфигурации td-agent.conf для клиента. Перейдите в каталог /etc/td-agent, создайте резервную копию исходного файла и создайте новый.

cd /etc/td-agent/
mv td-agent.conf td-agent.conf.orig

vim td-agent.conf

Вставьте туда следующую конфигурацию.

<source>
  @type syslog
  port 42185
  tag client01
</source>

<match *.**>
  @type secure_forward
  shared_key FLUENTD_SECRET
  self_hostname "client01"

  secure yes
  ca_cert_path /etc/td-agent/ca_cert.pem

  <server>
    host efk-master
    port 24284
  </server>
</match>

Сохранить и выйти.

Примечание:

  • Измените значение self_hostname на имя хоста вашего клиента.

Теперь проверьте конфигурацию Fluentd и убедитесь, что нет ошибок, а затем перезапустите службу fluentd.

td-agent --dry-run
systemctl restart td-agent

Служба fluentd теперь запущена и работает на клиентских серверах Ubuntu и CentOS. Проверьте это с помощью команды netstat ниже.

netstat -plntu

И вы получите, что порт «42185» находится в состоянии LISTEN, используемом службой fluentd.

Настройка системного журнала

Отредактируйте файл конфигурации rsyslog /etc/rsyslog.conf с помощью редактора vim.

vim /etc/rsyslog.conf

Вставьте следующую конфигурацию в конец строки.

*.* @127.0.0.1:42185

Сохраните и выйдите, а затем перезапустите службу rsyslog.

systemctl restart rsyslog

Настройка клиентских серверов Ubuntu и CentOS завершена.

Шаг 4 — Тестирование

Откройте веб-браузер и введите URL-адрес стека EFK http://efk-stack.io.

Теперь вам будет предложено ввести пользователя и пароль для базового входа в систему с веб-сервера Nginx, введите «эластичного» пользователя со своим паролем.

И вы получите панель управления Kibana.

Нажмите кнопку «Настроить шаблоны индексов», затем определите шаблон индекса «fluentd-*».

Нажмите кнопку «Следующий шаг».

Для настройки шаблона индекса выберите имя поля фильтра для «@timestamp».

Нажмите кнопку «Создать индексный шаблон».

И был создан шаблон индекса fluentd.

Нажмите меню «Обнаружение» слева, чтобы получить все журналы сервера.

Ниже приведен пример неудачного входа в систему по ssh на клиентах Ubuntu и CentOS.

«client01» Ubuntu 18.04 журнал неудачных паролей ssh.

«client02» Журнал неудачных паролей CentOS 7 ssh.

Установка и настройка централизованных журналов с использованием стека EFK (Elasticsearch, Fluentd и Kibana) в Ubuntu 18.04 успешно завершены.

Ссылка

  • https://docs.fluentd.org/v1.0/articles/free-alternative-to-splunk-by-fluentd
  • https://docs.fluentd.org/v0.12/articles/forwarding-over-ssl

Статьи по данной тематике: