Graylog/Elasticsearch : Supprimer des documents

Posté le 6 octobre 2018

( Dois je préciser qu’une sauvegarde restaurable est requise avant ces manipulations ?)

Suite à …

l’injection malencontreuse de 15 millions de lignes de stacktrace java parce que le dev ne sait pas faire un try/catch (alors que Graylog ne déverse que 4 millions par mois) : Je dois me lancer dans cette quête de récupération d’espace.

La bonne requête

C’est la partie facile avec un peu de docs et :

curl -XPOST http://localhost:9200/graylog_13/delete_by_query -d'
{
  "query": {
    "match": {
      "application": "poweringJvm"
    }
  }
}'

Bon, c’est pas si simple

Plein d’erreurs défilent :

[FORBIDDEN/8/index write (api)]

Allons y calmement en analysant. En effet, Graylog verrouille en écriture les indexs pleins.
Pour le voir :

curl http://localhost:9200/graylog_13/_settings
....
"settings": {
  "index": {
    "number_of_shards": "4",
    "blocks": {
      "write": "true"
...

La documentation indique :

index.blocks.write
   Set to true to disable data write operations against the index.

Le message est clair.
Pour déverrouiller :

curl -X PUT http://localhost:9200/graylog_13/_settings -d'
{
    "index" : {
        "blocks" : {
          "write": false
        }
    }
}'

Et hop, on renvoie la requête de delete!

Les documents sont enfin supprimés !! Ah.. bah non, juste taggé «delete» : l’espace n’est pas récupéré pour autant ! Pas d’inquiétude : y a une API pour ça

curl -XPOST 'http://localhost:9200/_forcemerge?only_expunge_deletes=true'

FIN !