Используемые термины: Elasticsearch , Ubuntu .
Если в двух словах, Elasticsearch предоставляет механизм поиска, Kibana — веб-интерфейс для работы с Elasticsearch, Logstash — инструмент для сбора логов и их передачи в Elasticsearch. Таким образом, связка Elasticsearch + Kibana + Logstash (или ELK Stack) является инструментом по сбору и хранению журналов операционных систем. При этом поддерживаются разные платформы (Windows, Linux, BSD).
В данной инструкции мы рассмотрим пример установки серверной части ELK версии 8 на Linux Ubuntu. Также мы настроим сбор логов с CentOS и Ubuntu.
Готовим сервер
Устанавливаем Java
Elasticsearch
Kibana
Logstash
Устанавливаем и настраиваем клиента
Linux CentOS
Linux Ubuntu
Настройка после установки
Использование Kibana для просмотра логов
Отправка логов из Rsyslog в Logstash
Пример сбора логов для NGINX
Прежде чем начать, подготовим к установке и настройке наш сервер.
Для корректной установки пакетов, обновляем списки командой:
apt update
На новом сервере, где не запущено никаких важных сервисов также рекомендуется обновить пакеты:
apt upgrade
Мы рассмотрим два способа установки программных продуктов стека ELK — из официального репозитория и с помощью deb-файла.
а) Для работы с репозиторием.
Данный способ является предпочтительным. Он удобнее и быстрее в работе.
Импортируем GPG-ключ для репозитория:
wget -qO — https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add —
Если мы увидим сообщение Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)) , то можно добавить ключ командой:
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | gpg —no-default-keyring —keyring gnupg-ring:/etc/apt/trusted.gpg.d/elasticsearch-keyring.gpg —import
Устанавливаем пакет:
apt install apt-transport-https
Создаем файл:
vi /etc/apt/sources.list.d/elastic-8.x.list
deb 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
Открываем порты для работы ELK:
iptables -I INPUT -p tcp —dport 5044 -j ACCEPT
iptables -I INPUT -p tcp —dport 5601 -j ACCEPT
где:
Для сохранения правил используем утилиту 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)
Рассмотрим установку двумя способами.
Вводим команду:
apt install elasticsearch
Переходим на страницу загрузки эластика и скачиваем DEB-пакет или копируем на него ссылку:
Переносим файл на севрер или загружаем его на сервере с использованием скопированной ссылки:
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»
}
Идем дальше.
Также как и с Elasticsearch, рассмотрим установку двумя способами.
Вводим команду:
apt install kibana
Переходим на страницу загрузки 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.
Отдельно рассмотрим установку из репозитория, с использованием файла deb и настройку.
Вводим команду:
apt install logstash
Процесс установки Logstash аналогичен — переходим на страницу загрузки программного продукта, копируем ссылку на пакет DEB:
Скачиваем пакет на нашем сервере (или другом компьютере и переносим на сервер):
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.2.3-amd64.deb
… и устанавливаем его:
dpkg -i logstash-*.deb
Разрешаем автозапуск и стартуем сервис:
systemctl enable logstash
systemctl start logstash
Настройки для логстэша хранятся в каталоге /etc/logstash/conf.d в файлах формата JSON. Для конфигурации используются следующие секции:
Для каждой из них мы создадим свой файл.
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»
}
}
* обратите внимание, что MFVg1a6NpglV69yci_rr — наш пароль для пользователя elastic, который нужно заменить на тот, что был выдан при установке эластика.
Проверить конфигурацию можно командой:
/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. Мы разберем процедуру установки и настройки для первого.
Также как и серверная часть, клиент может быть установлен из репозитория или путем загрузки файла. Мы рассмотрим оба варианта.
Настраиваем репозиторий. Для этого импортируем ключ 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
Инструкция подходит для 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
Также как и серверная часть, клиент может быть установлен из репозитория или путем загрузки файла. Мы рассмотрим оба варианта.
Настраиваем репозиторий (на сервере это мы уже сделали). Для этого импортируем ключ 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 — копируем ссылку на установочный пакет:
Используя скопированную ссылку, скачиваем пакет на компьютер:
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
Открываем наш веб-интерфейс с кибаной. Вводим логин elastic и пароль, который мы получили с помощью команды elasticsearch-reset-password (в нашем примере, MFVg1a6NpglV69yci_rr).
Кликаем по символу меню — в разделе Analytics переходим в Discover :
Мы должны увидеть логи с нашего компьютера:
Наш ELK настроен и работает.
Rsyslog является часто встречаемой утилитой для отправки журналов по сети на сервер логов. Сам по себе Rsyslog может выступать как отправителем, так и приемником. Мы же рассмотрим вариант его настройки для отправки логов в Logstash.
На клиенте создаем конфигурационный файл для описания шаблона лога:
vi /etc/rsyslog.d/json-template.conf
template(name=»json-template»
) {
constant()
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
* где:
Перезапускаем сервис:
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 можно перезагрузить.
Рассмотрим реальный пример сбора логов с конкретного приложения. Мы настроим два варианта:
Первый вариант похож на тот, что мы уже рассмотрели, а вот второй позволит нам напрямую отправить лог из nginx в logstash.
Открываем конфигурационный файл Filebeat:
vi /etc/filebeat/filebeat.yml
В раздел paths добавим путь для сбора логов nginx:
paths:
…
— /var/log/nginx/*.log
* обратите внимание, что путь до логов nginx ( /var/log/nginx ), которые вы захотите собирать, может быть другим, но данный путь является стандартным.
Перезапускаем filebeat:
systemctl restart filebeat
Делаем несколько запросов к веб-серверу, открываем kibana и вводим в фильтр «nginx»:
Для отправки логов из nginx в logstash мы будем использовать стандарт syslog. Для этого добавим прослушавание в сам logstash:
vi /etc/logstash/conf.d/input.conf
Допишем:
…
syslog {
port => 5140
}
…
* в нашем примере logstash будет принимать логи стандарта syslog на порту 5140 .
Перезапускаем logstash:
systemctl restart logstash
Откроем конфигурационный файл nginx:
vi /etc/nginx/nginx.conf
* обратите внимание, что в вашем случае для настройки виртуальных доменов может использоваться несколько разных конфигурационных файлов.
Формат логов приводим к виду:
log_format logstash ‘$remote_addr — $remote_user [$time_local] «$host» ‘
‘»$request» $status $body_bytes_sent ‘
‘»$http_referer» «$http_user_agent»‘;
А настройку логов приводим к виду:
access_log syslog:server=localhost:5140,tag=nginx_access logstash;
error_log syslog:server=localhost:5140,tag=nginx_error notice;
* в данном примере мы отправим логи на сервер localhost (локальный, но если настройка выполняется удаленно, то необходимо указать имя сервера или IP-адрес) и порт 5140 , который мы настроили на logstash.
Перезапускаем nginx:
nginx -t && nginx -s reload
Проверяем логи.
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…