Как установить и настроить Elasticsearch на Ubuntu 22.04

A previous version of this article was written by Toli.

Введение

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

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

Предварительные требования

Перед выполнением этого руководства вам понадобится:

В этом учебнике мы будем работать с минимальным количеством процессоров и ОЗУ, необходимых для запуска Elasticsearch. Обратите внимание, что количество процессоров, ОЗУ и хранилища, необходимых для вашего сервера Elasticsearch, зависит от объема журналов, которые вы ожидаете.

Шаг 1 — Установка и настройка Elasticsearch

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

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

Для начала используйте cURL, инструмент командной строки для передачи данных по URL, чтобы импортировать открытый GPG-ключ Elasticsearch в APT. Обратите внимание, что мы используем аргументы -fsSL для подавления всех выводов о ходе выполнения и возможных ошибок (за исключением сбоя сервера) и для разрешения cURL делать запрос на новое местоположение в случае перенаправления. Перенаправьте вывод в команду gpg --dearmor, которая преобразует ключ в формат, который apt может использовать для проверки загруженных пакетов.

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg

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

  1. echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

Часть файла [signed-by=/usr/share/keyrings/elastic.gpg] указывает apt использовать загруженный вами ключ для проверки информации о репозитории и файлах для пакетов Elasticsearch.

Затем обновите ваши списки пакетов, чтобы APT считал новый источник Elastic:

  1. sudo apt update

Затем установите Elasticsearch с помощью этой команды:

  1. sudo apt install elasticsearch

Нажмите Y, когда будет запрошено подтверждение установки. Если вам будет предложено перезапустить какие-либо службы, нажмите ENTER, чтобы принять значения по умолчанию и продолжить. Elasticsearch установлен и готов к настройке.

Шаг 2 — Настройка Elasticsearch

Для настройки Elasticsearch мы отредактируем его основной файл конфигурации elasticsearch.yml, где хранятся большинство его параметров конфигурации. Этот файл находится в каталоге /etc/elasticsearch.

Используйте ваш текстовый редактор по умолчанию для редактирования файла конфигурации Elasticsearch. Здесь мы используем nano:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

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

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

Elasticsearch слушает трафик отовсюду на порту 9200. Вам следует ограничить внешний доступ к вашему экземпляру Elasticsearch, чтобы предотвратить чужеродных лиц от чтения ваших данных или выключения кластера Elasticsearch через его [REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer). Чтобы ограничить доступ и тем самым увеличить безопасность, найдите строку, которая указывает network.host, раскомментируйте ее и замените ее значение на localhost, чтобы она выглядела следующим образом:

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- Сеть -----------------------------------
#
# Установите адрес привязки к определенному IP-адресу (IPv4 или IPv6):
#
network.host: localhost
. . .

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

Это минимальные настройки, с которыми можно начать использование Elasticsearch. Теперь вы можете запустить Elasticsearch впервые.

Запустите службу Elasticsearch с помощью systemctl. Подождите несколько моментов, пока Elasticsearch не запустится. В противном случае вы можете получить ошибки о невозможности подключения.

  1. sudo systemctl start elasticsearch

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

  1. sudo systemctl enable elasticsearch

С Elasticsearch включенным при загрузке давайте перейдем к следующему шагу, чтобы обсудить безопасность.

Шаг 3 — Обеспечение безопасности Elasticsearch

По умолчанию управление Elasticsearch может осуществляться любым, кто имеет доступ к HTTP API. Это не всегда является угрозой безопасности, потому что Elasticsearch слушает только интерфейс обратной связи (т.е. 127.0.0.1), к которому можно обращаться только локально. Таким образом, общедоступный доступ невозможен, и пока все пользователи сервера доверены, безопасность может не вызывать серьезных опасений.

Если вам необходимо разрешить удаленный доступ к HTTP API, вы можете ограничить сетевое воздействие с помощью стандартного брандмауэра Ubuntu — UFW. Этот брандмауэр должен уже быть включен, если вы следовали инструкциям в руководстве по предварительной настройке сервера с Ubuntu 22.04 начальная настройка сервера с Ubuntu 22.04.

Теперь мы настроим брандмауэр, чтобы разрешить доступ к порту HTTP API Elasticsearch по умолчанию (TCP 9200) для доверенного удаленного хоста, обычно это сервер, который вы используете в единственной конфигурации сервера, например198.51.100.0. Для разрешения доступа введите следующую команду:

  1. sudo ufw allow from 198.51.100.0 to any port 9200

После завершения этой операции вы можете включить UFW с помощью следующей команды:

  1. sudo ufw enable

Наконец, проверьте состояние UFW с помощью следующей команды:

  1. sudo ufw status

Если вы правильно указали правила, вы должны получить вывод подобный этому:

Output
Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

Теперь UFW должен быть включен и настроен для защиты порта 9200 Elasticsearch.

Если вы хотите инвестировать в дополнительную защиту, Elasticsearch предлагает коммерческий плагин Shield для покупки.

Шаг 4 — Тестирование Elasticsearch

На данный момент Elasticsearch должен работать на порту 9200. Вы можете протестировать его с помощью cURL и GET-запроса.

  1. curl -X GET 'http://localhost:9200'

Вы должны получить следующий ответ:

Output
{ "name" : "elastic-22", "cluster_name" : "elasticsearch", "cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ", "version" : { "number" : "7.17.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a", "build_date" : "2022-02-23T22:20:54.153567231Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

Если вы получите ответ, аналогичный приведенному выше, Elasticsearch работает правильно. В противном случае убедитесь, что вы правильно следовали инструкциям по установке и дали некоторое время для полного запуска Elasticsearch.

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

  1. curl -X GET 'http://localhost:9200/_nodes?pretty'

В выводе из вышеприведенной команды вы можете проверить все текущие настройки для узла, кластера, путей приложения, модулей и многого другого.

Шаг 5 — Использование Elasticsearch

Чтобы начать использовать Elasticsearch, давайте сначала добавим некоторые данные. Elasticsearch использует RESTful API, который реагирует на обычные команды CRUD: create, read, update и delete. Для работы с ним мы снова будем использовать команду cURL.

Вы можете добавить свою первую запись следующим образом:

  1. curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

Вы должны получить следующий ответ:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

С помощью cURL мы отправили HTTP POST-запрос на сервер Elasticsearch. URI запроса был /tutorial/helloworld/1 с несколькими параметрами:

  • tutorial – это индекс данных в Elasticsearch.
  • helloworld – это тип.
  • 1 – это идентификатор нашей записи в указанном выше индексе и типе.

Вы можете получить эту первую запись с помощью HTTP GET-запроса.

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1'

Вот ожидаемый результат:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

Для изменения существующей записи вы можете использовать HTTP PUT-запрос.

  1. curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  2. {
  3. "message": "Hello, People!"
  4. }'

Elasticsearch должен подтвердить успешное изменение следующим образом:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

В приведенном выше примере мы изменили message первой записи на “Привет, люди!”. Таким образом, номер версии был автоматически увеличен до 2.

Вы, возможно, заметили дополнительный аргумент pretty в указанном выше запросе. Он включает читаемый для человека формат, чтобы вы могли записывать каждое поле данных на новой строке. Вы также можете “приукрасить” ваши результаты при получении данных, чтобы получить более читаемый вывод, введя следующую команду:

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

Теперь ответ будет отформатирован для того, чтобы человек мог его обработать:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }

Теперь мы добавили и запросили данные в Elasticsearch. Чтобы узнать о других операциях, пожалуйста, проверьте документацию API.

Заключение

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-22-04