Прежде чем начать, подготовим к установке и настройке наш сервер.
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 ACCEPT5044 — порт, на котором слушаем 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 logstashinput (входные данные).
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 -tConfiguration 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 mainapt 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источник
