Thank you for reading this post, don't forget to subscribe!
Ввиду большого количества генерируемых логов сервисами разработчиков, которые хранятся в elasticsearch, появилась необходимость в ротации логов:
- Curator закрывает индексы elasticsearch, которые старше 2х дней при помощи настройки actions:
---
actions:
1:
action: close
description: >-
Close indices older than 2 days (based on index name).
options:
ignore_empty_list: True
delete_aliases: False
disable_action: False
allow_ilm_indices: true
filters:
- filtertype: pattern
kind: prefix
value: fluentd-
- filtertype: age
source: name
direction: older
timestring: '%Y%m%d'
unit: days
unit_count: 2
---
Проверить что Curator отрабатывает можно следующим образом:
В браузере или курлом выводим индексы используя ссылку http://10.10.10.12:9200/_cat/indices
Вывод примерно следующий:
Здесь мы должны видеть, что открытых индексов при данной настройке куратора всегда 2.
!!!! Примечание! Отображаемых закрытых индексов с каждым днем будет больше, даже если они физически перемещены. При перезапуске Elasticsearch они отображаться не будут.
- Далее отрабатывает скрипт на одном из серверов, который находит закрытые индексы, архивирует их и перемещает их в другую директорию. Скрипт работает по крону из-под пользователя efk
!примечание, данный пользователь должен быть создан на всех нодах кластера, и с одной ноды(с которой будет запускаться крон задание) должны быть раскиданы ключи.
crontab -u efk -l
0 */2 * * * /home/efk/elastic_crontab_execute_command.sh
-----------elastic_crontab_execute_command.sh-------------------
#!/bin/bash
p=`pwd`
#set -x
name_elastic=`docker service ls | grep efk_elasticsearch | awk '{print $2}'`
if [ -z "${name_elastic}" ]
then
exit 1;
fi
noda=`docker service ps "$name_elastic" | grep -i Running | awk '{print $4}'`
if [ -z "${noda}" ]
then
exit 1;
fi
ssh -t "$noda" "docker ps |grep $name_elastic" > $p/result_of_name
id_container=`cat $p/result_of_name | awk '{print $1}'`
if [ -z "${id_container}" ]
then
exit 1;
fi
rm -rf $p/result_of_name
ssh -t "$noda" "docker exec "$id_container" /usr/bin/bash /usr/share/elasticsearch/gzip_elast.sh"
-------------------------------------------------------------------------------------
При необходимости просмотра заархивированных индексов нам необходимо:
- Копируем необходимый нам индекс из zipindex в директорию /nfs/elasticsearch/nodes/0/indices
cp -R zipindex/SpQ9T9sbRFCApaE2ua7aiA /nfs/elasticsearch/nodes/0/indices
- Распаковываем
gunzip -r /nfs/elasticsearch/nodes/0/indices/SpQ9T9sbRFCApaE2ua7aiA
- Перезапускаем Elasticsearch (в нашем случае мы перезапускаем стек или сервис).
- !!! Останавливаем(удаляем) Curator, так как он будет постоянно закрывать нужный нам индекс
- Открываем распакованный нами индекс следующей командой:
curl -X POST http://10.10.10.12:9200/fluentd-20191223/_open
Где fluentd-20191223 - нужный нам индекс
- Проверяем, что данный индекс открыт так же по урл http://10.10.10.12:9200/_cat/indices
Если всё ок, то можно идти в кибану и просматривать логи за указанный период.
Полезные команды для работы с Elasticsearch:
#открытие индекса
curl -X POST http://10.10.10.12:9200/fluentd-20191223/_open
#закрытие индекса
curl -X POST http://10.10.10.12:9200/fluentd-20191223/_close
#переименование индекса
curl -HContent-Type:application/json -XPOST http://10.10.10.12:9200/_reindex?pretty -d'{
"source": {
"index": "fluentd-20191223"
},
"dest": {
"index": "fluentd-20191223-reindexed"
}
}'
#удаление индекса
curl -XDELETE http://10.10.10.12:9200/fluentd-20191230
Внутренняя настройка сжатия elasticsearch настраивается так:
curl -X POST http://10.10.10.12:9200/_all/_close
curl -XPUT 'http://10.10.10.12:9200/_all/_settings' -H 'Content-Type: application/json' -d '{"index.codec" : "best_compression"}'
curl -X POST http://10.10.10.12:9200/_all/_open
curl -HContent-Type:application/json -XPOST http://10.10.10.12:9211/blaclistoon/1 --data-binary @blacklist_OON.json ## создание индекса из json файла
curl -X PUT http://10.10.10.12:9211/blacklist_persons ## создание индекса