Elasticsearch

Eine Liste der Begriffe und Konzepte einer Lucene-basierten Suchmaschine ist unter OpenSearch zu finden.

API-Calls

elastic_host=localhost
elastic_cacert=/etc/elasticsearch/certs/http_ca.crt

# list all nodes and their roles
curl --cacert "$elastic_cacert" \
    --user "elastic:${ELASTIC_PASSWORD}" \
    --request GET "https://$elastic_host:9200/_cat/nodes?v&h=name,ip,node.role" \
    --header "Content-Type: application/json"

# disk size used by *just* the primaries
curl --cacert "$elastic_cacert" \
    --user "elastic:${ELASTIC_PASSWORD}" \
    --request GET "https://$elastic_host:9200/_stats/store?filter_path=indices.*.primaries.store.size_in_bytes" \
    --header "Content-Type: application/json" | jq '[.indices[].primaries.store.size_in_bytes] | add'

Troubleshooting

Herausfinden, warum Shards „unassigned“ sind
elastic_host=localhost
elastic_cacert=/etc/elasticsearch/certs/http_ca.crt

curl --cacert "$elastic_cacert" \
    --user "elastic:${ELASTIC_PASSWORD}" \
    --request GET "https://$elastic_host:9200/_cluster/allocation/explain?pretty=true" \
    --header "Content-Type: application/json"
number_of_replicas bei einem Managed Index Template anpassen

Das Template sollte nicht direkt angepasst werden, da dieses z.B. vom Fleet Manager administriert wird. Um trotzdem Modifikationen vornehmen zu können, gibt es normalerweise ein <index name>@custom Component Template, z.B. kibana_sample_data_logs@custom. Falls es dieses nicht gibt kann ein leeres Component Template erstellt werden und im Index Template importiert werden (Achtung: die Reihenfolge spielt der Component Templates spielt eine Rolle).

Bemerkung

Man könnte ein neues Index Template mit einer höheren Priority anlegen, allerdings wird dann gesamte Template überschrieben - nicht nur eine bestimmte Einstellung.

Anschliessend im Component Template die number_of_replicas (oder eine andere Einstellung) setzen:

index_name='kibana_sample_data_logs'
curl --cacert "$elastic_cacert" \
    --user "elastic:${ELASTIC_PASSWORD}" \
    --request PUT "https://$elastic_host:9200/_component_template/$index_name%40custom?pretty=true" \
    --header "Content-Type: application/json" \
    --data @- << 'EOF'
{
  "template": {
    "settings": {
      "index": {
        "number_of_replicas": "3"
      }
    }
  }
}
EOF

Mit folgendem API-Call kann die Erstellung eines neuen Indexes simuliert und die vererbten Einstellungen geprüft werden:

index_name='kibana_sample_data_logs'
curl --cacert "$elastic_cacert" \
    --user "elastic:${ELASTIC_PASSWORD}" \
    --request POST "https://$elastic_host:9200/_index_template/_simulate_index/$index_name" \
    --header "Content-Type: application/json" | jq | grep number_of_replicas

Ausserdem sollte geprüft werden, ob eine Index Lifecycle Management („ILM“) Policy die number_of_replicas anpasst. Ist dies der Fall, kann man die ILM Policy kopieren und in dem <index name>@custom Component Template auf die Kopie verweisen, beispielsweise:

index_name='kibana_sample_data_logs'
curl --cacert "$elastic_cacert" \
    --user "elastic:${ELASTIC_PASSWORD}" \
    --request PUT "https://$elastic_host:9200/_component_template/$index_name%40custom?pretty=true" \
    --header "Content-Type: application/json" \
    --data @- << 'EOF'
{
  "template": {
    "settings": {
      "index": {
        "lifecycle": {
          "name": "logs-1-replica"
        },
        "number_of_replicas": "3"
      }
    }
  }
}
EOF