Как установить стек 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
Что мы будем делать?
-
Глобальная конфигурация сервера
- Настроить НТП
- Увеличение максимального дескриптора файла
- Оптимизация параметров сетевого ядра
Настройка сервера ЕФК
- Установить Java
- Установите и настройте Elasticsearch
- Установите и настройте Кибану
- Установите и настройте Nginx в качестве обратного прокси для Kibana
- Установите и настройте Fluentd
Настройка клиентов Ubuntu и CentOS
- Установите и настройте Fluentd
- Настройка системного журнала
- Тестирование
Шаг 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