Kubernetes - запуск ELK с ILM и snapshot

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

Будем запус­кать elk с поли­ти­кой рота­ции ILM, в дан­ном при­ме­ре (чтоб было быст­рее) рота­ция будет сра­ба­ты­вать сле­ду­ю­щим обра­зом: (рол­ло­вер - созда­ние новых индек­сов будет сра­ба­ты­вать при дости­же­нии 5 мега­байт или сро­ком более 1 часа, далее уда­ле­ние ста­ро­го индек­са будет про­хо­дить в тече­нии 5 минут, но пока не будет создан его снап­шот, что­бы в слу­чае чего его мож­но было восстановить )
При отправ­ке логов будем филь­тро­вать поля с мак адре­са­ми и айпи адре­са­ми. Индек­сы и снап­шо­ты будем хра­нить на общем nfs хранилище

 

Созда­ём неймспейс

cat namespace.yml

 

 

 

Elasticsearch запус­ка­ем с помо­щью сле­ду­ю­ще­го фай­ла, опи­са­ние по неко­то­рым пара­мет­рам ниже:

cat elasticsearch_work.yaml

 

 

 

В пере­мен­ных ука­зы­ва­ем имя наше­го кластера:
- name: cluster.name
value: test-clusnet.local
Имя на нфс шаре для наших индек­сов будет сле­ду­ю­щим: elasticsearch-nfs-share а для снап­шо­тов elasticsearch-nfs-share-for-shapshot
кста­ти что­бы мож­но было создать репо­зи­то­рий для хра­ни­ли­ща исполь­зу­ем пере­мен­ные env
- name: path.repo
value: "/snapshot"
Что­бы в про­ки­ну­тые на нфс дирек­то­рии мож­но было нор­маль­но запи­сы­вать надо попра­вить для них вла­дель­ца, поэто­му используем
initContainers а имен­но fix-permissions и fix-permissions2, для кон­тей­не­ров busybox исполь­зу­ем поли­ти­ку imagePullPolicy: IfNotPresent что­бы они каж­дый раз не выкачивались.

Ниже файл для запус­ка пане­ли киба­на, в нём мы пра­вим толь­ко имя для ingress и namespace:

cat kibana_work.yaml

 

 

 

Далее рас­смот­рим filebeat это ути­ли­та кото­рая будет соби­рать логи из фай­лов и отправ­лять их в logstash, не исполь­зу­е­мые пара­мет­ры я закомментировал

cat filebeat_work.yaml

 

 

 

Теперь рас­смот­рим кон­фиг logstash. Основ­ные изме­не­ния будут про­из­во­дить­ся имен­но в нём, рас­смот­рим их подробнее:
cat logstash-deployment.yaml

 

 

 

В input port ука­зы­ва­ет­ся порт на кото­ром ожи­да­ют­ся дан­ные от filebeat. Далее в филь­тре исполь­зу­ем условие
if [kubernetes][namespace] == "terminal-soft" кото­рое по име­ни ней­с­пей­са добав­ля­ет тэг
add_tag => "tag-terminal-soft" и уда­ля­ет поля с име­нем аген­та и вер­си­ей, а так­же с мак и айпи адресами
remove_field => ["[agent][name]","[agent][version]","[host][mac]","[host][ip]"] }.
После в при отправ­ке output в elasticsearch исполь­зу­ем усло­вие, по тэгу добав­лен­но­му ранее в филь­тре: if "tag-terminal-soft" in [tags] { и если он сов­па­да­ет то про­из­во­дим сле­ду­ю­щие действия:
ука­зы­ва­ем как будет назы­вать­ся индекс:
index => "terminal-soft-%{+YYYY.MM.dd}"
Ука­зы­ва­ем как будет назы­вать­ся роло­вер алиас:
ilm_rollover_alias => "terminal-soft"
и ука­зы­ва­ем как будет назы­ва­ет­ся имя у ILM политики:
ilm_policy => "terminal-soft"

ВАЖНО!!!!! TEMPLATE и ILM ДОЛЖНЫ БЫТЬ СОЗДАНЫ В KIBANA ДО ТОГО КАК LOGSTASH БУДЕТ ЗАПУЩЕН

Опи­са­ние кон­фи­гов закон­че­но теперь можем запус­кать их в кластере:
kubectl apply -f namespace.yml
kubectl apply -f elasticsearch_work.yaml -f kibana_work.yaml
далее ждём когда запу­стит­ся elasticsearch и kibana

Как запу­стит­ся, захо­дим по наше­му ingress домену:
http://elk.test.local/

Ну всё, идём настра­и­вать template для индек­са и ilm политику.

 

тут вруч­ную наби­ва­ем @timestamp и выби­ра­ем date

Template созда­ли теперь перей­дём к созда­нию ILM

Пока поли­ти­ку созда­ния снап­шо­та не будем ука­зы­вать, так как она ещё не создана.

Всё теперь мож­но запус­кать filebeat и logstash
kubectl apply -f filebeat_work.yaml -f logstash-deployment.yaml

После запус­ка, про­ве­ря­ем что индекс создался:

Про­ве­ря­ем что поли­ти­ка под­це­пи­лась к индек­су:

Теперь созда­дим поли­ти­ку по снапшотам:
Но сна­ча­ла репозиторий:

Репо­зи­то­рий созда­ли, созда­ём поли­ти­ку для снапшотов:

Ука­зы­ва­ем вре­мя сколь­ко будут хра­нить­ся снап­шо­ты а так­же мини­маль­ное и мак­си­маль­ное коли­че­ство снапшотов

За вре­мя пока я опи­сы­вал и делал скри­ны, про­шёл рол­ло­вер, проверим:
Ста­рый рол­ло­вер нахо­дит­ся в состо­я­нии delete

А у ново­го состо­я­ние rollover

Теперь для наше­го ILM доки­нем искать поли­ти­ку снап­шо­тов перед удалением:

Ну а что­бы ста­ло поболь­ше рол­ло­ве­ров, знат­но насрём в логи, в нейм­с­пей­се terminal-soft
Для это­го запу­стим такой файл:

cat _pod_govnolog2.yml

 

 

Под­ни­мет­ся 80 подов кото­рые будут в бес­ко­неч­ном цик­ле срать в лог.

 

==========================================================================
Проверяем:
Как видим ста­рый индекс удалился:

Но перед этим у нас создал­ся снапшот: