Problemy z wydajnością indeksowania oraz pamięcią
- Zwiększyć wartość -Xmx parametru ES_JAVA_OPTS sekcji elasticsearch w pliku docker-compose.yml na odpowiednio wyższą wartość.
Kontener elastica należy zaktualizować przy użyciu polecenia:
docker compose up
- W przypadku, gdy usługa Elastica znajduje się na serwerze w innej lokalizacji można zmniejszać wartość parametru "Rozmiar części" zadania zaplanowanego do indeksowania. Spowoduje to zmniejszenie requesta przesyłanego do Elastica.
Spróbować zwiększyć limit przepustowości w Kibanie z poziomu zakładki Management -> Dev Tools wywołując (domyślnie jest to 20mb):
PUT /_cluster/settings { "persistent" : { "indices.store.throttle.max_bytes_per_sec" : "100mb" } }
Na czas indeksowania można też dokonać następującej zmiany:
PUT /_cluster/settings { "transient" : { "indices.store.throttle.type" : "none" } }
Po skończonym indeksowaniu należy ustawić wartość "merge" tym samym poleceniem.
- Wyłączenie swapping dla większej stabilności node'a https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup-configuration-memory.html
Obsługa Kibany
- Kibana uruchomiona z powyższej konfiguracji dostępna jest pod adresem: http://localhost:5601/ Dane dostępowe takie jak w elastic.properties powyżej.
Przy pierwszym uruchomieniu Kibany trzeba ustawić patterny dla indeksów (process* dla procesów i activity* dla zadań).
- Zaindeksowane dokumenty przeglądamy w zakładce Discovery.
- W przypadku problemów ze zgodnością danych w elasticu (np. po zmianie typu jakiegoś indeksowanego pola) należy przejść do:
Management -> Stack Management -> IndexManagementzaznaczyć wszystko (Include rollup indices i Include hidden indices muszą być odznaczone) i wybrać delete indices. Następnie trzeba przeindeksować wszystkie dokumenty zadaniem zaplanowanym.Uwaga! W celu usunięcia wszystkich indeksów należy użyć zadania zaplanowanego Usuwanie indeksów procesów i zadań, nie należy tego robić w Kibanie!
W przypadku wystąpienia błędu:
Validation Failed: 1: this action would add [2] shards, but this cluster currently has [1000]/[1000] maximum normal shards open;
Należy zwiększyć parametr cluster.max_shards_per_node w Kibanie z poziomu zakładki Management -> Dev Tools wywołując (można to również zrobić w docker-compose.yml - opisane w sekcji Konfiguracja):
PUT /_cluster/settings { "persistent" : { "cluster.max_shards_per_node": "2000" } }
Zadanie zaplanowane automatycznie dostosowuje wartość powyższego parametru (na podstawie liczby definicji procesów/zadań), jednak może być potrzeba ręcznej jego zmiany (np. w przypadku kilku instancji systemu na jednym elasticu).
Wielkość parametru można oszacować w przypadku kilku instancji systemu. W tym celu, na każdej z baz danych należy wywołać następujące zapytanie:select sum(shards * 2) as minShards from (select count(distinct activitydefinitionid) as shards from activities UNION ALL select count(*) from (select pd.processdefinitionid, a.activitydefinitionid from activities a join processes p on a.process = p.objectid join processdefinitions pd on p.processdefinition = pd.objectid group by pd.processdefinitionid, a.activitydefinitionid) tmp) tmp2
Uzyskane wyniki należy zsumować i zaokrąglić do pełnych tysięcy.
W przypadku wystąpienia błędu (może wystąpić podczas usuwania procesów):
Trying to create too many scroll contexts. Must be less than or equal to: [500]
Należy zwiększyć parametr search.max_open_scroll_context w Kibanie z poziomu zakładki Management -> Dev Tools wywołując (można to również zrobić w docker-compose.yml - opisane w sekcji Konfiguracja):
PUT /_cluster/settings { "persistent" : { "search.max_open_scroll_context": 10000 } }
Usuwanie wiele indeksów na razUWAGA. Usuwanie wielu indeksów bez znajomości składni może skutkować usunięciem nadmiarowej ilości danych.Domyślnie opcja usuwania wielu niejednoznacznych indeksów jest wyłączona.Aby móc korzystać z takiej opcji należy wywołać:PUT /_cluster/settings { "transient": { "action.destructive_requires_name":false } }
Przykłady:Usuwanie indeksów z prefixem activity:DELETE /activity*
Usuwanie wszystkich indeksów (ukryte indeksy nie zostaną usunięte):DELETE _all
Uwaga! W celu usunięcia wszystkich indeksów należy użyć zadania zaplanowanego Usuwanie indeksów procesów i zadań, nie należy tego robić w Kibanie!
Uwagi
- Po usunięciu/anulowaniu procesu lub zawieszeniu/anulowaniu/przywróceniu zadania z poziomu widoku wyników wyszukiwania daną mogą nie być spójne, należy ponowne wyszukać.
- Wyszukiwanie zadań z użyciem pól związanych z terminami ostatecznymi nie wyszukuje tylko zadań z terminami ostatecznymi.
- Zmienne tabelaryczne są wyświetlane wyłącznie w ramach jednego wiersza.
Jeśli wystąpi poniższy błąd podczas eksportu wyników wyszukiwania do pliku:
java.io.IOException: entity content is too long [356732089] for the configured buffer limit [104857600]
to należy zmniejszyć wartość parametru systemowego PackSizeInAdvanceSearchExport.
Błąd ten oznacza, że request przesyłany do Elastica jest za duży (domyślnie jest to 100 MB). Istnieje możliwość zwiększenia tego limitu po stronie Elastica (bez zmniejszania parametru systemowego), jednak jest to niezalecane.
Limit można zwiększyć w pliku docker-compose.yml w sekcji elasticsearch -> environment, dodając linijkę:
"http.max_content_length": "200mb"
z odpowiednią wartością rozmiaru request'a. Kontener elastica należy zaktualizować przy użyciu polecenia:
docker compose up
Przydatne linki:
- Jak działa elastic - https://www.elastic.co/blog/found-elasticsearch-top-down
- Multi-nodes docker - https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-dev-mode
- Wydajność - https://www.elastic.co/guide/en/elasticsearch/reference/8.6/tune-for-indexing-speed.html
https://www.elastic.co/guide/en/elasticsearch/guide/master/indexing-performance.html - Optymalizacja wyszukiwania - https://www.elastic.co/blog/found-optimizing-elasticsearch-searches/
- Wymagania sprzętowe - https://www.elastic.co/guide/en/elasticsearch/guide/master/hardware.html
- Optymalizacja pamięci - https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup-configuration-memory.html