Elasticsearch Kibana Logstash на Ubuntu

Thank you for reading this post, don't forget to subscribe!

Elasticsearch предо­став­ля­ет меха­низм поис­ка, Kibana — веб-интер­фейс для рабо­ты с Elasticsearch, Logstash — инстру­мент для сбо­ра логов и их пере­да­чи в Elasticsearch. Таким обра­зом, связ­ка Elasticsearch + Kibana + Logstash (или ELK Stack) явля­ет­ся инстру­мен­том по сбо­ру и хра­не­нию жур­на­лов опе­ра­ци­он­ных систем

 

Подготовка сервера

Преж­де чем начать, под­го­то­вим к уста­нов­ке и настрой­ке наш сервер.

1. Обновление кэша apt

Для кор­рект­ной уста­нов­ки паке­тов, обнов­ля­ем спис­ки командой:

apt update

На новом сер­ве­ре, где не запу­ще­но ника­ких важ­ных сер­ви­сов так­же реко­мен­ду­ет­ся обно­вить пакеты:

apt upgrade

2. Выбор способа установки ELK

Мы рас­смот­рим два спо­со­ба уста­нов­ки про­грамм­ных про­дук­тов сте­ка ELK — из офи­ци­аль­но­го репо­зи­то­рия и с помо­щью deb-файла.

а) Для рабо­ты с репозиторием.

Дан­ный спо­соб явля­ет­ся пред­по­чти­тель­ным. Он удоб­нее и быст­рее в работе.

Импор­ти­ру­ем GPG-ключ для репозитория:

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

Уста­нав­ли­ва­ем пакет:

apt install apt-transport-https

Созда­ем файл:

vi /etc/apt/sources.list.d/elastic-8.x.list

Выпол­ним обнов­ле­ние кэша для добав­лен­но­го репозитория:

apt-get update -o Dir::Etc::sourcelist="/etc/apt/sources.list.d/elastic-8.x.list"

б) Для загруз­ки фай­лов deb.

Дан­ный спо­соб подой­дет, если для наше­го IP-адре­са забло­ки­ро­ван доступ к репо­зи­то­рию ELK. В этом слу­чае мож­но ска­чать уста­но­воч­ный файл с исполь­зо­ва­ни­ем VPN или прокси.

Ну, или такой спо­соб нам про­сто боль­ше нра­вит­ся — тогда при нали­чие досту­па для загруз­ки с сай­та ELK нам пона­до­бит­ся ути­ли­та для загруз­ки фай­лов — ста­вим ее на сервер:

apt install wget

3. Настройка брандмауэра

Откры­ва­ем пор­ты для рабо­ты ELK:

iptables -I INPUT -p tcp --dport 5044 -j ACCEPT

iptables -I INPUT -p tcp --dport 5601 -j ACCEPT

где:

  • 5044 — порт, на кото­ром слу­ша­ем Logstash.
  • 5601 — Kibana.

Для сохра­не­ния пра­вил исполь­зу­ем ути­ли­ту iptables-persistent:

apt install iptables-persistent

netfilter-persistent save

Установка Java

Все про­грамм­ные про­дук­ты сте­ка ELK раз­ра­бо­та­ны на Java, поэто­му не будут рабо­тать без соот­вет­ству­ю­щей плат­фор­мы на сер­ве­ре. Для это­го мы уста­но­вим пакет openjava:

apt install default-jdk

После окон­ча­ния уста­нов­ки мож­но вве­сти команду:

java -version

Она долж­на вер­нуть, при­мер­но, следующее:

Elasticsearch

Рас­смот­рим уста­нов­ку дву­мя способами.

а) Используем репозиторий

Вво­дим команду:

apt install elasticsearch

б) Deb-файл

Пере­хо­дим на стра­ни­цу загруз­ки эла­сти­ка и ска­чи­ва­ем DEB-пакет или копи­ру­ем на него ссылку:

Пере­но­сим файл на севрер или загру­жа­ем его на сер­ве­ре с исполь­зо­ва­ни­ем ско­пи­ро­ван­ной ссылки:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.2.3-amd64.deb

* в моем слу­чае была вер­сия 8.2.3.

После уста­нав­ли­ва­ем эла­стик на наш сервер:

dpkg -i elasticsearch-*.deb

После установки

По завер­ше­нии инстал­ля­ции мы долж­ны уви­деть сообщение:

* где MFVg1a6NpglV69yci_rr — пароль для поль­зо­ва­те­ля elastic. Его запи­сы­ва­ем — он нам при­го­дит­ся позже.

Если мы захо­тим сме­нить дан­ный пароль, вводим:

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

Раз­ре­ша­ем авто­за­пуск сер­ви­са и запус­ка­ем его:

systemctl enable elasticsearch --now

Про­ве­ря­ем рабо­то­спо­соб­ность сервиса:

curl -k -u elastic:MFVg1a6NpglV69yci_rr https://localhost:9200

* где elastic:MFVg1a6NpglV69yci_rr — логин elastic и пароль, кото­рый мы полу­чи­ли после установки.

Мы долж­ны уви­деть что-то на подобие:

Идем даль­ше.

Kibana

Так­же как и с Elasticsearch, рас­смот­рим уста­нов­ку дву­мя способами.

а) Используем репозиторий

Вво­дим команду:

apt install kibana

б) Deb-файл

Пере­хо­дим на стра­ни­цу загруз­ки Kibana и ска­чи­ва­ем ссыл­ку на послед­нюю вер­вию паке­та DEB:

На ком­пью­те­ре с досту­пом к сай­ту ELK ска­чи­ва­ем по ней пакет для уста­нов­ки kibana:

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.2.3-amd64.deb

Или в бра­у­зе­ре. После пере­но­сим пакет на целе­вой сер­вер и уста­нав­ли­ва­ем приложение:

dpkg -i kibana-*.deb

После установки

Откры­ва­ем на редак­ти­ро­ва­ние кон­фи­гу­ра­ци­он­ный файл:

vi /etc/kibana/kibana.yml

Редак­ти­ру­ем пара­метр host:

server.host: 192.168.1.10

* в дан­ном при­ме­ре мы гово­рим, что сер­вер дол­жен слу­шать на интер­фей­се 192.168.1.10.

Раз­ре­ша­ем авто­за­пуск Kibana и пере­за­пус­ка­ем ее:

systemctl enable kibana

systemctl restart kibana

Откры­ва­ем бра­у­зер и пере­хо­дим по ссыл­ке http://<IP-адрес сервера>:5601. Мы долж­ны уви­деть фор­му вво­да токена.

Пере­хо­дим на сер­вер и вво­дим коман­ду для полу­че­ния токена:

/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

На экране отоб­ра­зит­ся после­до­ва­тель­ность из сим­во­лов — копи­ру­ем ее и встав­ля­ем в Kibana. Кли­ка­ем по Configure Elastic:

Откро­ет­ся окно с вво­дом про­ве­роч­но­го кода. Воз­вра­ща­ем­ся на сер­вер и вво­дим команду:

/usr/share/kibana/bin/kibana-verification-code

Мы полу­чим 6-ти знач­ный код. Вво­дим его в окне Kibana:

Нажи­ма­ем Verify — нач­нет­ся про­цесс настрой­ки. После его завер­ше­ния мы уви­дим окно вво­да логи­на и паро­ля. На этом пока оста­нав­ли­ва­ем­ся и пере­хо­дим к настрой­ке Logstash.

Logstash

Отдель­но рас­смот­рим уста­нов­ку из репо­зи­то­рия, с исполь­зо­ва­ни­ем фай­ла deb и настройку.

а) Используем репозиторий

Вво­дим команду:

apt install logstash

б) Deb-файл

Про­цесс уста­нов­ки Logstash ана­ло­ги­чен — пере­хо­дим на стра­ни­цу загруз­ки про­грамм­но­го про­дук­та, копи­ру­ем ссыл­ку на пакет DEB:

Ска­чи­ва­ем пакет на нашем сер­ве­ре (или дру­гом ком­пью­те­ре и пере­но­сим на сервер):

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.2.3-amd64.deb

… и уста­нав­ли­ва­ем его:

dpkg -i logstash-*.deb

Настройка Logstash

Раз­ре­ша­ем авто­за­пуск и стар­ту­ем сервис:

systemctl enable logstash

systemctl start logstash

Настрой­ки для лог­ст­э­ша хра­нят­ся в ката­ло­ге /etc/logstash/conf.d в фай­лах фор­ма­та JSON. Для кон­фи­гу­ра­ции исполь­зу­ют­ся сле­ду­ю­щие секции:

  1. input (вход­ные данные).
  2. filter (филь­тры).
  3. output (выход­ные данные).

Для каж­дой из них мы созда­дим свой файл.

vi /etc/logstash/conf.d/input.conf

* в дан­ном при­ме­ре мы настро­и­ли logstash для при­е­ма логов на пор­ту 5044.

vi /etc/logstash/conf.d/filter.conf

vi /etc/logstash/conf.d/output.conf

Про­ве­рить кон­фи­гу­ра­цию мож­но командой:

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

Мы долж­ны увидеть:

Configuration OK

Пере­за­пус­ка­ем сер­вис logstash:

systemctl restart logstash

Немно­го подо­ждем — при­ло­же­нию нуж­но око­ло 1 мину­ты, что­бы запу­стить­ся. После, вве­дя команду:

ss -tunlp | grep 5044

… мы уви­дим что-то на подобие:

tcp  LISTEN   0   128   :::5044   :::*   users:(("java",pid=11745,fd=114))

Сер­вис запу­стил­ся и готов при­ни­мать логи.

Установка и настройка клиента

Для отправ­ки логов на сер­вер, мы будем исполь­зо­вать пакет Filebeat. Он под­дер­жи­ва­ет­ся для раз­лич­ных систем — Linux, Windows, Mac. Мы раз­бе­рем про­це­ду­ру уста­нов­ки и настрой­ки для первого.

Установка на Linux CentOS

Так­же как и сер­вер­ная часть, кли­ент может быть уста­нов­лен из репо­зи­то­рия или путем загруз­ки фай­ла. Мы рас­смот­рим оба варианта.

а) Используем репозиторий

Настра­и­ва­ем репо­зи­то­рий. Для это­го импор­ти­ру­ем ключ GPG:

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

Созда­ем файл:

vi /etc/yum.repos.d/elastic-8.x.repo

Уста­нав­ли­ва­ем filebeat:

yum install filebeat

б) RPM-файл

Инструк­ция под­хо­дит для CentOS / Red Hat / Fedora. Пере­хо­дим на стра­ни­цу загруз­ки Filebeat — копи­ру­ем ссыл­ку на уста­но­воч­ный пакет:

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

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.2.3-x86_64.rpm

* если систе­ма вер­нет ошиб­ку, уста­нав­ли­ва­ем wget коман­дой yum install wget

После уста­нав­ли­ва­ем пакет:

rpm -ivh filebeat-*.rpm

Установка на Linux Ubuntu

Так­же как и сер­вер­ная часть, кли­ент может быть уста­нов­лен из репо­зи­то­рия или путем загруз­ки фай­ла. Мы рас­смот­рим оба варианта.

а) Используем репозиторий

Настра­и­ва­ем репо­зи­то­рий (на сер­ве­ре это мы уже сде­ла­ли). Для это­го импор­ти­ру­ем ключ GPG:

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

Созда­ем файл:

vi /etc/apt/sources.list.d/elastic-8.x.list

Обнов­ля­ем кэш пакетов:

apt update

Уста­нав­ли­ва­ем filebeat:

apt install filebeat

б) Deb-файл

Инструк­ция под­хо­дит для Ubuntu / Debian. Пере­хо­дим на стра­ни­цу загруз­ки Filebeat — копи­ру­ем ссыл­ку на уста­но­воч­ный пакет:

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

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.2.3-amd64.deb

После уста­нав­ли­ва­ем пакет:

dpkg -i filebeat-*.deb

Настройка после установки

Откры­ва­ем кон­фи­гу­ра­ци­он­ный файл для filebeat:

vi /etc/filebeat/filebeat.yml

Нахо­дим раз­дел filebeat.inputs, в нем «type: log». Нам инте­рес­ны две опции — enabled и paths:

* в дан­ном при­ме­ре мы вклю­чи­ли опцию сбо­ра лога (enabled: true) и доба­ви­ли отправ­ку логов без­опас­но­сти (/var/log/secure) и систем­ных собы­тий (/var/log/messages, /var/log/systemd).

Нахо­дим опцию output.elasticsearch и ком­мен­ти­ру­ем 2 строки:

* так как мы соби­ра­ем­ся отправ­лять логи через Logstash, нам они будут мешать.

Нахо­дим настрой­ку отправ­ки лога в Logstash и сни­ма­ем ком­мен­та­рии, меня­ем адрес сер­ве­ра logstash и добав­ля­ем стро­ки с template — долж­но получиться:

* где 192.168.1.10 — адрес, на кото­ром кру­тит­ся наш сервер.

Раз­ре­ша­ем авто­за­пуск filebeat и пере­за­пус­ка­ем сервис:

systemctl enable filebeat

systemctl restart filebeat

Просмотр логов в Kibana

Откры­ва­ем наш веб-интер­фейс с киба­ной. Вво­дим логин elastic и пароль, кото­рый мы полу­чи­ли с помо­щью коман­ды elasticsearch-reset-password (в нашем при­ме­ре, MFVg1a6NpglV69yci_rr).

Кли­ка­ем по сим­во­лу меню - в раз­де­ле Analytics пере­хо­дим в Discover:

Мы долж­ны уви­деть логи с наше­го компьютера:

Наш ELK настро­ен и работает.

Отправка логов с помощью Rsyslog

Rsyslog явля­ет­ся часто встре­ча­е­мой ути­ли­той для отправ­ки жур­на­лов по сети на сер­вер логов. Сам по себе Rsyslog может высту­пать как отпра­ви­те­лем, так и при­ем­ни­ком. Мы же рас­смот­рим вари­ант его настрой­ки для отправ­ки логов в Logstash.

На кли­ен­те созда­ем кон­фи­гу­ра­ци­он­ный файл для опи­са­ния шаб­ло­на лога:

vi /etc/rsyslog.d/json-template.conf

Созда­ем кон­фи­гу­ра­ци­он­ный файл для отправ­ки логов на logstash:

vi /etc/rsyslog.d/logstash.conf

* где:

  • * — источ­ник логов. В нашем при­ме­ре это все логи.
  • .* — опи­са­ние важ­но­сти логов. В нашем при­ме­ре все уровни.
  • @@ — исполь­зу­ем TCP-про­то­кол. Одним сим­во­лом @ озна­чал бы UPD-протокол.
  • 192.168.1.10 — имя или адрес наше­го сер­ве­ра, куда необ­хо­ди­мо отправ­лять логи.
  • 5045 — порт, на кото­ром сер­вер при­мет логи. В нашем при­ме­ре это новый порт Logstash, кото­рый мы настро­им ниже.
  • json-template — ука­зы­ва­ет на шаб­лон, кото­рый мы долж­ны исполь­зо­вать. Дан­ный фор­мат тре­бу­ет­ся исполь­зо­вать для рабо­ты с ELK.

Пере­за­пус­ка­ем сервис:

systemctl restart rsyslog

На сер­ве­ре откро­ем файл:

vi /etc/logstash/conf.d/input.conf

Допи­шем:

После откры­ва­ем файл:

vi /etc/logstash/conf.d/output.conf

И допи­сы­ва­ем пра­ви­ло выше предыдущего:

* в нашем при­ме­ре мы логи с типом rsyslog без индек­са отправ­ля­ем в Elasticsearch.

Пере­за­пус­ка­ем logstash:

systemctl restart logstash

Если на нашем сер­ве­ре исполь­зу­ет­ся бранд­мау­эр, откры­ва­ем порт 5045:

iptables -I INPUT -p tcp --dport 5045 -j ACCEPT

Гото­во. Немно­го ждем и про­ве­ря­ем логи в Kibana. Что­бы обес­пе­чить боль­шой поток логов для про­вер­ки, кли­ен­та с Rsyslog мож­но перезагрузить.