Как установить эластичный стек на Ubuntu 16.04
Elasticsearch – это поисковая система с открытым исходным кодом, основанная на Lucene и разработанная на языке java. Он предоставляет распределенную и многопользовательскую полнотекстовую поисковую систему с веб-интерфейсом HTTP Dashboard (Kibana) и схемой документов JSON. Elasticsearch — это масштабируемая поисковая система, которую можно использовать для поиска всех типов документов, включая файл журнала. Elasticsearch — это сердце Elastic Stack или ELK Stack.
Logstash – это инструмент с открытым исходным кодом для управления системными событиями и журналами. Он обеспечивает конвейерную обработку в реальном времени для сбора данных. Logstash соберет журнал или данные, преобразует все данные в документы JSON и сохранит их в Elasticsearch.
Kibana — это интерфейс визуализации данных для Elasticsearch. Kibana предоставляет симпатичную панель инструментов (веб-интерфейсы), она позволяет вам самостоятельно управлять и визуализировать все данные из Elasticsearch. Он не только красивый, но и мощный.
В этом руководстве я покажу вам, как установить и настроить Elastic Stack на одном сервере Ubuntu 16.04 для мониторинга журналов сервера и как установить Elastic beats на клиентские ПК с операционными системами Ubuntu 16.04 и CentOS 7.
Необходимое условие
- Ubuntu 16.04, 64-разрядный сервер с 4 ГБ ОЗУ, имя хоста — elk-master
- Клиент Ubuntu 16.04, 64-разрядная версия, 1 ГБ ОЗУ, имя хоста — elk-client1
- Клиент CentOS 7, 64-разрядная версия, 1 ГБ ОЗУ, имя хоста — elk-client2
Шаг 1 — Установите Java
Java требуется для развертывания эластичного стека. Для Elasticsearch требуется Java 8. Рекомендуется использовать Oracle JDK 1.8. Мы установим Java 8 из репозитория PPA.
Установите новый пакет python-software-properties, чтобы мы могли легко добавить новый репозиторий с помощью команды apt.
sudo apt-get update
sudo apt-get install -y python-software-properties software-properties-common apt-transport-https
Добавьте новый репозиторий Java 8 PPA с помощью команды add-apt-repository, затем обновите репозиторий.
sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
Установите Java 8 из репозитория PPA webpub8.
sudo apt-get install -y oracle-java8-installer
По завершении установки убедитесь, что Java правильно установлена в системе, проверив версию Java.
java -version
Шаг 2. Установите и настройте Elasticsearch.
На этом этапе мы установим и настроим Elasticsearch. Установите Elasticsearch из эластичного репозитория и настройте его для работы на локальном IP-адресе.
Перед установкой Elasticsearch добавьте на сервер ключ эластичного репозитория.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Добавьте эластичный репозиторий 5.x в каталог sources.list.d.
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
Обновите репозиторий и установите Elasticsearch 5.1 с помощью приведенной ниже команды apt.
sudo apt-get update
sudo apt-get install -y elasticsearch
Установлен эластичный поиск. Теперь перейдите в каталог конфигурации и отредактируйте файл конфигурации elasticsaerch.yml.
cd /etc/elasticsearch/
vim elasticsearch.yml
Включите блокировку памяти для Elasticsearch, удалив комментарий в строке 43. Мы делаем это, чтобы отключить подкачку памяти для Elasticsearch, чтобы не перегружать сервер.
bootstrap.memory_lock: true
В блоке Network раскомментируйте строки network.host и http.port.
network.host: localhost
http.port: 9200
Сохраните файл и выйдите из vim.
Теперь отредактируйте файл службы elasticsearch для конфигурации блокировки памяти mlockall.
vim /usr/lib/systemd/system/elasticsearch.service
Раскомментируйте строку LimitMEMLOCK.
LimitMEMLOCK=infinity
Сохраните файл и выйдите.
Отредактируйте конфигурацию Elasticsearch по умолчанию в каталоге /etc/default.
vim /etc/default/elasticsearch
Раскомментируйте строку 60 и убедитесь, что значение не ограничено.
MAX_LOCKED_MEMORY=unlimited
Сохранить и выйти.
Настройка Elasticsearch завершена. Elasticsearch будет работать под IP-адресом локального хоста с портом 9200, и мы отключили память подкачки, включив mlockall на сервере Ubuntu.
Перезагрузите файл службы Elasticsearch и включите его во время загрузки, затем запустите службу.
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Подождите секунду, пока запустится Elasticsearch, затем проверьте открытый порт на сервере и убедитесь, что порт 9200 находится в состоянии LISTEN.
netstat -plntu
Затем проверьте блокировку памяти, чтобы убедиться, что mlockall включен. Также убедитесь, что Elasticsearch работает с приведенными ниже командами.
curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'
Ниже вы увидите результаты.
Шаг 3 — Установите и настройте Kibana с Nginx
На этом этапе мы установим и настроим Kibana за веб-сервером Nginx. Kibana будет прослушивать только IP-адрес локального хоста, а Nginx выступает в качестве обратного прокси-сервера для приложения Kibana.
Установите Kibana с помощью этой команды:
sudo apt-get install -y kibana
Теперь отредактируйте файл конфигурации kibana.yml.
vim /etc/kibana/kibana.yml
Раскомментируйте строки server.port, server.hos и elasticsearch.url.
server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"
Сохраните файл и выйдите из vim.
Добавьте Kibana для запуска при загрузке и запустите его.
sudo systemctl enable kibana
sudo systemctl start kibana
Kibana будет работать на порту 5601 как узловое приложение.
netstat -plntu
Установка Kibana завершена, теперь нам нужно установить Nginx и настроить его как обратный прокси-сервер, чтобы иметь доступ к Kibana с общедоступного IP-адреса.
Затем установите пакеты Nginx и apache2-utils.
sudo apt-get install -y nginx apache2-utils
Apache2-utils — это пакет, содержащий инструменты для веб-сервера, которые также работают с Nginx, мы будем использовать базовую аутентификацию htpasswd для Kibana.
Nginx установлен. Теперь нам нужно создать новый файл конфигурации виртуального хоста в каталоге, доступном для сайтов Nginx. Создайте новый файл kibana с помощью vim.
cd /etc/nginx/
vim sites-available/kibana
Вставьте конфигурацию ниже.
server {
listen 80;
server_name elk-stack.co;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Сохраните файл и выйдите из vim.
Создайте новый файл базовой аутентификации с помощью команды htpasswd.
sudo htpasswd -c /etc/nginx/.kibana-user admin
TYPE YOUR PASSWORD
Активируйте виртуальный хост кибаны, создав символическую ссылку из файла кибаны на сайтах, доступных для каталога с поддержкой сайтов.
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
Протестируйте конфигурацию nginx и убедитесь в отсутствии ошибок, затем добавьте nginx для запуска во время загрузки и перезапустите nginx.
nginx -t
systemctl enable nginx
systemctl restart nginx
Шаг 4 — Установите и настройте Logstash
На этом этапе мы установим и настроим Logsatash для централизации журналов сервера из клиентских источников с помощью filebeat, затем отфильтруем и преобразуем все данные (Syslog) и перенесем их в тайник (Elasticsearch).
Установите Logstash 5 с помощью приведенной ниже команды apt.
sudo apt-get install -y logstash
Отредактируйте файл hosts с помощью vim.
vim /etc/hosts
Добавьте IP-адрес сервера и имя хоста.
10.0.15.10 elk-master
Сохраните файл hosts и выйдите из редактора.
Теперь создайте новый файл сертификата SSL с помощью OpenSSL, чтобы клиентские источники могли идентифицировать эластичный сервер.
cd /etc/logstash/
openssl req -subj /CN=elk-master -x509 -days 3650 -batch -nodes -newkey rsa:4096 -keyout logstash.key -out logstash.crt
Измените значение /CN на эластичное имя хоста сервера.
Файлы сертификатов будут созданы в каталоге /etc/logstash/.
Далее мы создадим файлы конфигурации для logstash. Мы создадим файл конфигурации filebeat-input.conf в качестве входного файла из filebeat, syslog-filter.conf для обработки системного журнала, а затем файл output-elasticsearch.conf для определения выходных данных Elasticsearch.
Перейдите в каталог конфигурации logstash и создайте новые файлы конфигурации в каталоге conf.d.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
Введите конфигурацию, вставьте конфигурацию ниже.
input {
beats {
port => 5443
type => syslog
ssl => true
ssl_certificate => "/etc/logstash/logstash.crt"
ssl_key => "/etc/logstash/logstash.key"
}
}
Сохранить и выйти.
Создайте файл syslog-filter.conf.
vim conf.d/syslog-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" ]
}
}
}
Мы используем подключаемый модуль фильтра grok для анализа файлов системного журнала.
Сохранить и выйти.
Создайте выходной файл конфигурации output-elasticsearch.conf.
vim conf.d/output-elasticsearch.conf
Вставьте конфигурацию ниже.
output {
elasticsearch { hosts => ["localhost:9200"]
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
Сохранить и выйти.
Когда это будет сделано, добавьте logstash для запуска во время загрузки и запустите службу.
sudo systemctl enable logstash
sudo systemctl start logstash
Шаг 5 — Установите и настройте Filebeat на клиенте Ubuntu
Подключитесь к серверу как root с учетной записью ssh.
ssh
Скопируйте файл сертификата на клиент с помощью команды scp.
scp :/etc/logstash/logstash.crt .
Отредактируйте файл hosts и добавьте IP-адрес elk-master.
vim /etc/hosts
Добавьте приведенную ниже конфигурацию в конец файла.
10.0.15.10 elk-master
Сохранить и выйти.
Теперь нам нужно добавить эластичный ключ на сервер elk-client1.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Мы будем использовать эластичный репозиторий с транспортом загрузки https, поэтому нам нужно установить пакет apt-transport-https на сервер.
sudo apt-get install -y apt-transport-https
Добавьте эластичный репозиторий и обновите все репозитории Ubuntu.
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update
Теперь установите filebeat с помощью команды apt.
sudo apt-get install -y filebeat
Затем перейдите в каталог конфигурации filebeat и отредактируйте файл filebeat.yml с помощью vim.
cd /etc/filebeat/
vim filebeat.yml
Добавьте новые файлы журнала в конфигурацию путей.
paths:
- /var/log/auth.log
- /var/log/syslog
Установите тип документа syslog.
document-type: syslog
Отключите вывод elasticsearch, добавив комментарии к строкам.
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Включите вывод logstash, раскомментируйте конфигурацию и измените значение, как показано ниже.
output.logstash:
# The Logstash hosts
hosts: ["elk-master:5443"]
bulk_max_size: 2048
ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
Сохранить и выйти.
Переместите файл сертификата в каталог filebeat.
mv ~/logstash.crt /etc/filebeat/
Запустите filebeat и добавьте его для запуска во время загрузки.
sudo systemctl start filebeat
sudo systemctl enable filebeat
Проверьте статус службы.
sudo systemctl status filebeat
Шаг 6 — Установите и настройте Filebeat на клиенте CentOS
Beats — это поставщики данных, легкие агенты, которые можно установить на клиентских узлах для отправки огромных объемов данных с клиентского компьютера на сервер Logstash или Elasticsearch. Доступны 4 бита: Filebeat для файлов журналов, Metricbeat для метрик, Packetbeat для сетевых данных и Winlogbeat для журнала событий клиента Windows.
В этом руководстве я покажу вам, как установить и настроить Filebeat для отправки данных журнала на сервер logstash через безопасное соединение SSL.
Скопируйте файл сертификата с эластичного сервера на сервер client1. Войдите на сервер client1.
ssh
Скопируйте файл сертификата с помощью команды scp.
scp :/etc/logstash/logstash.crt .
TYPE elk-server password
Отредактируйте файл hosts и добавьте адрес сервера elk-master.
vim /etc/hosts
Добавьте адрес сервера elk-master.
10.0.15.10 elk-master
Сохранить и выйти.
Затем импортируйте эластичный ключ на сервер elk-client2.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Добавьте эластичный репозиторий на сервер.
cd /etc/yum.repos.d/
vim elastic.repo
Вставьте конфигурацию ниже.
[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Сохранить и выйти.
Установите filebeat с помощью этой команды yum.
sudo yum -y install filebeat
Filebeat установлен, теперь перейдите в каталог конфигурации и отредактируйте файл filebeat.yml.
cd /etc/filebeat/
vim filebeat.yml
В строке 21 раздела путей добавьте несколько новых файлов журнала, здесь мы добавим два файла: /var/log/secure для активности ssh и /var/log/messages для журнала сервера.
paths:
- /var/log/secure
- /var/log/messages
Добавьте новую конфигурацию в строку 26, чтобы определить тип файла для системного журнала.
document-type: syslog
По умолчанию filebeat использует в качестве выходных данных elasticsearch. В этом уроке мы изменим его на logshtash. Отключите вывод elasticsearch, добавив комментарии к строкам 83 и 85.
Отключить вывод эластичного поиска.
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Теперь добавьте новую конфигурацию вывода logstash, раскомментируйте конфигурацию вывода logstash и измените все значения на те, которые показаны в конфигурации ниже.
output.logstash:
# The Logstash hosts
hosts: ["elk-master:5443"]
bulk_max_size: 2048
ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
Сохранить и выйти.
Добавьте filebeat для запуска при загрузке и запустите его.
sudo systemctl enable filebeat
sudo systemctl start filebeat
Теперь вы можете проверить и просмотреть файл журнала filebeat, чтобы убедиться, что он работает правильно.
tail -f /var/log/filebeat/filebeat
Шаг 8 — Тестирование
Откройте веб-браузер и зайдите в домен эластичного стека, который вы настроили в конфигурации nginx, мой — elk-stack.co, введите имя пользователя-администратора с паролем и нажмите Enter, чтобы войти в панель управления Kibana.
Создайте новый индекс по умолчанию filebeat-* и нажмите Создать.
Индекс по умолчанию создан. Если у вас есть несколько битов в эластичном стеке, вы можете настроить бит по умолчанию, просто нажав кнопку звездочка.
Перейдите в раздел Обнаружение, и вы увидите все файлы журналов с серверов elk-client1 и elk-client2.
Пример вывода JSON из журнала сервера elk-client1 для недопустимого входа в систему ssh.
И с приборной панелью Kibana вы можете сделать гораздо больше, просто попробуйте!
Elastic Stack был установлен на сервере Ubuntu 16.04, Filebeat был установлен на клиентских серверах Ubuntu и CentOS.