efk ротация

Thank you for reading this post, don't forget to subscribe!

Вви­ду боль­шо­го коли­че­ства гене­ри­ру­е­мых логов сер­ви­са­ми раз­ра­бот­чи­ков, кото­рые хра­нят­ся в elasticsearch, появи­лась необ­хо­ди­мость в рота­ции логов:

  1. 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 они отоб­ра­жать­ся не будут.

  1. Далее отра­ба­ты­ва­ет скрипт на одном из сер­ве­ров, кото­рый  нахо­дит закры­тые индек­сы, архи­ви­ру­ет их и пере­ме­ща­ет их в дру­гую дирек­то­рию. Скрипт рабо­та­ет по кро­ну из-под поль­зо­ва­те­ля 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"

-------------------------------------------------------------------------------------

При необ­хо­ди­мо­сти про­смот­ра заар­хи­ви­ро­ван­ных индек­сов нам необходимо:

  1. Копи­ру­ем необ­хо­ди­мый нам индекс из zipindex в дирек­то­рию /nfs/elasticsearch/nodes/0/indices

cp -R zipindex/SpQ9T9sbRFCApaE2ua7aiA /nfs/elasticsearch/nodes/0/indices

  1. Рас­па­ко­вы­ва­ем

gunzip -r /nfs/elasticsearch/nodes/0/indices/SpQ9T9sbRFCApaE2ua7aiA

  1. Пере­за­пус­ка­ем Elasticsearch (в нашем слу­чае мы пере­за­пус­ка­ем стек или сервис).
  2. !!! Останавливаем(удаляем) Curator, так как он будет посто­ян­но закры­вать нуж­ный нам индекс
  3. Откры­ва­ем рас­па­ко­ван­ный нами индекс сле­ду­ю­щей командой:

curl -X POST http://10.10.10.12:9200/fluentd-20191223/_open

Где fluentd-20191223 - нуж­ный нам индекс

  1. Про­ве­ря­ем, что дан­ный индекс открыт так же по урл 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  ## созда­ние индекса