Elasticsearch Olası Sorunları ve Çözümleri
Disk Doluluğu Nedeniyle Log Yazımının Durdurulması
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 bildirilir:
curl -X PUT "<ELASTIC_IP>:9200/_all/_settings?pretty" \
-H 'Content-Type: application/json' \
-d '{
"index.blocks.read_only_allow_delete": null
}'
Disk Watermark Ayarları
Bu durum büyük disklerde miktar olarak yüksek alanların kullanılamamasına yol açabildiğinden sunucularına özel ayarlanması tavsiye edilir. Bu limitler yüzdesel ya da sayısal olarak disk boyutu verilerek güncellenebilir.
Sayısal Limit ile Ayarlama
curl -X PUT "<ELASTIC_IP>:9200/_cluster/settings" \
-H 'Content-Type: application/json' \
-d '{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "100gb",
"cluster.routing.allocation.disk.watermark.high": "80gb",
"cluster.routing.allocation.disk.watermark.flood_stage": "50gb",
"cluster.info.update.interval": "1m"
}
}'
Yüzdesel Limit ile Ayarlama
curl -X PUT "<ELASTIC_IP>:9200/_cluster/settings" \
-H 'Content-Type: application/json' \
-d '{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "90%",
"cluster.routing.allocation.disk.watermark.high": "93%",
"cluster.routing.allocation.disk.watermark.flood_stage": "95%",
"cluster.info.update.interval": "1m"
}
}'
Sonrasında anlık çalışmaya devam ettirdiğiniz Elasticsearch'ün konfigürasyon dosyasına da aynı değerleri girmelisiniz. Bu uygulamanın olası bir restart durumunda ayarlarınızın kaybolmaması için gereklidir.
elasticsearch.yml dosyasına eklenecek ayarlar:
cluster.routing.allocation.disk.threshold_enabled: true
cluster.routing.allocation.disk.watermark.low: 93%
cluster.routing.allocation.disk.watermark.high: 95%
Kibana'da Highlight Hatası
Hata Mesajı
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
Sebep
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 gelir. 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 ayarlayabilirsiniz.
curl -XPUT "<ELASTIC_IP>:9200/.ds-apinizer-log-apiproxy-AAAA-000*/_settings" \
-H "Content-Type: application/json" \
-d '{
"index": {
"highlight.max_analyzed_offset": 2000000
}
}'
API Trafik Ekranlarında "I/O Reactor Status: STOPPED" Hatası
Hata Mesajı
Request cannot be executed; I/O reactor status: STOPPED
Sebep
Elasticsearch'ün kullandığı RAM limitlerinin yükseltilmesi gereklidir.
Çözüm
Bu ayar jvm.options dosyasından yükseltilebilir. Toplam RAM miktarının yarısını aşmaması önerilir.
sudo vi /opt/elasticsearch/elasticsearch-7.9.2/config/jvm.options
Dosyaya aşağıdaki satırları ekleyin:
-Xms8g
-Xmx8g
Değişikliklerin uygulanması için Elasticsearch'i yeniden başlatın:
systemctl restart elasticsearch
Trafik Logları Elasticsearch'e Yazılamıyor
Belirti
API trafik ekranlarında son isteklere ait kayıtlar görünmez ve gateway (worker) uygulama logunda şu satırlar tekrarlanır:
ERROR ConnectorElasticSearchIndex - Elasticsearch traffic log could not be indexed for connection [<BAGLANTI_ID>]: ...
WARN ConnectorElasticSearchIndex - Elasticsearch I/O reactor stopped (...) for connection [<BAGLANTI_ID>]. Client evicted ...
Sebep
Elasticsearch bağlantısı geçici olarak yanıt veremez duruma geldiğinde (yukarıdaki "I/O Reactor Status: STOPPED" durumu, cluster'ın yeniden başlatılması, ağ kesintisi) Apinizer bağlantıyı kapatıp yeniden kurar. Yeniden kurulum sürerken gelen istekler bağlantıyı hazır bulamaz.