ELK stack — популярное решение для сбора логов с серверов, их анализа и визуализации. Применяется в том числе для очень крупных инсталяций с сотнями и тысячами серверов.
Компоненты ELK stack:
- Elasticsearch — пакет, отвечающий за поиск и хранение, основа системы.
- Kibana — веб-интерфейс для Elasticsearch
- Logstash — компонент, позволяющий обрабатывать логи с серверов.
- Filebit — клиент, который используется для передачи логов на центральный сервер.
Чтобы стэк работал все компоненты обязательно должны быть одной версии. Основой является Elasticsearch.
Клиентские приложения могут работать напрямую с Elasticsearch обмениваясь с ним информацией по RESTapi, без других компонентов.
Краткое описание Elasticsearch — основного элемента ELK stack
Эластик основан на библиотеке Apache Lucene. В нем есть 3 типа объектов: Document, Type и Index.
Document — аналог записи в реляционных базах данных
Type — аналог таблицы в реляционных базах данных (Schema)
Index — аналог базы в реляционных БД
Эти 3 типа объектов представлены один за другим в URL при запросе.
Особенности Elasticsearch
- Дает RESTfull APIs (GET, POST, PUT)
- Представляет собой NoSQL базу
- Передает через piplyne syslog на центральный сервер
Алгоритм поиска Elasticsearch
Релевантность поиска определяется по такой формуле
Relevance = Term Frequency/ Document Frequency
Репликация ELK и шарды
shard — один экземпляр приложения, Lucene контейнер с ролью Primary. Для каждого Primary может быть одна или более реплик (Replica)
Данные о количестве реплик и шардов можно увидеть в json при запросе, пример:
PUT /testindex
{"settings":
{"number_of_shards": 3,
"number_of_replicas": 1
}}
В кластере ELK выделяют Primary ноду и реплики.
На Primary ноду всегда выполняется запись, чтение производится со случайно выбранной реплики. Данные с Primary реплицируются на реплики (по тому же принципу работает репликация MySQL).
В случае выхода из строя одного из серверов роли автоматически меняются, конечный пользователь не замечает каких-либо изменений.