Установка и настройка Elasticsearch в Ubuntu 18.04

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

Этот мануал поможет установить и настроить Elasticsearch на сервере Ubuntu 18.04 и начать работу с ним.

Требования

  • Сервер Ubuntu 18.04, настроенный по этому мануалу. Прежде чем приступить к установке Elasticsearch, перейдите в сессию пользователя с доступом к sudo.
  • 4GB RAM и 2 CPU минимум.
  • OpenJDK 11 (инструкции по установке можно найти в мануале Установка Java с помощью apt в Ubuntu 18.04).

В этом мануале мы будем работать с минимальным количеством RAM и CPU, необходимым для запуска Elasticsearch. Обратите внимание, объем ресурсов, которые потребуются Elasticsearch, зависит от объема данных, которые вы хотите обрабатывать с его помощью.

1: Установка Elasticsearch

Пакетов Elasticsearch нет в стандартном репозитории Ubuntu. Чтобы установить этот пакет с помощью APT, можно добавить исходник пакета.

Все пакеты подписаны с помощью ключа 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

Обновите список пакетов, чтоб APT нашел исходник Elastic.

sudo apt update

Чтобы установить Elasticsearch, введите:

sudo apt install elasticsearch

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

2: Настройка Elasticsearch

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

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

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-адреса. Если вы хотите, чтобы он прослушивал только определенный интерфейс, вместо localhost вы можете указать его IP. Сохраните и закройте файл elasticsearch.yml. Если вы используете nano, нажмите Ctrl + X, затем Y и Enter.

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

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

sudo systemctl start elasticsearch

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

sudo systemctl enable elasticsearch

Теперь Elasticsearch будет включаться при запуске сервера.

3: Защита Elasticsearch

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

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

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

sudo ufw allow from 198.51.100.0 to any port 9200

После этого вы можете включить UFW с помощью команды:

sudo ufw enable

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

sudo ufw status

Если вы правильно настроили брандмауэр, вывод должен выглядеть следующим образом:

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

Теперь UFW защищает порт Elasticsearch 9200 от посторонних.

Для дополнительной защиты Elasticsearch предлагает платный плагин Shield.

4: Тестирование Elasticsearch

Сейчас Elasticsearch запущен по порту 9200. Протестировать работу программы можно с помощью cURL и GET-запроса.

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

Вы должны увидеть такой ответ:

{
"node.name" : "My First Node",
"cluster.name" : "mycluster1",
"version" : {
"number" : "2.3.1",
"build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
"build_timestamp" : "2020-04-04T12:25:05Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}

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

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

curl -XGET 'http://localhost:9200/_nodes?pretty'

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

5: Начало работы с Elasticsearch

Чтобы начать использовать Elasticsearch, сначала нужно добавить какие-нибудь данные. Elasticsearch использует RESTful API, который отвечает на обычные команды CRUD (create, read, update и delete). Работать с ним можно с помощью команды cURL.

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

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

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

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

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

  • tutorial – индекс данных Elasticsearch.
  • Helloworld – тип.
  • 1 – ID записи в индексе и типе.

Чтобы извлечь первую запись, используйте HTTP GET-запрос.

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

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

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

Изменить данные в существующей записи можно при помощи запроса PUT.

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

Elasticsearch сообщит, что запрос выполнен успешно:

{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : false
}

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

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

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

Теперь вывод будет удобно отформатирован:

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

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

Заключение

Вы установили и настроили Elasticsearch, а также ознакомились с базовыми командами. С первых своих версий Elasticsearch поддерживает три дополнительных инструмента – Logstash, Kabana и Beats – которые можно использовать вместе с Elasticsearch как часть Elastic Stack. Такой стек позволяет искать, анализировать и визуализировать логи из любых источников и в любом формате. Эта практика называется логированием.

Читайте также: Установка стека Elastic в Ubuntu 18.04

Tags: ,

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