ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ ΠΠ³ΠΎΡΡ Π‘ΠΈΠ΄ΠΎΡΠ΅Π½ΠΊΠΎ, Ρ ΡΠ΅Ρ Π»ΠΈΠ΄ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΠΎΠΌΠΊΠ»ΠΈΠΊ.
Π₯ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² Elasticsearch. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π° Π½ΠΎΠ΄Π°Ρ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠ΄ΠΎΠ², ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ILM.
Π’Π΅, ΠΊΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΠΎΠ³Π°ΠΌΠΈ, ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°. Π Elasticsearch ΡΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ ΠΊΡΡΠ°ΡΠΎΡΠ° Π²ΡΡ Π±ΡΠ»ΠΎ ΠΏΡΠΈΡΠΊΠΎΡΠ±Π½ΠΎ. Π Π²Π΅ΡΡΠΈΠΈ 6.6 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ILM. ΠΠ½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 4 ΡΠ°Π·:
- Hot β ΠΈΠ½Π΄Π΅ΠΊΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ.
- Warm β ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ, Π½ΠΎ Π²ΡΡ Π΅ΡΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ.
- Cold β ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΈ ΡΠ΅Π΄ΠΊΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π²ΡΡ Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°, Π½ΠΎ Π·Π°ΠΏΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.
- Delete β ΠΈΠ½Π΄Π΅ΠΊΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠ΄Π°Π»Π΅Π½.
ΠΠ°Π½ΠΎ
- Elasticsearch Data Hot: 24 ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, 128 ΠΠ± ΠΏΠ°ΠΌΡΡΠΈ, 1,8 Π’Π± SSD RAID 10 (8 Π½ΠΎΠ΄).
- Elasticsearch Data Warm: 24 ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, 64 ΠΠ± ΠΏΠ°ΠΌΡΡΠΈ, 8 Π’Π± NetApp SSD Policy (4 Π½ΠΎΠ΄Ρ).
- Elasticsearch Data Cold: 8 ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ², 32 ΠΠ± ΠΏΠ°ΠΌΡΡΠΈ, 128 Π’Π± HDD RAID 10 (4 Π½ΠΎΠ΄Ρ).
Π¦Π΅Π»Ρ
ΠΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½Ρ, Π²ΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ΅ΡΡΠ° Π½Π° Π½ΠΎΠ΄Π°Ρ , ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², Π»ΠΎΠ³ΠΎΠ² ΠΈ Ρ.Π΄. Π£ Π½Π°Ρ ΡΡΠΎ 2-3 Π’Π± Π΄Π°Π½Π½ΡΡ Π·Π° ΡΡΡΠΊΠΈ.
- 5 Π΄Π½Π΅ΠΉ β ΡΠ°Π·Π° Hot (8 ΠΎΡΠ½ΠΎΠ²Π½ΡΡ / 1 ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°).
- 20 Π΄Π½Π΅ΠΉ β ΡΠ°Π·Π° Warm (
shrink-ΠΈΠ½Π΄Π΅ΠΊΡ 4 ΠΎΡΠ½ΠΎΠ²Π½ΡΡ / 1 ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°). - 90 Π΄Π½Π΅ΠΉ β ΡΠ°Π·Π° Cold (
freeze-ΠΈΠ½Π΄Π΅ΠΊΡ 4 ΠΎΡΠ½ΠΎΠ²Π½ΡΡ / 1 ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°). - 120 Π΄Π½Π΅ΠΉ β ΡΠ°Π·Π° Delete.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Elasticsearch
ΠΠ»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΡΠ΄ ΠΏΠΎ Π½ΠΎΠ΄Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ:
- Hot-Π½ΠΎΠ΄Ρ:
~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr # Add custom attributes to the node: node.attr.box_type: hot
- Warm-Π½ΠΎΠ΄Ρ:
~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr # Add custom attributes to the node: node.attr.box_type: warm
- Cold-Π½ΠΎΠ΄Ρ:
~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr # Add custom attributes to the node: node.attr.box_type: cold
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Logstash
ΠΠ°ΠΊ ΡΡΠΎ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ? ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ² Π² Elasticsearch. ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π°:
- Logstash Π·Π°Π±ΠΈΡΠ°Π΅Ρ Π»ΠΎΠ³ΠΈ ΠΈΠ· Kafka. ΠΠΎΠΆΠ΅Ρ Π·Π°Π±ΡΠ°ΡΡ ΡΠΈΡΡΡΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅.
- Π§ΡΠΎ-ΡΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΈΡΠ΅Ρ Π² Elasticsearch, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, APM-ΡΠ΅ΡΠ²Π΅Ρ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· Logstash. ΠΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊ Π½Π΅ΠΌΡ
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
}
}
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Kibana
ΠΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ. ΠΠ½ Π·Π°Π΄Π°ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³ΠΎΡΡΡΠΈΡ
ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠ΄ΠΎΠ², ΡΠ΅ΠΏΠ»ΠΈΠΊ ΠΈ Ρ.Π΄. ΠΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠ΅ΠΉ order
. Π¨Π°Π±Π»ΠΎΠ½Ρ Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΌ Π²Π΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅.
GET _template/default
{
"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" : { }
}
}
ΠΠ°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌ k8s-ingress-*
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Π° Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΌ Π²Π΅ΡΠΎΠΌ.
GET _template/k8s-ingress
{
"k8s-ingress" : {
"order" : 100,
"index_patterns" : [
"k8s-ingress-*"
],
"settings" : {
"index" : {
"lifecycle" : {
"name" : "k8s-ingress",
"rollover_alias" : "k8s-ingress"
},
"codec" : "best_compression",
"routing" : {
"allocation" : {
"require" : {
"box_type" : "hot"
}
}
},
"number_of_shards" : "8",
"number_of_replicas" : "1"
}
},
"mappings" : {
"numeric_detection" : false,
"_meta" : { },
"_source" : { },
"dynamic_templates" : [
{
"all_fields" : {
"mapping" : {
"index" : false,
"type" : "text"
},
"match" : "*"
}
}
],
"date_detection" : false,
"properties" : {
"kubernetes" : {
"type" : "object",
"properties" : {
"container_name" : {
"type" : "keyword"
},
"container_hash" : {
"index" : false,
"type" : "keyword"
},
"host" : {
"type" : "keyword"
},
"annotations" : {
"type" : "object",
"properties" : {
"value" : {
"index" : false,
"type" : "text"
},
"key" : {
"index" : false,
"type" : "keyword"
}
}
},
"docker_id" : {
"index" : false,
"type" : "keyword"
},
"pod_id" : {
"type" : "keyword"
},
"labels" : {
"type" : "object",
"properties" : {
"value" : {
"type" : "keyword"
},
"key" : {
"type" : "keyword"
}
}
},
"namespace_name" : {
"type" : "keyword"
},
"pod_name" : {
"type" : "keyword"
}
}
},
"@timestamp" : {
"type" : "date"
},
"nginx" : {
"type" : "object",
"properties" : {
"access" : {
"type" : "object",
"properties" : {
"agent" : {
"type" : "text"
},
"response_code" : {
"type" : "integer"
},
"upstream" : {
"type" : "object",
"properties" : {
"port" : {
"type" : "keyword"
},
"name" : {
"type" : "keyword"
},
"response_lenght" : {
"type" : "integer"
},
"response_time" : {
"index" : false,
"type" : "text"
},
"addr" : {
"type" : "keyword"
},
"status" : {
"index" : false,
"type" : "text"
}
}
},
"method" : {
"type" : "keyword"
},
"http_version" : {
"type" : "keyword"
},
"bytes_sent" : {
"type" : "integer"
},
"request_lenght" : {
"type" : "integer"
},
"url" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"remote_user" : {
"type" : "text"
},
"referrer" : {
"type" : "text"
},
"remote_ip" : {
"type" : "ip"
},
"request_time" : {
"format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis||dd/MMM/YYYY:H:m:s Z",
"type" : "date"
},
"host" : {
"type" : "keyword"
},
"time" : {
"format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis||dd/MMM/YYYY:H:m:s Z",
"type" : "date"
}
}
},
"error" : {
"type" : "object",
"properties" : {
"server" : {
"type" : "keyword"
},
"upstream" : {
"type" : "object",
"properties" : {
"port" : {
"type" : "keyword"
},
"proto" : {
"type" : "keyword"
},
"host" : {
"type" : "keyword"
},
"url" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
}
}
},
"method" : {
"type" : "keyword"
},
"level" : {
"type" : "keyword"
},
"http_version" : {
"type" : "keyword"
},
"pid" : {
"index" : false,
"type" : "integer"
},
"message" : {
"type" : "text"
},
"tid" : {
"index" : false,
"type" : "keyword"
},
"url" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"referrer" : {
"type" : "text"
},
"remote_ip" : {
"type" : "ip"
},
"connection_id" : {
"index" : false,
"type" : "keyword"
},
"host" : {
"type" : "keyword"
},
"time" : {
"format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis||dd/MMM/YYYY:H:m:s Z",
"type" : "date"
}
}
}
}
},
"log" : {
"type" : "text"
},
"@version" : {
"type" : "text",
"fields" : {
"keyword" : {
"ignore_above" : 256,
"type" : "keyword"
}
}
},
"eventtime" : {
"type" : "float"
}
}
},
"aliases" : { }
}
}
ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ILM-ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΠΆΠΈΠ·Π½ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ².
GET _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" : { }
}
}
}
}
}
}
ΠΡΠΎΠ±Π»Π΅ΠΌΡ
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΡΡΠ°ΠΏΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
Hot-ΡΠ°Π·Π°
ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠΎΡΠ°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ index_name-date-000026
ΡΠΈΡΠ΅Π» ΡΠΎΡΠΌΠ°ΡΠ° 000001
. Π ΠΊΠΎΠ΄Π΅ Π΅ΡΡΡ ΡΡΡΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΈΡΠ΅Π» Π² ΠΊΠΎΠ½ΡΠ΅. ΠΠ½Π°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈ ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π² hot-ΡΠ°Π·Π΅.
Warm-ΡΠ°Π·Π°
Shrink (ΠΎΠ±ΡΠ΅Π·Π°Π½ΠΈΠ΅) β ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°ΡΠ΄ΠΎΠ², ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½ΠΎΠ΄ Π² ΡΠ΅ΠΏΠ»ΠΎΠΉ ΠΈ Ρ ΠΎΠ»ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π·Π°Ρ Ρ Π½Π°Ρ ΠΏΠΎ 4. Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΡΡΠΎΡΠΊΠΈ:
- The index must be read-only.
- A copy of every shard in the index must reside on the same node.
- The cluster health status must be green.
Π§ΡΠΎΠ±Ρ ΡΡΠ΅Π·Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ, Elasticsearch ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ (primary) ΡΠ°ΡΠ΄Ρ Π½Π° ΠΎΠ΄Π½Ρ Π½ΠΎΠ΄Ρ, Π΄ΡΠ±Π»ΠΈΡΡΠ΅Ρ ΡΡΠ΅Π·Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, Π° ΠΏΠΎΡΠΎΠΌ ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΡΠ°ΡΡΠΉ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ total_shards_per_node
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π²Π΅Π½ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΡΠ°ΡΠ΄ΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠΌΠ΅ΡΡΠΈΡΡ ΠΈΡ
Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ΄Π΅. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΈ ΡΠ°ΡΠ΄Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΅Π΄ΡΡ Π½Π° Π½ΡΠΆΠ½ΡΠ΅ Π½ΠΎΠ΄Ρ.
GET /shrink-k8s-ingress-2020.06.06-000025/_settings
{
"shrink-k8s-ingress-2020.06.06-000025" : {
"settings" : {
"index" : {
"refresh_interval" : "5s",
"auto_expand_replicas" : "0-1",
"blocks" : {
"write" : "true"
},
"provided_name" : "shrink-k8s-ingress-2020.06.06-000025",
"creation_date" : "1592225525569",
"priority" : "100",
"number_of_replicas" : "1",
"uuid" : "psF4MiFGQRmi8EstYUQS4w",
"version" : {
"created" : "7060299",
"upgraded" : "7060299"
},
"lifecycle" : {
"name" : "k8s-ingress",
"rollover_alias" : "k8s-ingress",
"indexing_complete" : "true"
},
"codec" : "best_compression",
"routing" : {
"allocation" : {
"initial_recovery" : {
"_id" : "_Le0Ww96RZ-o76bEPAWWag"
},
"require" : {
"_id" : null,
"box_type" : "cold"
},
"total_shards_per_node" : "8"
}
},
"number_of_shards" : "4",
"routing_partition_size" : "1",
"resize" : {
"source" : {
"name" : "k8s-ingress-2020.06.06-000025",
"uuid" : "gNhYixO6Skqi54lBjg5bpQ"
}
}
}
}
}
}
Cold-ΡΠ°Π·Π°
Freeze (Π·Π°ΠΌΠΎΡΠΎΠ·ΠΊΠ°) β ΠΌΡ Π·Π°ΠΌΠΎΡΠ°ΠΆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ.
Searches performed on frozen indices use the small, dedicated, search_throttled threadpool to control the number of concurrent searches that hit frozen shards on each node. This limits the amount of extra memory required for the transient data structures corresponding to frozen shards, which consequently protects nodes against excessive memory consumption.
Frozen indices are read-only: you cannot index into them.
Searches on frozen indices are expected to execute slowly. Frozen indices are not intended for high search load. It is possible that a search of a frozen index may take seconds or minutes to complete, even if the same searches completed in milliseconds when the indices were not frozen.
ΠΡΠΎΠ³ΠΈ
ΠΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°ΡΡ Π½ΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ILM, Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΡΠ΄ΠΎΠ² ΠΏΠΎ Π³ΠΎΡΡΡΠΈΠΌ Π½ΠΎΠ΄Π°ΠΌ ΠΈ Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ ILM Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΠ°Π·Π°ΠΌΠΈ ΠΆΠΈΠ·Π½ΠΈ.
ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ
https://www.elastic.co/guide/en/elasticsearch/reference/master/index-lifecycle-management-api.html https://www.elastic.co/guide/en/elasticsearch/reference/master/recovery-prioritization.html https://www.elastic.co/guide/en/elasticsearch/reference/master/indices-shrink-index.html#indices-shrink-index https://www.elastic.co/guide/en/elasticsearch/reference/master/frozen-indices.html https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-cluster.html#shard-allocation-awareness
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com