Elasticsearch Olası Sorunları ve Çözümleri
Problem | Elasticsearch sunucularındaki disk doluluğu nedeniyle Elasticsearch'ün log yazımını durdurması |
---|---|
Sebep/Neden | Elasticsearch varsayılan ayarlarıyla kurulduğunda, bulunduğu disk %85 doluluk oranına ulaştığında uyarı verir ve %90'a geldiğinde log yazımını durdurur. |
Çözüm | Diskte yer açılması ya da diskin büyütülmesi gerekmektedir. Bu işlem sonrasında aşağıdaki komut ile diskin tekrar yazıma hazır olduğu bildirilmelidir.
|
Ek Öneri | Bu durum büyük disklerde miktar olarak yüksek alanların kullanılamamasına yol açabildiğinden sunucularına özel ayarlanması tavsiye edilmektedir. Bu limitler yüzdesel ya da direk sayısal olarak disk boyutu verilerek güncellenebilir. Disk boyutu sayısal limitle ayarlama:
Disk boyutunu yüzdesel limitle ayarlama:
|
Problem | Kibana'da log aramalarında alınabilen "x of y shards failed: The data you are seeing might be incomplete or wrong. The length of [X] field of [Y] doc of [<INDEX_NAME>] index has exceeded [1000000] - maximum allowed to be analyzed for highlighting" hatası |
---|---|
Sebep/Neden | Elasticsearch'ün her bir kayıt için highlight işlemini yapabileceği veri büyüklüğü limiti varsayılan olarak 1.000.000 karakter olarak gelmektedir. Elasticsearch'ün JVM RAM kullanımı ve arama hızı için belirlediği optimal değer bu şekildedir. |
Çözüm | Bu ayar aşağıdaki komut yardımıyla yükseltilebilir. Bu değeri, eğer veri boyutunuzu bilmiyorsanız, azar miktarda arttırarak verilerinize uygun limite ayarlamanız tavsiye edilir. curl -XPUT " "index" : { "highlight.max_analyzed_offset" : 2000000 } }' |
Problem | Api Trafik ekranlarında "Request cannot be executed; I/O reactor status: STOPPED" uyarısı ile logların görünmemesi |
---|---|
Sebep/Neden | Elasticsearch'ün kullandığı ram limitlerinin yükseltilmesi gereklidir. |
Çözüm | Bu ayar jvm.options dosyasından yükseltilebilinir. Toplam ram miktarının yarısını aşmaması tavsiye edilir. sudo vi /opt/elasticsearch/elasticsearch-7.9.2/config/jvm.options -Xms8g systemctl restart elasticsearch |
Problem | Elasticsearch exception [type=validation_exception, reason=Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [1000]/[1000] maximum shards open;] |
---|---|
Sebep/Neden | You are reaching the limit cluster.max_shards_per_node. Add more data node, reduce the number of shards in cluster or increase the shard limit on the system. |
Çözüm | Bu sorunun doğru çözümü veri tutan node sayısını arttırmaktır. |
Alternatif Çözüm | Data node'ları artırmak her zaman mümkün olmayabileceğinden, shard'ların manuel olarak yönetilmesi de kullanılabilir bir çözümdür. Bunun için aşağıdaki komutlar kullanılabilir.
curl http://<ELASTICSEARCH_IP>:9200/apinizer-log-apiproxy-<INDEX_KEY>/_rollover |
Alternatif Çözüm | Önceki çözümlerin ikisi de kullanılabilir değilse, en son çare eski dizinleri temizlemek/silmektir. Bu yöntem eski loglarda kayba neden olacağından ÖNERİLMEMEKTEDİR. curl -XDELETE http://<ELASTICSEARCH_IP>:9200/apinizer-log-apiproxy-<INDEX_KEY>-<INDEX_NUMBER>/_rollover |
Problem | Unassigned Shards - CLUSTER-RECOVERED |
---|---|
Sebep/Neden | Shard dağıtımını olası bir sunucu restart'ı ya da dosya kaybı sonrasında yapamıyor olabilir. |
Çözüm | Bu sorunun birden fazla çözümü olabilir. Tüm elasticsearch node'larının çalıştığından ve dosya kaybı olmadığından emin olunması gerekmektedir. |
Alternatif Çözüm | Elasticsearch master node'unda config/elasticsearch.yml dosyası kontrol edilir. Burada diğer node'ların ip'leri bulunabilir ve onların da çalıştığından emin olunulmalıdır. Bağlı node'lar kapalıyken "GET /_nodes" isteği ile de bu node'ları göremezsiniz. Aşağıdaki komutlar ile node'ların, cluster'ın ve shard'ların durumu kontrol edilir. curl "<ELASTICSEARCH_IP>:9200/_nodes" curl "<ELASTICSEARCH_IP>:9200/_cluster/allocation/explain" curl "<ELASTICSEARCH_IP>:9200/_cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state" #Aşağıdaki komut ile node'lar üzerindeki paylaştırma tekrar aktif edilir curl -XPUT "<ELASTICSEARCH_IP>:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "transient" : { "cluster.routing.allocation.enable": true } }' #Üstteki komut yeterli olmadığında aşağıdaki komut ile bu işlem zorlanır curl -XPOST "<ELASTICSEARCH_IP>:9200/_cluster/reroute?retry_failed=true&pretty"
|