Установка стека Elastic в Ubuntu 20.04

Стек Elastic (ранее ELK) – это набор открытых программ, разработанных компанией Elastic, который позволяет выполнять поиск, анализ и визуализацию логов любого источника в любом формате. Такая практика называется централизованным логированием. Такое логирование очень полезно при выявлении проблем и неполадок сервера или приложения, поскольку все данные логов собираются в одном месте. Также с помощью этого можно очень быстро обнаружить неполадку, которая влияет на работу сразу нескольких серверов в кластере, сопоставив их логи за определенный период времени.

Стек Elastic включает четыре основных компонентов:

  • Elasticsearch: распределенная поисковая система RESTful, которая хранит все собранные данные.
  • Logstash: компонент для обработки данных, который отправляет входящие данные на Elasticsearch.
  • Kibana: веб-интерфейс для поиска и визуализации логов.
  • Beats: легкие специализированные отправители данных; могут передавать данные на Logstash или Elasticsearch с сотен или тысяч машин.

Данный мануал поможет установить Elastic Stack на сервер Ubuntu 20.04. Вы узнаете, как установить все компоненты, включая Filebeat (Beat для пересылки и централизации логов и файлов), и настроить их для сбора и визуализации системных логов. Обычно Kibana устанавливается только на локальном хосте, потому мы настроим прокси Nginx, чтобы получить доступ к Kibana через веб-браузер. Мы установим все эти компоненты на один сервер.

Примечание: В стеке Elastic нужно использовать одинаковые версии всех компонентов. В этом мануале мы установим последние версии пакетов, это Elasticsearch 7.7.1, Kibana 7.7.1, Logstash 7.7.1, and Filebeat 7.7.1.

Требования

  • Сервер Ubuntu 20.04, настроенный по этому мануалу.
  • Объем CPU, RAM и хранилища сервера ELK зависит от объема логов, которые вы будете собирать. В данном мануале используется сервер с такими характеристиками: RAM: 4GB, CPU: 2.
  • OpenJDK 11 (инструкции по установке вы найдете в мануале Установка Java с помощью apt в Ubuntu 20.04).
  • Nginx, прокси-сервер для Kibana. Инструкции по установке можно найти здесь.

Также очень важно обеспечить безопасность сервера, поскольку стек Elastic используется для доступа к ценной информации, которую не должны видеть неавторизованные пользователи. Для этого создайте сертификат TLS/SSL. Это необязательно, но настоятельно рекомендуется сделать.

Настройка Nginx будет меняться, а потому вы можете выполнить Создание сертификата Let’s Encrypt для Nginx в Ubuntu 20.04 в конце второго раздела. Если вы собираетесь это сделать, вам понадобится:

  • FQDN. Здесь используется условный домен your_domain.
  • Две записи А – для www.your_domain и your_domain – указывающие на внешний IP-адрес сервера.

1: Установка и настройка Elasticsearch

Компоненты стека Elastic не доступны в стандартных репозиториях Ubuntu. Но их можно установить с помощью APT, если добавить исходный список Elastic.

Все пакеты Elastic Stack подписаны с помощью ключа Elasticsearch, чтобы защитить систему от подделки пакетов. Пакеты, прошедшие проверку подлинности с использованием ключа, будут считаться вашим менеджером пакетов доверенными. На этом этапе мы импортируем открытый ключ GPG Elasticsearch и добавим исходный список пакета Elastic для установки Elasticsearch.

Используйте инструмент командной строки cURL, чтобы импортировать открытый ключ GPG Elasticsearch в APT. Обратите внимание, что мы используем аргументы -fsSL, чтобы подавить вывод о прогрессе и потенциальных ошибках (кроме сбоя сервера) и позволить cURL перенаправить запрос. Мы направляем вывод команды cURL в apt-key, которая добавляет открытый ключ GPG в APT.

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Затем добавьте список Elastic в каталог sources.list.d, где менеджер apt будет искать новые пакеты.

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Обновите индекс пакетов:

sudo apt update

Теперь просто установите Elasticsearch.

sudo apt install elasticsearch

После установки Elasticsearch откройте текстовый редактор, чтобы отредактировать главный конфигурационный файл Elasticsearch, elasticsearch.yml. Здесь мы будем использовать nano:

sudo nano /etc/elasticsearch/elasticsearch.yml

Примечание: Конфигурационный файл Elasticsearch пишется в формате YAML, а это означает, что отступы очень важны. Убедитесь, что при редактировании этого файла не появились лишние пробелы.

Файл elasticsearch.yml предоставляет параметры конфигурации для вашего кластера, нод, путей, памяти, сети, обнаружения и шлюзов. Большинство этих параметров имеет стандартное значение, но вы можете изменить их в соответствии с вашими потребностями. Для кластера, состоящего из одного сервера, мы изменим настройки только для сетевого хоста.

Elasticsearch прослушивает трафик через порт 9200. Нужно ограничить внешний доступ к экземпляру Elasticsearch, чтобы запретить посторонним пользователям читать ваши данные или не дать остановить работу кластера Elasticsearch через REST API. Найдите строку network.host, раскомментируйте ее и замените ее значение на localhost, чтобы она выглядела следующим образом:

. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

Мы указали localhost, чтобы Elasticsearch прослушивал все интерфейсы и привязанные к ним IP-адреса. Если вы хотите, чтобы он прослушивал только определенный интерфейс, вы можете указать его IP вместо localhost. Сохраните и закройте файл.

Это минимальная настройка, необходимая для запуска Elasticsearch.

Теперь вы можете впервые запустить сервис Elasticsearch с помощью systemctl:

sudo systemctl start elasticsearch

Затем добавьте сервис в автозагрузку, чтобы Elasticsearch запускался при каждой загрузке вашего сервера:

sudo systemctl enable elasticsearch

Убедитесь, что сервис Elasticsearch работает, отправив HTTP-запрос:

curl -X GET "localhost:9200"

Вы увидите основную информацию о вашем локальном хосте:

{
"name" : "Elasticsearch",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
"version" : {
"number" : "7.7.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

Поисковая система Elasticsearch установлена и запущена.

2: Установка и настройка Kibana

Согласно официальной документации, устанавливать Kibana следует только после Elasticsearch. Такой порядок гарантирует, что все зависимые друг от друга программы будут установлены правильно.

Поскольку вы уже добавили исходный список Elastic, сейчас вы можете просто установить остальные компоненты стека с помощью apt:

sudo apt install kibana

Чтобы включить сервис Kibana, введите:

sudo systemctl enable kibana
sudo systemctl start kibana

Поскольку Kibana прослушивает только локальный хост, нужно настроить обратный прокси-сервер, чтобы разрешить внешний доступ к сервису. Для этой цели мы будем использовать Nginx, который уже должен быть установлен на вашем сервере (согласно требованиям к мануалу).

Читайте также: Краткий словарь Информатория 8host

Сначала используйте команду openssl, чтобы создать администратора Kibana, которого вы будете использовать для доступа к веб-интерфейсу. В качестве примера назовем эту учетную запись kibanaadmin, но для большей безопасности рекомендуется выбрать нестандартное имя, которое будет сложно угадать.

Следующая команда создаст администратора и пароль Kibana и сохранит их в файле htpasswd.users. Nginx будет запрашивать это имя и пароль в этом файле (скоро мы настроим это).

echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

Введите и подтвердите пароль в командной строке. Запомните эти данные, так как они понадобятся вам для доступа к веб-интерфейсу Kibana.

Далее нужно создать файл блока server Nginx. Мы используем условный домен your_domain, но вы можете выбрать более описательное имя. Например, если у сервера есть FQDN и DNS-записи, вы можете назвать этот файл своим доменным именем:

sudo nano /etc/nginx/sites-available/your_domain

Добавьте следующий блок кода в файл, обязательно заменив your_domain доменом или IP-адресом вашего сервера. Благодаря этому Nginx будет направлять HTTP-трафик сервера в приложение Kibana, которое прослушивает localhost:5601. Кроме того, Nginx теперь будет читать файл htpasswd.users и требовать базовой аутентификации.

Обратите внимание: если вы до конца выполнили мануал по Nginx (из требований), вероятно, вы уже создали такой файл и заполнили его некоторым кодом. В этом случае удалите все существующее содержимое в файле, а потом добавьте такой код.

server {
listen 80;
server_name your_domain;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
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;
}
}

Сохраните и закройте файл.

Включите новую конфигурацию, добавив симлинк в каталог sites-enabled. Если вы создали файл блока server с таким же именем ранее, вам не нужно делать этого.

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/your_domain

Проверьте ошибки в файле:

sudo nginx -t

Если в выводе команда сообщает об ошибках, вернитесь в файл и проверьте код, который вы поместили в файл конфигурации. Исправив ошибки, снова запустите команду (в выводе должно быть syntax is ok ) и перезапустите Nginx:

sudo systemctl reload nginx

Если вы следовали мануалу по начальной настройке сервера, у вас должен быть включен брандмауэр UFW. Чтобы разрешить подключения к Nginx, нужно настроить брандмауэр, набрав:

sudo ufw allow 'Nginx Full'

Примечание: Если вы следовали мануалу по установке Nginx, вероятно, ранее вы создали правило UFW, разрешающее профиль HTTP Nginx. Поскольку профиль Nginx Full поддерживает трафик HTTP и HTTPS, вы можете просто удалить это правило с помощью следующей команды:

sudo ufw delete allow 'Nginx HTTP'

Сервис Kibana теперь доступен по вашему домену или внешнему IP-адресу сервера Elastic Stack. Вы можете проверить страницу состояния сервера Kibana, перейдя по следующему адресу и введя свои учетные данные:

http://your_domain/status

На странице вы увидите информацию об использовании ресурсов и установленных плагинах.

Примечание: В требованиях упоминалось, что сервер нужно защитить с помощью сертификата SSL/TLS. Сейчас самое время сделать это. Инструкции можно найти здесь.

 3: Установка и настройка Logstash

Beats может отправлять данные напрямую в базу данных Elasticsearch, но мы рекомендуем использовать для обработки данных Logstash. Это позволит вам собирать данные из разных источников, преобразовывать их в общий формат и экспортировать в другую базу данных.

Установите Logstash с помощью этой команды:

sudo apt install logstash

После установки Logstash вы можете перейти к его настройке. Файлы конфигурации Logstash используют формат JSON и находятся в каталоге /etc/logstash/conf.d. Во время настройки Logstash нужно воспринимать как конвейер, который принимает данные на одном конце, обрабатывает их тем или иным способом и отправляет их по назначению (в данном случае в Elasticsearch). У конвейера Logstash есть два обязательных элемента (input и output) и один необязательный элемент (filter). Входные плагины input потребляют данные из источника, плагины фильтра обрабатывают данные, а выходные плагины записывают данные в место назначения.

Создайте конфигурационный файл 02-beats-input.conf для настройки входных данных Filebeat.

sudo nano /etc/logstash/conf.d/02-beats-input.conf

Вставьте в файл такую конфигурацию. Она настраивает прослушивание входных данных beats по TCP-порту 5044.

input {
beats {
port => 5044
}
}

Сохраните и закройте файл. Затем создайте файл 30-elasticsearch-output.conf:

sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

Вставьте следующую конфигурацию вывода. По сути, эти параметры настраивают Logstash для хранения данных Beats в базе Elasticsearch (по адресу localhost:9200) в индексе с именем используемого Beat. Beat, использованный в этом мануале, называется Filebeat.

output {
if [@metadata][pipeline] {
elasticsearch {
hosts => ["localhost:9200"] manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
}
} else {
elasticsearch {
hosts => ["localhost:9200"] manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
}

Сохраните и закройте файл.

Проверьте свою конфигурацию Logstash:

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

Если ошибок нет, через несколько секунд вывод сообщит «Config Validation Result: OK. Exiting Logstash». Если вы не видите этого сообщения в выводе, проверьте наличие ошибок и обновите конфигурацию, чтобы исправить их.

Если проверка конфигурации прошла успешно, запустите и включите Logstash, чтобы изменения вступили в силу:

sudo systemctl start logstash
sudo systemctl enable logstash

4: Установка и настройка Filebeat

Elastic Stack использует несколько простых клиентов Beats для сбора данных из различных источников и их передачи в Logstash или Elasticsearch. Вот Beats, которые в настоящее время доступны в Elastic:

  • Filebeat: собирает и передает логи.
  • Metricbeat: собирает метрики системы и сервисов.
  • Packetbeat: собирает и анализирует сетевые данные.
  • Winlogbeat: собирает логи событий Windows.
  • Auditbeat: собирает данные инфраструктуры аудита Linux и проверяет целостность файлов.
  • Heartbeat: отслеживает доступность сервисов.

В этом мануале мы используем Filebeat, клиент для передачи логов в стек Elastic.

Установите Filebeat.

sudo apt install filebeat

Затем настройте Filebeat для подключения к Logstash. Отредактируйте образец файла конфигурации, который поставляется вместе с Filebeat. Откройте файл.

sudo nano /etc/filebeat/filebeat.yml

Примечание: Как и в случае Elasticsearch, конфигурационный файл Filebeat имеет формат YAML, а в нем очень важны правильные отступы.

Filebeat поддерживает множество выходных данных, но обычно события отправляются непосредственно в Elasticsearch или на обработку в Logstash. В этом мануале мы будем использовать Logstash для дополнительной обработки данных, собранных Filebeat. Клиенту Filebeat не нужно будет напрямую отправлять данные в Elasticsearch, поэтому давайте отключим этот вывод. Для этого найдите раздел output.elasticsearch и закомментируйте следующие строки, поставив перед ними знак #:

...
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"] ...

Затем настройте раздел output.logstash. Раскомментируйте строки output.logstash: и hosts: [“localhost:5044”], удалив символ #. Это настроит Filebeat для подключения к Logstash на сервере стека Elastic через порт 5044 (который был указан в Logstash ранее):

output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]

Сохраните и закройте файл.

Функциональность Filebeat можно расширить с помощью модулей. В этом мануале мы будем использовать модуль system, который собирает и анализирует логи, созданные сервисом системных логов Linux.

Включите его:

sudo filebeat modules enable system

Получить список включенных и отключенных модулей можно с помощью:

sudo filebeat modules list
Enabled:
system
Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
traefik
...

По умолчанию Filebeat использует пути системного лога и лога авторизации по умолчанию. В данном случае в конфигурации не нужно ничего менять. Вы можете увидеть параметры модуля в файле /etc/filebeat/modules.d/system.yml.

Затем нам нужно настроить конвейеры приема Filebeat, которые анализируют данные логов перед отправкой их в logstash, а потом в Elasticsearch. Чтобы загрузить конвейер для модуля system, введите следующую команду:

sudo filebeat setup --pipelines --modules system

Затем загрузите шаблон индекса в Elasticsearch. Индекс Elasticsearch – это набор документов, имеющих сходные характеристики. Индексы определяются по имени. Имя используется для ссылки на индекс при выполнении различных операций в нем. Шаблон индекса будет автоматически использоваться при создании нового индекса.

Чтобы загрузить шаблон, используйте следующую команду:

sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Index setup finished.

Filebeat поставляется с образцами дашбордов Kibana, которые позволяют визуализировать данные Filebeat в Kibana. Прежде чем вы сможете использовать дашборды, вам нужно создать шаблон индекса и загрузить дашборд в Kibana.

Когда дашборд будет загружен, Filebeat подключится к Elasticsearch для проверки информации о версии. Если Logstash включен, необходимо отключить вывод Logstash и включить вывод Elasticsearch, чтобы загрузить дашборды.

sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

Вы увидите примерно следующее:

Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html
Loaded machine learning job configurations
Loaded Ingest pipelines

Теперь можно запустить Filebeat и добавить его в автозагрузку:

sudo systemctl start filebeat
sudo systemctl enable filebeat

Если вы правильно настроили свой стек Elastic, Filebeat начнет отправку системного лога и логов авторизации в Logstash, который затем загрузит эти данные в Elasticsearch.

Чтобы убедиться, что Elasticsearch действительно получает эти данные, запросите индекс Filebeat с помощью этой команды:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Вы должны получить такой результат:

...
{
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 2,
"successful" : 2,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4040,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-7.7.1-2020.06.04",
"_type" : "_doc",
"_id" : "FiZLgXIB75I8Lxc9ewIH",
"_score" : 1.0,
"_source" : {
"cloud" : {
"provider" : "digitalocean",
"instance" : {
"id" : "194878454"
},
"region" : "nyc1"
},
"@timestamp" : "2020-06-04T21:45:03.995Z",
"agent" : {
"version" : "7.7.1",
"type" : "filebeat",
"ephemeral_id" : "cbcefb9a-8d15-4ce4-bad4-962a80371ec0",
"hostname" : "june-ubuntu-20-04-elasticstack",
"id" : "fbd5956f-12ab-4227-9782-f8f1a19b7f32"
},
...

Если ваши выходные данные показывают 0 total hits, Elasticsearch не загружает логи в индекс, который вы искали, и вам нужно будет проверить настройки на наличие ошибок. Если вы получили ожидаемый результат, переходите к следующему разделу, в котором вы узнаете, как работать с дашбордами Kibana.

5: Дашборды Kibana

Теперь давайте посмотрим, как работает Kibana.

В браузере откройте FQDN или внешний IP сервера Elastic. Введите свои учетные данные из раздела 2, и вы попадете на домашнюю страницу Kibana.

Нажмите Discover в левой панели навигации. На странице Discover выберите предопределенный шаблон индекса filebeat-*, чтобы увидеть данные Filebeat. По умолчанию будут показаны все данные лога за последние 15 минут. Вы увидите гистограмму с событиями и некоторыми сообщениями лога.

Здесь вы можете искать и просматривать логи, а также настраивать дашборды. На данный момент, однако, там не будет много данных, потому что сейчас отображаются только системные логи сервера Elastic Stack.

Используйте левую панель, чтобы перейти на страницу Dashboard и выполнить поиск по Filebeat System. Оказавшись там, вы можете искать примеры дашбордов, которые поставляются с модулем system.

Например, вы можете просмотреть подробную статистику на основе ваших сообщений системного лога или узнать, какие пользователи и когда использовали команду sudo.

У Kibana есть много других функций, таких как построение графиков и фильтров. Исследуйте их самостоятельно.

Заключение

Теперь вы знаете, как установить и настроить стек Elastic для централизованного сбора и анализа системных логов. Помните, что вы можете отправлять в Logstash практически любой тип лога или индексированных данных, используя Beats, но данные будут еще более полезными, если их анализировать и структурировать с помощью фильтров Logstash: это преобразует их в согласованный формат, который Elasticsearch легко прочитает.

Tags: , , , , , ,

Добавить комментарий