Введение
ELK — это аббревиатура из названий трех продуктов: Elasticsearch, Logstash и Kibana.
Logstash — инструмент, который необходим для приема первичных данных из .log файлов и иных представлений. Посредством его работы информацию можно преобразовать и отправить в общее хранилище. В наших примерах и микросервисах данные модифицируются посредство базового кода, поэтому не требовалось использование этого сервиса.
Elasticsearch — это механизм индексирования и хранения полученной информации, а также полнотекстового поиска по ней. Он является NoSQL решением, главная задача которого — организация быстрого и гибкого поиска по полученным данным. Работа с информацией происходит с помощью REST API, который позволяет добавлять, просматривать, модифицировать и удалять данные.
Можно выделить основное устройство Elasticsearch и провести косвенную аналогию с реляционными бд:
- Индекс - база данных
- Документ - таблица базы данных
- Элемент - запись в таблице
Структуру каждого индекса и содержимое его документов задается с помощью мэппинга.
Kibana — это интерфейс для Elasticsearch, который имеет большое количество возможностей по поиску данных в индексах Elasticsearch и отображению этих данных в удобочитаемых видах таблиц, графиков и диаграмм, карт.
Работа с Elasticseach
Elasticsearch может быть развернут на локальном сервере с помощью системных администраторов или настроен в автоматическом режиме на одном из серверов https://www.elastic.co/
После базовой настройки можно приступить к написанию мэппинга и созданию необходимых индексов.
Эту задачу можно выполнить несколькими путями:
- написание команд из консоли Elasticsearch - документация https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
- использование php библиотеки для написание собственного API - документация
https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/installation.html
В данной статьей рассмотрим второй вариант. После установки пакета
composer install elasticsearch/elasticsearch
можно приступить к написанию кода с использованием основ, описанных в документации.
Например, с помощью данного сурдокода будет создан индекс, после чего к нему будет применен описанный мэппинг:
$params = [
'index' => $index_name
];
$response = $this->es_api->indices()->create($params);
-------------------------------------------------------
$params = [
'index' => $index_name,
'body' => [
'properties' => $properties
]
];
return $this->es_api->indices()->putMapping($params);
Мэппинг может быть описан как массив с указанием необходимых полей внутри документа:
Мэппинг может быть описан как массив с указанием необходимых полей внутри документа:
"properties" => [
"appVersion" => [
"type" => "keyword",
],
"clientApplication" => [
"type" => "keyword",
],
"uid" => [
"type" => "keyword",
],
"ip" => [
"type" => "ip",
],
"usage_date" => [
"type" => "date",
"format" => "yyyy-MM-dd HH:mm:ss"
],
"os" => [
"type" => "keyword",
]
]
Таким образом мы создали индекс и описали структуру его документа.
После можно приступить к отправке данных и созданию элементов в elasticsearch.
Пример кода:
$this->elastic_search
->createBulk(ElasticSearch::MAIN_INFO_INDEX, $main_info);
-----------------------------------------------------------------
public function createBulk($index_name, $elements) {
$params = [];
foreach ($elements as $element) {
$params['body'][] = [
'index' => [
'_index' => $index_name,
]
];
$params['body'][] = $element;
}
if (!empty($params)) {
try {
$responses = $this->es_api->bulk($params);
return $responses;
} catch (Exception $e) {
Log::channel("elastic_search_errors")->error("Exception when calling es_api->bulk: ". $e->getMessage());
}
}
}
Данные в соответствии с мэппингом будут отправлены в Elasticsearch и готовы для дальнейшей работы с ними.
Введение в работу Kibana
Из личного кабинета https://www.elastic.co/ вы сможете перейти в интерфейс Kibana.
Для создания необходимых визуализаций необходимо привязать сервис к индексам из Elasticsearch.
Для этого из соответствующего раздела настроек потребуется создать индекс-паттерн, который и будет отслеживать механизм Kibana.
В разделе визуализаций возможно построение разных представлений данных.Самое распространенное Lens (содержит множество различных диаграмм и графиков) и Maps (карты и наложенные на них данные).
Интерфейс Kibana дружественен к пользователю и предлагает интуитивно понятное взаимодействие с данными.
В левой части содержится выбранный индекс и структура его документа. Центральная и правая части отводятся для отображения представлений информации и различных форм её агрегирования.
В верхней панели находится строка ввода для написания простых KQL (kibana query language) запросов, которая автоматически подсказывает доступные варианты.
После создания визуализации, её можно сохранить и разместить с другими на одном из дашбордов для удобного просмотра всех представлений данных.
Заключение
Таким образом, посредством изучения документации Elasticsearch PHP API и сервису, написанному с использованием фреймворка Laravel, возможен перенос большого количества данных в систему Elasticsearch, которая представит высокую скорость работы в сравнении с реляционной бд.
Kibana в свою очередь поможет представить информацию в удобном и понятно виде для последующего анализа.