Réplicas de índices con un único nodo de Elasticsearch

por | diciembre 22, 2018

Para los que tengáis un stack ELK en un entorno de un sólo nodo sin alta disponibilidad, si comprobáis el estado de la monitorización veréis que la «salud» de los índices aparece en amarillo:

En mi instalación nunca encontré ningún problema en la recolección y parseo de métricas. Lo que ocurre es que por defecto Elasticsearch intenta crear al menos una réplica de cada índice. Como no tenemos un clúster y sólo hay un nodo corriendo no va a poder realizar dicha réplica… de ahí el estado del índice.

Para solventar esto podemos ajustar el número de réplicas de varias formas:

  • Configurar el número de réplicas en 0 en Elasticsearch:
    curl -X PUT "192.168.1.2:9200/_settings" -H 'Content-Type: application/json' -d'
    {
        "index" : {
            "number_of_replicas" : 0
        }
    }
    '
    
  • Configurar el número de réplicas en el template por defecto para todos los índices:
    
    curl -XPUT "192.168.1.2:9200/_template/default_template" -H 'Content-Type: application/json' -d'
    {
      "index_patterns": ["*"],
      "settings": {
        "index": {
          "number_of_replicas": 0
        }
      }
    }
    '
    
  • También se puede configurar la propiedad index.number_of_replicas en el beat correspondiente bajo la sección «Elasticsearch template setting», por ejemplo en mi Metricbeat:
    #==================== Elasticsearch template setting ==========================
    
    setup.template.settings:
      index.number_of_shards: 3                                                                                                                                                                                        
      index.codec: best_compression
      #_source.enabled: false
      index.number_of_replicas: 0
     
    

    Para el resto de beats como Packetbeat, Filebeat… se puede hacer lo mismo.

Una vez hecho esto podemos ver que nuestros índices ya están en buen estado: