Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
Elasticsearch 8 + Kibana + Logstash
- ALEXX
- Администратор
- Сообщения: 1350
- Зарегистрирован: 21 дек 2014, 14:59
- Откуда: Королёв
- Контактная информация:
Elasticsearch 8 + Kibana + Logstash
Прежде чем начать, подготовим к установке и настройке наш сервер.
1. Обновление кэша apt
Для корректной установки пакетов, обновляем списки командой:
Код: Выделить всё
apt update
Код: Выделить всё
apt upgrade
Мы рассмотрим два способа установки программных продуктов стека 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"
Данный способ подойдет, если для нашего IP-адреса заблокирован доступ к репозиторию ELK. В этом случае можно скачать установочный файл с использованием VPN или прокси.
Ну, или такой способ нам просто больше нравится — тогда при наличие доступа для загрузки с сайта ELK нам понадобится утилита для загрузки файлов — ставим ее на сервер:
Код: Выделить всё
apt install wget
Открываем порты для работы 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
Все программные продукты стека 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 пакет для Elasticsearch Переносим файл на севрер или загружаем его на сервере с использованием скопированной ссылки:
Код: Выделить всё
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.2.3-amd64.deb
После устанавливаем эластик на наш сервер:
Код: Выделить всё
dpkg -i elasticsearch-*.deb
По завершении инсталляции мы должны увидеть сообщение:
Код: Выделить всё
----------------- Security autoconfiguration information --------------------
...
The generated password for the elastic built-in superuser is : MFVg1a6NpglV69yci_rr
...
-----------------------------------------------------------------------------
Если мы захотим сменить данный пароль, вводим:
Код: Выделить всё
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
Код: Выделить всё
systemctl enable elasticsearch --now
Код: Выделить всё
curl -k -u elastic:MFVg1a6NpglV69yci_rr https://localhost:9200
Мы должны увидеть что-то на подобие:
Код: Выделить всё
{
"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
Переходим на страницу загрузки Kibana и скачиваем ссылку на последнюю вервию пакета DEB:
Скачиваем ссылку на DEB пакет для Kibana На компьютере с доступом к сайту ELK скачиваем по ней пакет для установки kibana:
Код: Выделить всё
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.2.3-amd64.deb
Код: Выделить всё
dpkg -i kibana-*.deb
Открываем на редактирование конфигурационный файл:
Код: Выделить всё
vi /etc/kibana/kibana.yml
Код: Выделить всё
server.host: 192.168.1.10
Разрешаем автозапуск Kibana и перезапускаем ее:
Код: Выделить всё
systemctl enable kibana
Код: Выделить всё
systemctl restart kibana
Переходим на сервер и вводим команду для получения токена:
Код: Выделить всё
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
Откроется окно с вводом проверочного кода. Возвращаемся на сервер и вводим команду:
Код: Выделить всё
/usr/share/kibana/bin/kibana-verification-code
Вводим полученный проверочный код
Нажимаем Verify — начнется процесс настройки. После его завершения мы увидим окно ввода логина и пароля. На этом пока останавливаемся и переходим к настройке Logstash.
Logstash
Отдельно рассмотрим установку из репозитория, с использованием файла deb и настройку.
а) Используем репозиторий
Вводим команду:
Код: Выделить всё
apt install logstash
Процесс установки Logstash аналогичен — переходим на страницу загрузки программного продукта, копируем ссылку на пакет DEB:
Скачиваем ссылку на DEB пакет для Logstash
Скачиваем пакет на нашем сервере (или другом компьютере и переносим на сервер):
Код: Выделить всё
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.2.3-amd64.deb
Код: Выделить всё
dpkg -i logstash-*.deb
Разрешаем автозапуск и стартуем сервис:
Код: Выделить всё
systemctl enable logstash
Код: Выделить всё
systemctl start logstash
input (входные данные).
filter (фильтры).
output (выходные данные).
Для каждой из них мы создадим свой файл.
Код: Выделить всё
vi /etc/logstash/conf.d/input.conf
Код: Выделить всё
input {
beats {
port => 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
Код: Выделить всё
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
Код: Выделить всё
yum install filebeat
Инструкция подходит для CentOS / Red Hat / Fedora. Переходим на страницу загрузки Filebeat — копируем ссылку на установочный пакет:
Скачиваем ссылку на RPM пакет для Filebeat
Используя скопированную ссылку, скачиваем пакет на сервере:
Код: Выделить всё
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.2.3-x86_64.rpm
После устанавливаем пакет:
Код: Выделить всё
rpm -ivh filebeat-*.rpm
Также как и серверная часть, клиент может быть установлен из репозитория или путем загрузки файла. Мы рассмотрим оба варианта.
а) Используем репозиторий
Настраиваем репозиторий (на сервере это мы уже сделали). Для этого импортируем ключ 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
Инструкция подходит для 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
Код: Выделить всё
...
enabled: true
...
paths:
- /var/log/*.log
#- c:\programdata\elasticsearch\logs\*
- /var/log/secure
- /var/log/messages
- /var/log/syslog
...
Находим опцию output.elasticsearch и комментируем 2 строки:
Код: Выделить всё
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Находим настройку отправки лога в 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
Разрешаем автозапуск filebeat и перезапускаем сервис:
Код: Выделить всё
systemctl enable filebeat
Код: Выделить всё
systemctl restart filebeat
Открываем наш веб-интерфейс с кибаной. Вводим логин 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")
}
Код: Выделить всё
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"
}
}
...
Перезапускаем logstash:
Код: Выделить всё
systemctl restart logstash
Код: Выделить всё
iptables -I INPUT -p tcp --dport 5045 -j ACCEPT
источник