Elastic ignoring shard settings



So, because I ended up with way, way too many shards on my 3 node cluster due to not really understanding the consequences of having too many shards and therefore accepting the default of 5, I took the decision to wipe out my indexes and start again.

The steps I have taken
Most of my Logstash confs end with the output looking similar to the below. Any that reference their own templates, also specify in said template that I only want 1 shard and 2 replicas.

output {
 if [type] == "fileserverlogs" {
    elasticsearch {
      hosts => ["elasticsearch-server:9200"]
      index => "fileserverlogs"
	  template => "C:\logstash\config\templates\default-template.json"
	  template_overwrite => false

Within the C:\logstash\config\templates\default-template.json file, I have specified (amongst other things):

  "template" : "logstash-*",
  "version" : 60001,
  "settings" : {
    "index.refresh_interval" : "5s",
	"number_of_shards" : "1",
	"number_of_replicas" : "2"

Equally, with my winlogbeat instances, I have the winlogbeat.yml set up with the following key lines:

#==================== Elasticsearch template setting ==========================

  index.number_of_shards: 1

#----------------------------- Logstash output --------------------------------
hosts: [""]

I exported the winlogbeat template from the winlogbeat 6.2.1 as so:

PS> .\winlogbeat.exe export template --es.version 6.2.1 | Out-File -Encoding UTF8 winlogbeat.template.json

then pushed it to ES (omitting the version name as I don't want to have to update my winlogbeat YMLs on all my servers. Currently, they are set to use a template called "winlogbeat")

PS > Invoke-RestMethod -Method Put -ContentType "application/json" -InFile winlogbeat.template.json -Uri http://localhost:9200/_template/winlogbeat

I checked the template was successfully uploaded by using GET _template/ - This showed the "winlogbeat" template successfully uploaded alongside the kibana template.

Next I changed the default template on the Logstash server so that any confs that I used in the future with the standard logstash-template, would also be set to 1 shard. This too was confirmed after starting up LS service. Results shown below:

  "winlogbeat": {
    "order": 1,
    "index_patterns": [
    "settings": {
      "index": {
        "mapping": {
          "total_fields": {
            "limit": "10000"
        "refresh_interval": "5s",
        "number_of_shards": "1",
        "number_of_replicas": "2"


     "logstash": {
        "order": 0,
        "version": 60001,
        "index_patterns": [
        "settings": {
          "index": {
            "number_of_shards": "1",
            "number_of_replicas": "2",
            "refresh_interval": "5s"

I fired up Logstash again along with the winlogbeat instances. Data started flowing in again. I watched the shards. Each index STILL has the default 5 shards and 2 replicas.

I've obviously missed something. Where else in this chain to I need to specify that I only want one shard per index? They are daily indices so they don't get big. Split up in 5 parts makes them KB in size which is what caused my issues in the first place!

Thanks for any help you can offer.

(system) #2

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.