Elasticsearch — это платформа для распределенного поиска и анализа данных в режиме реального времени. Она пользуется популярностью благодаря удобству в использовании, наличию мощных характеристик и возможности масштабирования.
Эта статья расскажет вам о том, как установить Elasticsearch, настроить платформу под ваш вариант использования, обеспечить безопасность установки и начать работу с вашим сервером Elasticsearch.
Для работы с этим обучающим руководством вам потребуется следующее:
Сервер Ubuntu 20.04 с 4 ГБ оперативной памяти и 2 процессорами, а также настроенный пользователь без прав root с привилегиями sudo. Вы можете это сделать, воспользовавшись рекомендациями по начальной настройке сервера с Ubuntu 20.04.
Установленный OpenJDK 11.
В этом обучающем руководстве мы будем использовать минимальное количество процессоров и оперативной памяти, необходимое для работы с Elasticsearch. Обратите внимание, что требования сервера Elasticsearch к количеству процессоров, оперативной памяти и системе хранения данных зависят от ожидаемого объема журналов.
Компоненты Elasticsearch отсутствуют в репозиториях пакетов Ubuntu по умолчанию. Однако их можно установить с помощью APT после добавления списка источников пакетов Elastic.
Все пакеты подписаны ключом подписи Elasticsearch для защиты вашей системы от поддельных пакетов. Ваш диспетчер пакетов будет считать надежными пакеты, для которых проведена аутентификация с помощью ключа. На этом шаге вы импортируете открытый ключ Elasticsearch GPG и добавить список источников пакетов Elastic для установки Elasticsearch.
Для начала используйте cURL, инструмент командной строки для передачи данных с помощью URL, для импорта открытого ключа Elasticsearch GPG в 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 установлена и готова к настройке.
Для настройки Elasticsearch мы изменим ее основной файл конфигурации elasticsearch.yml
, где хранится большинство вариантов конфигурации. Этот файл находится в директории /etc/elasticsearch
.
Используйте текстовый редактор на ваш выбор для изменения файла конфигурации Elasticsearch. Мы будем использовать nano
:
- 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
, чтобы она выглядела следующим образом:
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .
Мы указали localhost
, и теперь Elasticsearch прослушивает все интерфейсы и связанные IP-адреса. Если вы хотите, чтобы прослушивался только конкретный интерфейс, вы можете указать его IP-адрес вместо localhost
. Сохраните и закройте elasticsearch.yml
. Если вы используете nano
, вы можете сделать это, нажав CTRL+X
, затем Y
, а затем ENTER
.
Это минимальные настройки, с которыми вы можете начинать использовать Elasticsearch. Теперь вы можете запустить Elasticsearch в первый раз.
Запустите службу Elasticsearch с помощью systemctl
. Запуск Elasticsearch может занять некоторое время. В другом случае вы можете увидеть сообщение об ошибке подключения.
- sudo systemctl start elasticsearch
Затем запустите следующую команду, чтобы активировать Elasticsearch при каждой загрузке сервера:
- sudo systemctl enable elasticsearch
После активации Elasticsearch можно переходить к следующему шагу, где будет обсуждаться вопрос защиты.
По умолчанию любой пользователь, который имеет доступ к HTTP API может контролировать Elasticsearch. Это не всегда связано с риском для безопасности, так как Elasticsearch прослушивает только циклический интерфейс (имеется в виду 127.0.0.1
), доступ к которому только локальный. Таким образом, невозможно получить публичный доступ к серверу, и, пока все пользователи сервера являются проверенными, вопрос безопасности не будет для вас серьезной проблемой.
Если вам потребуется разрешить удаленный доступ к HTTP API, вы можете ограничить открытость сети с помощью настроек брандмауэра Ubuntu по умолчанию, UFW. Этот брандмауэр уже должен быть активирован, если вы выполнили все предварительные шаги по начальной настройке сервера с Ubuntu 20.04.
Теперь мы настроим брандмауэр для доступа к порту HTTP API Elasticsearch по умолчанию (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
Если вы правильно указали правила, вы должны получить следующий результат:
OutputStatus: active
To Action From
-- ------ ----
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
Теперь UFW должен быть активирован и настроен на защиту порта Elasticsearch 9200.
Если вы хотите инвестировать в дополнительную защиту, Elasticsearch предлагает к покупке платный плагин Shield.
Сейчас система Elasticsearch должна работать на порту 9200. Вы можете протестировать ее с помощью cURL и запроса GET.
- curl -X GET 'http://localhost:9200'
Вы должны получить следующий ответ:
Output{
"name" : "elasticsearch-ubuntu20-04",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Если вы получите ответ, аналогичный вышеуказанному, значит Elasticsearch работает корректно. Если нет, убедитесь, что вы правильно выполнили инструкции по установке и дали время системе Elasticsearch для полного запуска.
Для более тщательной проверки Elasticsearch выполните следующую команду:
- curl -XGET 'http://localhost:9200/_nodes?pretty'
В выводе для команды, указанной выше, вы можете проверить все текущие настройки для узла, кластера, путей приложения, модулей и т. д.
Чтобы начать использовать 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!" }'
Вы должны получить следующий ответ:
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
— это ID нашей записи по индексу и типу.Вы можете получить эту первую запись по запросу HTTP GET.
- curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
Вывод должен выглядеть следующим образом:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
Для изменения существующей записи вы можете использовать запрос HTTP PUT.
- curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
- {
- "message": "Hello, People!"
- }'
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
первой записи на «Hello, People!». При этом номер версии автоматически увеличился до 2
.
Возможно, вы заметили дополнительный аргумент pretty
в представленном выше запросе. Он обеспечивает удобный для восприятия человеком формат, и вы можете для написания каждого поля данных использовать новый ряд. Вы также можете «приукрасить» ваши результаты при получении данных, чтобы получить более читабельный вывод, путем введения следующей команды:
- 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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Hi, it was really helpful to get an understanding of ES! Thanks :)
I guess, there is a slight typo when we want to fetch for the first time:
"curl -X GET -H “Content-Type: application/json” ‘http://localhost:9200/tutorial/helloworld/1’
-d ‘{ “message”: “Hello World!” }’"
The -d option is included into GET request.