Стек ELK разворачивается с помощью роли ansible, на docker узле с помощью docker-compose. Подробнее о конфигурации стека и роли можно посмотреть здесь. Для контроля индексов на кластере Elasticsearch необходимо установить Curator. Это приложение, которое по расписанию делает запрос к Elasticsearch для удаления устаревших индексов.
В кластер Elasticsearch собирается полный технологический журнал двух баз с примерно сотней пользователей. Среднее количество событий в час в течение рабочего дня составляет примерно 2.7 миллиона. Такое большое количество событий, которое может собраться за несколько дней, не нужно на этом кластере. Нужно оставлять события за последние 2 дня, чтобы при возникновении проблем можно было отыскать их источник.
Роль создана на базе docker-elk https://github.com/deviantony/docker-elk, у них же в репозитории есть расширение для запуска Curator. Но сделано будет не по рекомендации разработчиков, запуск в качестве дополнения, а путем добавления в основной файл docker-compose.yml.
Структура каталога docker-elk/tree/master/extensions/curator следующая:
.
├── config
│ ├── curator.yml
│ └── delete_log_files_curator.yml
├── curator-compose.yml
├── Dockerfile
├── entrypoint.sh
└── README.md
Содержимое файла curator-compose.yml:
version: '2'
services:
curator:
build:
context: extensions/curator/
environment:
ELASTICSEARCH_HOST: elasticsearch
CRON: 0 0 * * *
CONFIG_FILE: /usr/share/curator/config/curator.yml
COMMAND: /usr/share/curator/config/delete_log_files_curator.yml
UNIT_COUNT: 2
networks:
- elk
depends_on:
- elasticsearch
Необходимо взять описание сервиса и добавить в файл шаблона docker-compose.yml.j2 роли ansible и, заодно, в files/docker-elk/docker-compose.yml чтобы ansible-viz нарисовал блок-схему нового стека. Файл docker-compose.yml.j2 должен принять следующий вид:
version: '2'
services:
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: {{ elk.version }}
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports:
- "{{ elk.elasticsearch.ports.rest }}:9200"
- "{{ elk.elasticsearch.ports.nc }}:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
logstash:
build:
context: logstash/
args:
ELK_VERSION: {{ elk.version }}
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro
ports:
- "{{ elk.logstash.ports.mon }}:9600"
- "{{ elk.logstash.ports.beats }}:5000"
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- elasticsearch
kibana:
build:
context: kibana/
args:
ELK_VERSION: {{ elk.version }}
volumes:
- ./kibana/config/:/usr/share/kibana/config:ro
ports:
- "{{ elk.kibana.port }}:5601"
networks:
- elk
depends_on:
- elasticsearch
curator:
build:
context: extensions/curator/
environment:
ELASTICSEARCH_HOST: elasticsearch
CRON: 0 0 * * *
CONFIG_FILE: /usr/share/curator/config/curator.yml
COMMAND: /usr/share/curator/config/delete_log_files_curator.yml
UNIT_COUNT: 2
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
Теперь необходимо изменить структуру каталогов. В каталог files/docker-elk роли необходимо поместить каталог extensions из репозитория. Сохранить оригинальную структуру очень важно, чтобы сохранялась возможность актуализировать стек из репозитория разработчика.
Перед запуском необходимо разобраться с конфигурационными файлами Curator. Они находятся в docker-elk/extensions/curator/config. Они содержат настройки по умолчанию для стека, их вполне можно использовать. Также по умолчанию удаляются индексы старше, чем 2 дня. Имя индексов, которые необходимо чистить можно указать после развертывания, с помощью других ролей ansible или же вручную. Эти фильтры настраиваются в файле delete_log_files_curator.yml.
Теперь необходимо применить отредактированную роль к тому хосту, где она была развернута. Отсутствующие или изменившиеся файлы стека перезапишутся, стек перезапустится и Curator начнет работать.
shadowrunner
Пытаюсь добавить Curator в ELK через Docker, но при запуске контейнера получаю ошибку «Failed to connect to Elasticsearch». Проверил конфиг, всё по документации. Может, кто сталкивался? Может, стоит отдельно запускать Elasticsearch для Curator отдельно от общего стека?
router_rider
Вчера целый день гонял ELK в Docker, чтобы добавить Curator — вышло, что без правильного монтирования volume он вообще не видит индексы. Никак не могу понять, где у меня путь к данным указан неверно. Есть у кого-то working config для curator.yml? Или просто подскажите, куда копать? Спасибо!
acc365
Решил попробовать добавить Curator в ELK через Docker, но после настройки стал получать ошибки при запуске логов. Вроде все по инструкции, но elastic search не хочет соединяться с curator. Может, кто сталкивался? Может, я где-то криво прописал network mode?