DataStream Index Lifecyle Management (ILM)

Cette page est un exemple d’implémentation des fonctionnalités de gestion d’index dans Kibana. La mise en place de règle de gestion permet :

  • Augmenter les performances de recherche et/ou de visualisation
  • Obtenir une meilleure résilience de ses données
  • De définir des standards de rétention.

L’avantage de la fonctionnalité ILM est d’automatiser cette gestion avec des règles simple d’usage.

ILM

Logstash Pipelines

Nous vous recommandons d’effectuer un changement de vos pipelines Logstash. La rotation n’étant plus journalière et n’étant plus gérer par logstash voici la modification à apporter :

output {
  elasticsearch {
    hosts => "https://<id>.<domain_name>:9243"
    index => "logs-k8s-time-series"
    user => "elastic"
    password => "*********"
    action => "create"
    ssl => true
    ssl_certificate_verification => false
    cacert => "/usr/share/logstash/config/ssl/ca.crt" 
  }
}

Voici la configuration globale du pipeline logstash :

curl -X PUT 'https://{{hostname}}/api/logstash/pipeline/main' -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -H 'Authorization: Basic {{TOKEN}}' -d @logstash-main-example.json

ILM Settings

Par défaut sur votre cluster la fonctionnalité ILM est configuré à un interval de vérification de 10 minutes.

:warning: Ce paramètre peut être modifié dans des contexts hors prod.

GET _cluster/settings

PUT _cluster/settings 
{
	"persistent":{
		"indices.lifecycle.poll_interval": "1s"
	}
}

ILM Policy

La définition d’une règle intègre plusieurs paramètres :

  • Phase : Il existe plusieurs type de phase hot, warm et cold.
  • Rollover : Le roulement d’un index s’applique avec au moins un de ces paramètres : max_age, max_size, max_docs.
  • Delete : La rétention d’un index avec la fonction de suppression.

Nous recommandons d’effectuer dans la phase hot une rotation d’index sur les paramètres suivant :

  • Logs :
    • max_age : 15d
    • max_size : 40gb
  • Metric :
    • max_age : 20d
    • max_size : 40gb

Et une deuxième recommandation est d’effectuer une retention d’index égale à 60 jours.

Cela permet d’augmenter les performances de l’index et d’optimiser les recherches.

PUT _ilm/policy/logs-k8s-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "15d",
            "max_size": "50gb",
			"max_docs": 10
          },
          "set_priority": {
            "priority": 50
          }
        }
      },
      "delete": {
        "min_age": "60d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

Components Template

Settings

PUT _component_template/logs-k8s-settings
{
  "template": {
    "settings": {
      "index.lifecycle.name": "logs-k8s-policy"
    }
  },
  "_meta": {
    "description": "Settings for K8S Logs"
  }
}

Mapping

PUT _component_template/logs-k8s-mappings
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date",
          "format": "date_optional_time||epoch_millis"
        },
        "message": {
          "type": "wildcard"
        }
      }
    }
  },
  "_meta": {
    "description": "Mappings for @timestamp and message fields"
  }
}

Index Template :book:

L’index template est une fonctionnalité permettant de définir des paramètres par défaut à vos index. Cela permet d’automatiser la gestion des index en appliquant des configurations de réplications, de règles de gestion automatiquement.

Nous recommandons d’avoir les paramètres de réplications suivant :

  • shard : 1
  • replicas : 1
PUT _index_template/logs-k8s-template
{
  "index_patterns": ["logs-k8s-*"],
  "data_stream": { },
  "composed_of": [ "logs-k8s-mappings", "logs-k8s-settings" ],                
  "priority": 500,
  "_meta": {
    "description": "Template for my time series data"
  }
}

Create Data Stream :green_book:

PUT logs-k8s-time-series/_bulk
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:21:15.000Z", "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736" }
{ "create":{ } }
{ "@timestamp": "2099-05-06T16:25:42.000Z", "message": "192.0.2.255 - - [06/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" }

Update Data Stream :memo:

POST logs-k8s-time-series/_doc
{
  "@timestamp": "2099-05-06T16:21:15.000Z",
  "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}

Create manually Data Stream :memo:

PUT _data_stream/logs-k8s-time-series

ILM Check

GET _ilm/status
GET _ilm/policy/logs-k8s-policy
GET logs-k8s-time-series/_ilm/explain

Attention, dans l’Index Managmenent la taille de votre index est l’addition des primaires shards et des replicas. ILM réalisera les actions de rollover sur la taille des primaires shards de votre index uniquement.

Delete example

DELETE /_data_stream/logs-k8s-time-series
DELETE / _component_template/logs-k8s-mappings
DELETE / _component_template/logs-k8s-settings
DELETE /_index_template/logs-k8s-template
DELETE /_ilm/policy/logs-k8s-policy