ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

ืฉืžื™ ืื™ื’ื•ืจ ืกื™ื“ื•ืจื ืงื•, ืื ื™ ืžื•ื‘ื™ืœ ื˜ื›ื ื™ ื‘ืฆื•ื•ืช ื”ืžื ื”ืœื™ื ืฉืžืชื—ื–ืง ืืช ื›ืœ ื”ืชืฉืชื™ืช ืฉืœ Domclick.

ืื ื™ ืจื•ืฆื” ืœื—ืœื•ืง ืืช ื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื‘ื”ื’ื“ืจืช ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืžื‘ื•ื–ืจ ื‘- Elasticsearch. ื ื‘ื—ืŸ ืื™ืœื• ื”ื’ื“ืจื•ืช ื‘ืฆืžืชื™ื ืื—ืจืื™ื•ืช ืœื”ืคืฆื” ืฉืœ ืจืกื™ืกื™ื, ืื™ืš ILM ืขื•ื‘ื“ ื•ืคื•ืขืœ.

ืžื™ ืฉืขื•ื‘ื“ ืขื ื™ื•ืžื ื™ื, ื‘ื“ืจืš ื–ื• ืื• ืื—ืจืช, ืžืชืžื•ื“ื“ ืขื ื”ื‘ืขื™ื” ืฉืœ ืื—ืกื•ืŸ ืœื˜ื•ื•ื— ืืจื•ืš ืœืฆื•ืจืš ื ื™ืชื•ื— ืžืื•ื—ืจ ื™ื•ืชืจ. ื‘- Elasticsearch ื–ื” ื ื›ื•ืŸ ื‘ืžื™ื•ื—ื“, ื›ื™ ื”ื›ืœ ื”ื™ื” ืžืฆืขืจ ืขื ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ืื•ืฆืจ. ื’ืจืกื” 6.6 ื”ืฆื™ื’ื” ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ILM. ื–ื” ืžื•ืจื›ื‘ ืž-4 ืฉืœื‘ื™ื:

  • ื—ื - ื”ืื™ื ื“ืงืก ืžืชืขื“ื›ืŸ ื•ืฉืื™ืœืชื” ื‘ืื•ืคืŸ ืคืขื™ืœ.
  • ื—ื - ื”ืื™ื ื“ืงืก ื›ื‘ืจ ืœื ืžืขื•ื“ื›ืŸ, ืื‘ืœ ืขื“ื™ื™ืŸ ื ืžืฆื ื‘ืฉืื™ืœืชื”.
  • ืงืจ - ื”ืื™ื ื“ืงืก ืื™ื ื• ืžืขื•ื“ื›ืŸ ื™ื•ืชืจ ื•ืœืขืชื™ื ืจื—ื•ืงื•ืช ื ืฉืืœืช ืฉืื™ืœืชื”. ื”ืžื™ื“ืข ืขื“ื™ื™ืŸ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื ื™ืชืŸ ืœื—ื™ืคื•ืฉ, ืืš ื™ื™ืชื›ืŸ ืฉื”ืฉืื™ืœืชื•ืช ื™ื”ื™ื• ืื™ื˜ื™ื•ืช ื™ื•ืชืจ.
  • ืžื—ืง - ืื™ืŸ ืฆื•ืจืš ื™ื•ืชืจ ื‘ืื™ื ื“ืงืก ื•ื ื™ืชืŸ ืœืžื—ื•ืง ืื•ืชื• ื‘ื‘ื˜ื—ื”.

ื ึธืชื•ึผืŸ

  • Elasticsearch Data Hot: 24 ืžืขื‘ื“ื™ื, 128 ื’'ื™ื’ื”-ื‘ื™ื™ื˜ ื–ื™ื›ืจื•ืŸ, 1,8 TB SSD RAID 10 (8 ืฆืžืชื™ื).
  • Elasticsearch Data Warm: 24 ืžืขื‘ื“ื™ื, 64 GB ื–ื™ื›ืจื•ืŸ, 8 TB NetApp SSD Policy (4 ืฆืžืชื™ื).
  • Elasticsearch Data Cold: 8 ืžืขื‘ื“ื™ื, ื–ื™ื›ืจื•ืŸ ืฉืœ 32 ื’'ื™ื’ื”-ื‘ื™ื™ื˜, RAID 128 HDD 10 TB (4 ืฆืžืชื™ื).

ื™ืขื“

ื”ื’ื“ืจื•ืช ืืœื• ืื™ื ื“ื™ื‘ื™ื“ื•ืืœื™ื•ืช, ื”ื›ืœ ืชืœื•ื™ ื‘ืžืงื•ื ื‘ืฆืžืชื™ื, ื‘ืžืกืคืจ ื”ืื™ื ื“ืงืกื™ื, ื”ื™ื•ืžื ื™ื ื•ื›ื•'. ื™ืฉ ืœื ื• 2-3 TB ืฉืœ ื ืชื•ื ื™ื ื‘ื™ื•ื.

  • 5 ื™ืžื™ื - ืฉืœื‘ ื—ื (8 ืจืืฉื™ / 1 ื”ืขืชืง).
  • 20 ื™ืžื™ื - ืฉืœื‘ ื—ื (ื›ื™ื•ื•ืฅ ืื™ื ื“ืงืก 4 ื”ืขืชืง ืจืืฉื™ / 1 ื”ืขืชืง).
  • 90 ื™ืžื™ื - ืฉืœื‘ ืงืจ (ืžื“ื“ ื”ืงืคืื” 4 ื”ืขืชืง ืจืืฉื™ / 1 ื”ืขืชืง).
  • 120 ื™ืžื™ื - ืฉืœื‘ ืžื—ื™ืงืช.

ื”ื’ื“ืจืช Elasticsearch

ื›ื“ื™ ืœื”ืคื™ืฅ ืจืกื™ืกื™ื ืขืœ ืคื ื™ ืฆืžืชื™ื, ืืชื” ืฆืจื™ืš ืจืง ืคืจืžื˜ืจ ืื—ื“:

  • ื—ึทื-ืฆืžืชื™ื:
    ~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
    # Add custom attributes to the node:
    node.attr.box_type: hot
  • ื—ื-ืฆืžืชื™ื:
    ~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
    # Add custom attributes to the node:
    node.attr.box_type: warm
  • ืงืจ-ืฆืžืชื™ื:
    ~]# cat /etc/elasticsearch/elasticsearch.yml | grep attr
    # Add custom attributes to the node:
    node.attr.box_type: cold

ื”ื’ื“ืจืช Logstash

ืื™ืš ื›ืœ ื–ื” ืขื•ื‘ื“ ื•ืื™ืš ื”ื˜ืžืขื ื• ืืช ื”ืชื›ื•ื ื” ื”ื–ื•? ื ืชื—ื™ืœ ื‘ื”ื›ื ืกืช ื™ื•ืžื ื™ื ืืœ Elasticsearch. ื™ืฉื ืŸ ืฉืชื™ ื“ืจื›ื™ื:

  1. Logstash ืžื‘ื™ื ื™ื•ืžื ื™ ืงืคืงื. ื™ื›ื•ืœ ืœื”ืจื™ื ื ืงื™ ืื• ืœื”ืžื™ืจ ื‘ืฆื“ ืฉืœืš.
  2. ืžืฉื”ื• ื‘ืขืฆืžื• ื›ื•ืชื‘ ืืœ Elasticsearch, ืœืžืฉืœ, ืฉืจืช APM.

ืฉืงื•ืœ ื“ื•ื’ืžื” ืœื ื™ื”ื•ืœ ืื™ื ื“ืงืกื™ื ื‘ืืžืฆืขื•ืช Logstash. ื–ื” ื™ื•ืฆืจ ืื™ื ื“ืงืก ื•ื—ืœ ืขืœื™ื• ืชื‘ื ื™ืช ืื™ื ื“ืงืก ื•ืžืชืื™ื ืกื™ื•ืžืช 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
    }
}

ื”ืชืงื ื” ืฉืœ Kibana

ื™ืฉ ื“ืคื•ืก ื‘ืกื™ืก ืฉืžืชืื™ื ืœื›ืœ ื”ืื™ื ื“ืงืกื™ื ื”ื—ื“ืฉื™ื. ื”ื•ื ืงื•ื‘ืข ืืช ื”ืชืคืœื’ื•ืช ื”ืื™ื ื“ืงืกื™ื ื”ื—ืžื™ื, ืžืกืคืจ ื”ืจืกื™ืกื™ื, ื”ืขืชืงื™ื ื•ื›ื•'. ืžืฉืงืœ ื”ืชื‘ื ื™ืช ื ืงื‘ืข ืœืคื™ ื”ืื•ืคืฆื™ื” order. ืชื‘ื ื™ื•ืช ืขื ืžืฉืงืœ ื’ื‘ื•ื” ื™ื•ืชืจ ืขื•ืงืคื•ืช ืคืจืžื˜ืจื™ื ืงื™ื™ืžื™ื ืฉืœ ืชื‘ื ื™ื•ืช ืื• ืžื•ืกื™ืคื™ื ื—ื“ืฉื™ื.

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch
ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

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-* ื‘ืืžืฆืขื•ืช ืชื‘ื ื™ืช ื‘ืขืœืช ืžืฉืงืœ ื’ื‘ื•ื” ื™ื•ืชืจ.

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch
ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

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 ื•ืžืชื—ื™ืœื™ื ืœืขืงื•ื‘ ืื—ืจ ื—ื™ื™ ื”ืื™ื ื“ืงืกื™ื.

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

ืงื‘ืœ _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" : { }
          }
        }
      }
    }
  }
}

ื‘ืขื™ื•ืช

ื”ื™ื• ื‘ืขื™ื•ืช ื‘ืฉืœื‘ ื”ื”ืชืงื ื” ื•ืื™ืชื•ืจ ื”ื‘ืื’ื™ื.

ืฉืœื‘ ื—ื

ืœืกื™ื‘ื•ื‘ ื ื›ื•ืŸ ืฉืœ ื”ืžื“ื“ื™ื, ื”ื ื•ื›ื—ื•ืช ื‘ืกื•ืฃ ื”ื™ื ืงืจื™ื˜ื™ืช index_name-date-000026 ืคื•ืจืžื˜ ืžืกืคืจื™ื 000001. ื™ืฉื ืŸ ืฉื•ืจื•ืช ื‘ืงื•ื“ ืฉื‘ื•ื“ืงื•ืช ืื™ื ื“ืงืกื™ื ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ ืœื ื•ื›ื—ื•ืช ืฉืœ ืžืกืคืจื™ื ื‘ืกื•ืฃ. ืื—ืจืช, ืชื”ื™ื” ืฉื’ื™ืื”, ืœื ืชื—ื•ืœ ืคื•ืœื™ืกื•ืช ืขืœ ื”ืžื“ื“, ื•ื”ื•ื ืชืžื™ื“ ื™ื”ื™ื” ื‘ืฉืœื‘ ื”ื—ื.

ืฉืœื‘ ื—ื

ืคืกื™ื›ื•ืœื•ื’ (cutoff) โ€” ื”ืคื—ืชืช ืžืกืคืจ ื”ืจืกื™ืกื™ื, ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืœื ื• 4 ืฆืžืชื™ื ื‘ืฉืœื‘ื™ื ื”ื—ืžื™ื ื•ื”ืงืจื™ื. ื”ืชื™ืขื•ื“ ืžื›ื™ืœ ืืช ื”ืฉื•ืจื•ืช ื”ื‘ืื•ืช:

  • ื”ืื™ื ื“ืงืก ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืœืงืจื™ืื” ื‘ืœื‘ื“.
  • ืขื•ืชืง ืฉืœ ื›ืœ ืจืกื™ืก ื‘ืื™ื ื“ืงืก ื—ื™ื™ื‘ ืœื”ื™ืžืฆื ื‘ืื•ืชื• ืฆื•ืžืช.
  • ืžืฆื‘ ื‘ืจื™ืื•ืช ื”ืืฉื›ื•ืœ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื™ืจื•ืง.

ื›ื“ื™ ืœื’ื–ื•ื ืื™ื ื“ืงืก, Elasticsearch ืžืขื‘ื™ืจ ืืช ื›ืœ ื”ืจืกื™ืกื™ื ื”ืจืืฉื™ื™ื ืœืฆื•ืžืช ืื—ื“, ืžืฉื›ืคืœ ืืช ื”ืื™ื ื“ืงืก ื”ืงื˜ื•ืข ืขื ื”ืคืจืžื˜ืจื™ื ื”ื“ืจื•ืฉื™ื, ื•ืื– ืžื•ื—ืง ืืช ื”ื™ืฉืŸ. ืคึผึธืจึธืžึถื˜ึถืจ total_shards_per_node ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืฉื•ื•ื” ืื• ื’ื“ื•ืœ ืžืžืกืคืจ ื”ืจืกื™ืกื™ื ื”ืจืืฉื™ื™ื ื›ื“ื™ ืœื”ืชืื™ื ืœืฆื•ืžืช ืื—ื“. ืื—ืจืช, ื™ื”ื™ื• ื”ื•ื“ืขื•ืช ื•ืจืกื™ืกื™ื ืœื ื™ืขื‘ืจื• ืœืฆืžืชื™ื ื”ื ื›ื•ื ื™ื.

ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch
ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืœื˜ื•ื•ื— ืืจื•ืš ื‘- Elasticsearch

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"
          }
        }
      }
    }
  }
}

ืฉืœื‘ ืงืจ

ืœื”ืงืคื™ื (ื”ืงืคืื”) - ืื ื• ืžืงืคื™ืื™ื ืืช ื”ืื™ื ื“ืงืก ื›ื“ื™ ืœื™ื™ืขืœ ืฉืื™ืœืชื•ืช ืขืœ ื ืชื•ื ื™ื ื”ื™ืกื˜ื•ืจื™ื™ื.

ื—ื™ืคื•ืฉื™ื ื”ืžื‘ื•ืฆืขื™ื ืขืœ ืžื“ื“ื™ื ืงืคื•ืื™ื ืžืฉืชืžืฉื™ื ื‘-threadpool ื”ืงื˜ืŸ, ื”ื™ื™ืขื•ื“ื™, search_throttled ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ืžืกืคืจ ื”ื—ื™ืคื•ืฉื™ื ื‘ืžืงื‘ื™ืœ ืฉืคื’ืขื• ื‘ืจืกื™ืกื™ื ืงืคื•ืื™ื ื‘ื›ืœ ืฆื•ืžืช. ื–ื” ืžื’ื‘ื™ืœ ืืช ื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ื ื•ืกืฃ ื”ื ื“ืจืฉืช ืขื‘ื•ืจ ืžื‘ื ื™ ื”ื ืชื•ื ื™ื ื”ื—ื•ืœืคื™ื ื”ืชื•ืืžื™ื ืœืจืกื™ืกื™ื ืงืคื•ืื™ื, ืืฉืจ ื›ืชื•ืฆืื” ืžื›ืš ืžื’ืŸ ืขืœ ืฆืžืชื™ื ืžืคื ื™ ืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ ืžื•ื’ื–ืžืช.
ืžื“ื“ื™ื ืงืคื•ืื™ื ื”ื ืœืงืจื™ืื” ื‘ืœื‘ื“: ืื™ื ืš ื™ื›ื•ืœ ืœื”ื™ื›ื ืก ืืœื™ื”ื ื‘ืื™ื ื“ืงืก.
ื—ื™ืคื•ืฉื™ื ืขืœ ืžื“ื“ื™ื ืงืคื•ืื™ื ืฆืคื•ื™ื™ื ืœื”ืชื‘ืฆืข ื‘ืื™ื˜ื™ื•ืช. ืžื“ื“ื™ื ืงืคื•ืื™ื ืื™ื ื ืžื™ื•ืขื“ื™ื ืœืขื•ืžืก ื—ื™ืคื•ืฉ ื’ื‘ื•ื”. ื™ื™ืชื›ืŸ ืฉื—ื™ืคื•ืฉ ืฉืœ ืื™ื ื“ืงืก ืงืคื•ื ืขืฉื•ื™ ืœื”ื™ืžืฉืš ืฉื ื™ื•ืช ืื• ื“ืงื•ืช ืœื”ืฉืœืžืชื•, ื’ื ืื ืื•ืชื ื—ื™ืคื•ืฉื™ื ื”ื•ืฉืœืžื• ื‘ืืœืคื™ื•ืช ืฉื ื™ื•ืช ื›ืืฉืจ ื”ืžื“ื“ื™ื ืœื ื”ื•ืงืคืื•.

ืชื•ืฆืื•ืช ืฉืœ

ืœืžื“ื ื• ื›ื™ืฆื“ ืœื”ื›ื™ืŸ ืฆืžืชื™ื ืœืขื‘ื•ื“ื” ืขื ILM, ืœื”ื’ื“ื™ืจ ืชื‘ื ื™ืช ืœื—ืœื•ืงืช ืจืกื™ืกื™ื ื‘ื™ืŸ ืฆืžืชื™ื ื—ืžื™ื, ื•ืœื”ื’ื“ื™ืจ ืืช ILM ืœืื™ื ื“ืงืก ืขื ื›ืœ ืฉืœื‘ื™ ื”ื—ื™ื™ื.

ืงื™ืฉื•ืจื™ื ืฉื™ืžื•ืฉื™ื™ื

ืžืงื•ืจ: www.habr.com