ʻO Igor Sidorenko koʻu inoa, he alakaʻi ʻenehana wau i ka hui o nā mea hoʻokele e mālama i ka ʻōnaehana holoʻokoʻa o Domclick.
Makemake au e kaʻana like i koʻu ʻike i ka hoʻonohonoho ʻana i ka mālama ʻikepili i hāʻawi ʻia ma Elasticsearch. E nānā mākou i nā hoʻonohonoho ma nā nodes ke kuleana no ka hāʻawi ʻana i nā shards, pehea ka hana a me ka hana ʻana o ILM.
ʻO ka poʻe e hana pū me nā lāʻau, i kekahi ala a i ʻole kekahi, ke kū nei i ka pilikia o ka mālama ʻana i ka wā lōʻihi no ka nānā ʻana ma hope. Ma Elasticsearch, he ʻoiaʻiʻo loa kēia, no ka mea, ua pōʻino nā mea āpau me ka hana curator. Hoʻokomo ka mana 6.6 i ka hana ILM. Aia i loko o 4 mau māhele:
Wela - Ke hōʻano hou ʻia nei ka papa kuhikuhi a nīnau ʻia.
Pumehana - ʻAʻole hōʻano hou ʻia ka papa kuhikuhi, akā ke nīnau ʻia nei.
Anu - ʻAʻole hōʻano hou ʻia ka papa kuhikuhi a ʻaʻole i nīnau pinepine ʻia. Pono e ʻimi ʻia ka ʻike, akā lohi paha nā nīnau.
Holoi - ʻAʻole pono ka papa kuhikuhi a hiki ke holoi pono ʻia.
Hāʻawi ʻia
Elasticsearch Data Hot: 24 mau mea hana, 128 GB memo, 1,8 TB SSD RAID 10 (8 nodes).
Pumehana ʻIkepili Elasticsearch: 24 mau mea hana, 64 GB hoʻomanaʻo, 8 TB NetApp SSD Kulekele (4 nodes).
Hoʻokahi kēia mau hoʻonohonoho, pili ia i ka wahi ma nā nodes, ka helu o nā indexes, logs, etc. Loaʻa iā mākou he 2-3 TB o ka ʻikepili i kēlā me kēia lā.
No ka puʻunaue ʻana i nā ʻāpana ma nā nodes, pono ʻoe i hoʻokahi ʻāpana:
Hot-nodes:
~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
# Add custom attributes to the node:
node.attr.box_type: hot
pumehana-nodes:
~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
# Add custom attributes to the node:
node.attr.box_type: warm
anu-nodes:
~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
# Add custom attributes to the node:
node.attr.box_type: cold
Hoʻonohonoho i ka Logstash
Pehea e hana ai a pehea mākou i hoʻokō ai i kēia hiʻohiʻona? E hoʻomaka kākou ma ka loaʻa ʻana o nā lāʻau i loko o Elasticsearch. ʻElua ala:
Lawe ʻo Logstash i nā lāʻau mai Kafka. Hiki ke kiʻi maʻemaʻe a hoʻololi paha ma kou ʻaoʻao.
Ke kākau nei kekahi mea iā Elasticsearch, no ka laʻana, kahi kikowaena APM.
E noʻonoʻo i kahi laʻana o ka hoʻokele ʻana i nā kuhikuhi ma o Logstash. Hoʻokumu ia i kahi kuhikuhi a pili iā ia kumu kuhikuhi a pili ILM.
k8s-ingress.conf
input {
kafka {
bootstrap_servers => "node01, node02, node03"
topics => ["ingress-k8s"]
decorate_events => false
codec => "json"
}
}
filter {
ruby {
path => "/etc/logstash/conf.d/k8s-normalize.rb"
}
if [log] =~ "[warn]" or [log] =~ "[error]" or [log] =~ "[notice]" or [log] =~ "[alert]" {
grok {
match => { "log" => "%{DATA:[nginx][error][time]} [%{DATA:[nginx][error][level]}] %{NUMBER:[nginx][error][pid]}#%{NUMBER:[nginx][error][tid]}: *%{NUMBER:[nginx][error][connection_id]} %{DATA:[nginx][error][message]}, client: %{IPORHOST:[nginx][error][remote_ip]}, server: %{DATA:[nginx][error][server]}, request: "%{WORD:[nginx][error][method]} %{DATA:[nginx][error][url]} HTTP/%{NUMBER:[nginx][error][http_version]}", (?:upstream: "%{DATA:[nginx][error][upstream][proto]}://%{DATA:[nginx][error][upstream][host]}:%{DATA:[nginx][error][upstream][port]}/%{DATA:[nginx][error][upstream][url]}", )?host: "%{DATA:[nginx][error][host]}"(?:, referrer: "%{DATA:[nginx][error][referrer]}")?" }
remove_field => "log"
}
}
else {
grok {
match => { "log" => "%{IPORHOST:[nginx][access][host]} - [%{IPORHOST:[nginx][access][remote_ip]}] - %{DATA:[nginx][access][remote_user]} [%{HTTPDATE:[nginx][access][time]}] "%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][bytes_sent]} "%{DATA:[nginx][access][referrer]}" "%{DATA:[nginx][access][agent]}" %{NUMBER:[nginx][access][request_lenght]} %{NUMBER:[nginx][access][request_time]} [%{DATA:[nginx][access][upstream][name]}] (?:-|%{IPORHOST:[nginx][access][upstream][addr]}:%{NUMBER:[nginx][access][upstream][port]}) (?:-|%{NUMBER:[nginx][access][upstream][response_lenght]}) %{DATA:[nginx][access][upstream][response_time]} %{DATA:[nginx][access][upstream][status]} %{DATA:[nginx][access][request_id]}" }
remove_field => "log"
}
}
}
output {
elasticsearch {
id => "k8s-ingress"
hosts => ["node01", "node02", "node03", "node04", "node05", "node06", "node07", "node08"]
manage_template => true # включаем управление шаблонами
template_name => "k8s-ingress" # имя применяемого шаблона
ilm_enabled => true # включаем управление ILM
ilm_rollover_alias => "k8s-ingress" # alias для записи в индексы, должен быть уникальным
ilm_pattern => "{now/d}-000001" # шаблон для создания индексов, может быть как "{now/d}-000001" так и "000001"
ilm_policy => "k8s-ingress" # политика прикрепляемая к индексу
index => "k8s-ingress-%{+YYYY.MM.dd}" # название создаваемого индекса, может содержать %{+YYYY.MM.dd}, зависит от ilm_pattern
}
}
Hoʻonohonoho Kibana
Aia kahi kumu kumu e pili ana i nā kuhikuhi kikoʻī hou a pau. Hoʻonohonoho ia i ka hāʻawi ʻana i nā indexes wela, ka helu o nā shards, replicas, etc. Hoʻoholo ʻia ke kaumaha o ka template e ke koho order. ʻO nā templa me ke kaumaha ʻoi aʻe e hoʻopololei i nā ʻāpana template i loaʻa a i ʻole e hoʻohui i nā mea hou.
E kiʻi i ka _template/paʻamau
{
"default" : {
"order" : -1, # вес шаблона
"version" : 1,
"index_patterns" : [
"*" # применяем ко всем индексам
],
"settings" : {
"index" : {
"codec" : "best_compression", # уровень сжатия
"routing" : {
"allocation" : {
"require" : {
"box_type" : "hot" # распределяем только по горячим нодам
},
"total_shards_per_node" : "8" # максимальное количество шардов на ноду от одного индекса
}
},
"refresh_interval" : "5s", # интервал обновления индекса
"number_of_shards" : "8", # количество шардов
"auto_expand_replicas" : "0-1", # количество реплик на ноду от одного индекса
"number_of_replicas" : "1" # количество реплик
}
},
"mappings" : {
"_meta" : { },
"_source" : { },
"properties" : { }
},
"aliases" : { }
}
}
A laila e hoʻopili i ka palapala ʻāina i nā kuhikuhi k8s-ingress-* me ka hoʻohana ʻana i ka laʻana me ke kaumaha kiʻekiʻe.
Ma hope o ka hoʻohana ʻana i nā ʻōkuhi āpau, hoʻohana mākou i ke kulekele ILM a hoʻomaka i ka nānā ʻana i ke ola o nā kuhikuhi.
E loaʻa iā _ilm/policy/k8s-ingress
{
"k8s-ingress" : {
"version" : 14,
"modified_date" : "2020-06-11T10:27:01.448Z",
"policy" : {
"phases" : {
"warm" : { # теплая фаза
"min_age" : "5d", # срок жизни индекса после ротации до наступления теплой фазы
"actions" : {
"allocate" : {
"include" : { },
"exclude" : { },
"require" : {
"box_type" : "warm" # куда перемещаем индекс
}
},
"shrink" : {
"number_of_shards" : 4 # обрезание индексов, т.к. у нас 4 ноды
}
}
},
"cold" : { # холодная фаза
"min_age" : "25d", # срок жизни индекса после ротации до наступления холодной фазы
"actions" : {
"allocate" : {
"include" : { },
"exclude" : { },
"require" : {
"box_type" : "cold" # куда перемещаем индекс
}
},
"freeze" : { } # замораживаем для оптимизации
}
},
"hot" : { # горячая фаза
"min_age" : "0ms",
"actions" : {
"rollover" : {
"max_size" : "50gb", # максимальный размер индекса до ротации (будет х2, т.к. есть 1 реплика)
"max_age" : "1d" # максимальный срок жизни индекса до ротации
},
"set_priority" : {
"priority" : 100
}
}
},
"delete" : { # фаза удаления
"min_age" : "120d", # максимальный срок жизни после ротации перед удалением
"actions" : {
"delete" : { }
}
}
}
}
}
}
Nā pilikia
Aia nā pilikia ma ka hoʻonohonoho hoʻonohonoho a me ka hoʻopau ʻana.
Hana wela
No ka hoʻololi pono ʻana o nā helu, he mea koʻikoʻi ka hele ʻana ma ka hopena index_name-date-000026 helu helu 000001. Aia nā laina i loko o ke code e nānā i nā kuhikuhi me ka hoʻohana ʻana i kahi ʻōlelo maʻamau no ka hiki ʻana o nā helu ma ka hopena. Inā ʻaʻole, e loaʻa kahi hewa, ʻaʻohe kulekele e hoʻopili ʻia i ka index, a e mau nō ia i ka wā wela.
Māhele mahana
Mokulaki (cutoff) — e hoemi ana i ka helu o na shards, no ka mea, he 4 node ko makou ma na mahele mehana a me ke anu.
Pono e heluhelu wale ka papa kuhikuhi.
Pono ke kope o kēlā me kēia shard i ka index ma ka node hoʻokahi.
Pono e ʻōmaʻomaʻo ke kūlana olakino puʻupuʻu.
No ka ʻoki ʻana i kahi index, hoʻoneʻe ʻo Elasticsearch i nā ʻāpana mua a pau i hoʻokahi node, hoʻopālua i ka ʻōlelo kuhikuhi i kālai ʻia me nā ʻāpana kūpono, a laila holoi i ka mea kahiko. ʻĀpana total_shards_per_node pono e like a oi aku paha ma mua o ka heluna o nā ʻāpana nui e hoʻokomo ai i hoʻokahi node. A i ʻole, e loaʻa nā leka a ʻaʻole e neʻe nā shards i nā nodes kūpono.
E kiʻi /shrink-k8s-ingress-2020.06.06-000025/_settings
pa ahau ke (hoʻokuʻu) - Hoʻokuʻu mākou i ka papa kuhikuhi no ka hoʻonui ʻana i nā nīnau ma ka ʻikepili mōʻaukala.
Ke hoʻohana nei nā hulina i hana ʻia ma nā helu paʻa paʻa i ka threadpool liʻiliʻi, hoʻolaʻa ʻia, hulina_throttled no ka mālama ʻana i ka heluna o nā hulina like ʻole i paʻi i nā ʻāpana hau hau ma kēlā me kēia node. Hoʻopili kēia i ka nui o ka hoʻomanaʻo ʻē aʻe i koi ʻia no nā kūkulu ʻikepili transient e pili ana i nā shards paʻa, a no laila e pale ai i nā node mai ka hoʻohana nui ʻana i ka hoʻomanaʻo.
Heluhelu wale 'ia na huahelu pa'a: 'a'ole hiki ke kuhikuhi i loko o ia mau mea.
Manaʻo ʻia e hoʻokō mālie ʻia nā hulina ma nā hōkeo paʻa. ʻAʻole i manaʻo ʻia nā papa kuhikuhi paʻa no ka hoʻouka ʻimi kiʻekiʻe. He mau kekona a mau minuke paha ka huli ʻana o ka papa kuhikuhi paʻa, ʻoiai inā pau nā hulina like i loko o nā milliseconds i ka wā ʻaʻole i paʻa nā helu.
Nā hopena
Ua aʻo mākou pehea e hoʻomākaukau ai i nā node no ka hana ʻana me ILM, hoʻonohonoho i kahi mamana no ka puʻunaue ʻana i nā ʻāpana ma waena o nā node wela, a hoʻonohonoho i ka ILM no kahi papa kuhikuhi me nā wahi āpau o ke ola.