Я использую elasticsearch
для централизованного хранения логов с серверов. Логов хранится много и каждый новый индекс ест ресурсы на сервере (статью об оптимизации используемых ресурсов для одной ноды можно посмотреть здесь). Однако это решение не спасает при хранении логов за очень большие периоды, в связи с чем я решил рассмотреть вариант хранения старых логов на отдельном сервере.
Т.к. речь идет именно о логах, то шансы изменения данных из прошлого стремятся к нулю. Это позволяет нам не думать о необходимости записи в старые индексы и просто хранить их на сервере (например более дешевом с медленными дисками). Генеральная идея состоит в том, чтобы добавить дополнительную ноду данных в кластер и распределять индексы (indices) в зависимости от времени их создания.
Настройка кластера
Настройка мастер ноды
Пропуская процесс установки elasticsearch
укажу лишь необходимые настройки:
elasticsearch.yml
node.master: true
node.data: true
node.node_type: hot
...
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["10.0.0.2"]
Нода будет иметь тэг hot
и хранит индексы для быстрого доступа.
Настройка ноды дынных
elasticsearch.yml
node.master: false
node.data: true
node.node_type: warm
...
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["10.0.0.1"]
Нода будет иметь тэг warm
и мы будем перемещать на нее устаревшие indices.
Перемещение
После подготовки нод надо перезапустить elasticsearch
.
Убедиться, что ноды теперь в кластере можно командой:
$ curl http://localhost:9200/_cat/nodes
Следующая команда (для elasticsearch-curator < 4.X) поставит аттрибут аллокации для всех индексов старше 7 дней:
$ curator --logfile /var/log/curator.log --loglevel INFO --logformat default --master-only --host localhost --port 9200 allocation --rule node_type=warm indices --time-unit days --older-than 7 --timestring '%Y.%m.%d'
ниже конфиг action.yml
для elasticsearch-curator >= 4.X:
---
actions:
'1':
action: allocation
description: Apply shard allocation routing to 'node_type=warm' node
options:
key: node_type
value: warm
allocation_type: require
wait_for_completion: False
continue_if_exception: False
filters:
- filtertype: pattern
kind: prefix
value: logstash-
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 7
Теперь можно добавить команду curator-а, описанную выше, в cron сервера и перемещение будет происходить автоматически.