Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

Elasticsearch 8 + Kibana + Logstash

Ответить
Аватара пользователя
ALEXX
Администратор
Администратор
Сообщения: 1327
Зарегистрирован: 21 дек 2014, 14:59
Откуда: Королёв
Контактная информация:

Elasticsearch 8 + Kibana + Logstash

Сообщение ALEXX »

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

Прежде чем начать, подготовим к установке и настройке наш сервер.
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

Код: Выделить всё

deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main
Выполним обновление кэша для добавленного репозитория:

Код: Выделить всё

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
Она должна вернуть, примерно, следующее:

Код: Выделить всё

openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1, mixed mode, sharing)
Elasticsearch
Рассмотрим установку двумя способами.
а) Используем репозиторий

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

Код: Выделить всё

apt install elasticsearch
б) Deb-файл

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

Скачиваем ссылку на DEB пакет для Elasticsearch
01.jpg
01.jpg (22.35 КБ) 550 просмотров
Переносим файл на севрер или загружаем его на сервере с использованием скопированной ссылки:

Код: Выделить всё

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.2.3-amd64.deb
* в моем случае была версия 8.2.3.

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

Код: Выделить всё

dpkg -i elasticsearch-*.deb
После установки

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

Код: Выделить всё

----------------- Security autoconfiguration information --------------------
...
The generated password for the elastic built-in superuser is : MFVg1a6NpglV69yci_rr
...
-----------------------------------------------------------------------------
* где 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 и пароль, который мы получили после установки.

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

Код: Выделить всё

{
  "name" : "elk",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "uZQ6-MAqThyLq3OJgU5-fQ",
  "version" : {
    "number" : "8.2.3",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "9905bfb62a3f0b044948376b4f607f70a8a151b4",
    "build_date" : "2022-06-08T22:21:36.455508792Z",
    "build_snapshot" : false,
    "lucene_version" : "9.1.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}
Идем дальше.
Kibana

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

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

Код: Выделить всё

apt install kibana
б) Deb-файл

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

Скачиваем ссылку на DEB пакет для Kibana
01.jpg
01.jpg (22.35 КБ) 550 просмотров
На компьютере с доступом к сайту 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:
08.jpg
08.jpg (47.81 КБ) 550 просмотров
Вводим токен для подключения к Elasticsearch

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

Код: Выделить всё

/usr/share/kibana/bin/kibana-verification-code
Мы получим 6-ти значный код. Вводим его в окне Kibana:
09.jpg
09.jpg (20.1 КБ) 550 просмотров
Вводим полученный проверочный код

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

Logstash

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

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

Код: Выделить всё

apt install logstash
б) Deb-файл

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

Скачиваем ссылку на DEB пакет для Logstash
01.jpg
01.jpg (22.35 КБ) 550 просмотров
Скачиваем пакет на нашем сервере (или другом компьютере и переносим на сервер):

Код: Выделить всё

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. Для конфигурации используются следующие секции:

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

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

Код: Выделить всё

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

Код: Выделить всё

input {
  beats {
    port => 5044
  }
}
* в данном примере мы настроили logstash для приема логов на порту 5044.

Код: Выделить всё

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

Код: Выделить всё

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

Код: Выделить всё

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

Код: Выделить всё

output {
  elasticsearch {
    hosts => ["https://localhost:9200"]
    ssl => true
    ssl_certificate_verification => false
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    user => elastic
    password => "MFVg1a6NpglV69yci_rr"
  }
}
Проверить конфигурацию можно командой:

Код: Выделить всё

/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

Код: Выделить всё

[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Устанавливаем filebeat:

Код: Выделить всё

yum install filebeat
б) RPM-файл

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

Скачиваем ссылку на RPM пакет для 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

Код: Выделить всё

deb https://artifacts.elastic.co/packages/8.x/apt stable main
Обновляем кэш пакетов:

apt update

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

Код: Выделить всё

apt install filebeat
б) Deb-файл

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

Скачиваем ссылку на DEB пакет для 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
   ...
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*
    - /var/log/secure
    - /var/log/messages
    - /var/log/syslog
...
* в данном примере мы включили опцию сбора лога (enabled: true) и добавили отправку логов безопасности (/var/log/secure) и системных событий (/var/log/messages, /var/log/systemd).

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

Код: Выделить всё

#output.elasticsearch:
  # Array of hosts to connect to.
#  hosts: ["localhost:9200"]
* так как мы собираемся отправлять логи через Logstash, нам они будут мешать.

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

Код: Выделить всё

output.logstash:
  # The Logstash hosts
  hosts: ["192.168.1.10:5044"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false
* где 192.168.1.10 — адрес, на котором крутится наш сервер.

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

Код: Выделить всё

systemctl enable filebeat

Код: Выделить всё

systemctl restart filebeat
Просмотр логов в Kibana

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

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

Открываем Kibana и переходим в раздел для просмотра логов

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

Список логов в Kibana

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

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

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

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

Код: Выделить всё

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

Код: Выделить всё

template(name="json-template"
  type="list") {
    constant(value="{")
      constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")
      constant(value="\",\"@version\":\"1")
      constant(value="\",\"message\":\"")     property(name="msg" format="json")
      constant(value="\",\"sysloghost\":\"")  property(name="hostname")
      constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
      constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
      constant(value="\",\"programname\":\"") property(name="programname")
      constant(value="\",\"procid\":\"")      property(name="procid")
    constant(value="\"}\n")
}
Создаем конфигурационный файл для отправки логов на logstash:

Код: Выделить всё

vi /etc/rsyslog.d/logstash.conf

Код: Выделить всё

*.* @@192.168.1.10:5045;json-template
* где:

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

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

Код: Выделить всё

systemctl restart rsyslog
На сервере откроем файл:

Код: Выделить всё

vi /etc/logstash/conf.d/input.conf
Допишем:

Код: Выделить всё

  ...
  tcp {
    port => 5045
    codec => "json"
    type => "rsyslog"
  }
  ...
После открываем файл:

Код: Выделить всё

vi /etc/logstash/conf.d/output.conf
И дописываем правило выше предыдущего:

Код: Выделить всё

output {
  if [type] == "rsyslog" {
    elasticsearch {
      hosts => [ "https://localhost:9200" ]
      ssl => true
      ssl_certificate_verification => false
      user => elastic
      password => "MFVg1a6NpglV69yci_rr"
    }
  }
  ...
* в нашем примере мы логи с типом rsyslog без индекса отправляем в Elasticsearch.

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

Код: Выделить всё

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

Код: Выделить всё

iptables -I INPUT -p tcp --dport 5045 -j ACCEPT
Готово. Немного ждем и проверяем логи в Kibana. Чтобы обеспечить большой поток логов для проверки, клиента с Rsyslog можно перезагрузить.
источник
Ответить

Вернуться в «Программы в Linux»