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:
Değişikliklerin uygulanması için Elasticsearch’i yeniden başlatın:
systemctl restart elasticsearch
Maximum Shards Limit Hatası
Hata Mesajı
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
_cluster.max_shards_per_node limitine ulaşılmıştır. Veri tutan node sayısını arttırmak, cluster’daki shard sayısını azaltmak veya sistem üzerindeki shard limitini yükseltmek gerekmektedir.
Çözüm 1: Data Node Sayısını Arttırma
Bu sorunun önerilen çözümü veri tutan node sayısını arttırmaktır.
Çözüm 2: Shard Limitini Yükseltme
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:
curl -XPUT http://<ELASTICSEARCH_IP>:9200/_cluster/settings \
--header "Content-Type:application/json" \
-d '{
"persistent": {
"cluster.routing.allocation.total_shards_per_node": 2000,
"cluster.max_shards_per_node": 2000
}
}'
Rollover işlemini tetikleyin:
curl http://<ELASTICSEARCH_IP>:9200/apinizer-log-apiproxy-<INDEX_KEY>/_rollover
Çözüm 3: Eski Index’leri Silme (Önerilmez)
Bu yöntem eski loglarda kayba neden olacağından ÖNERİLMEMEKTEDİR. Sadece son çare olarak kullanılmalıdır.
curl -XDELETE http://<ELASTICSEARCH_IP>:9200/apinizer-log-apiproxy-<INDEX_KEY>-<INDEX_NUMBER>
Unassigned Shards - CLUSTER-RECOVERED
Sebep
Shard dağıtımını olası bir sunucu restart’ı ya da dosya kaybı sonrasında yapamıyor olabilir.
Çözüm Adımları
1. Node Durumunu Kontrol Etme
Tüm Elasticsearch node’larının çalıştığından ve dosya kaybı olmadığından emin olunması gerekir.
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 olunmalıdır. Bağlı node’lar kapalıyken GET /_nodes isteği ile de bu node’ları göremezsiniz.
2. Cluster Durumunu Kontrol Etme
Aşağıdaki komutlar ile node’ların, cluster’ın ve shard’ların durumu kontrol edilir:
# Node'ları listele
curl "<ELASTICSEARCH_IP>:9200/_nodes"
# Shard allocation açıklamasını al
curl "<ELASTICSEARCH_IP>:9200/_cluster/allocation/explain"
# Shard durumunu kontrol et
curl "<ELASTICSEARCH_IP>:9200/_cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state"
3. Allocation’ı Tekrar Aktif Etme
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
}
}'
4. Reroute İşlemi
Ü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"
NAS Disk Mount Erişim Hatası
Sebep
NAS diskine bağlanmaya çalışırken, dosya sistemi erişim izinlerinin ayarlanması gerekmektedir.
Çözüm
1. Elasticsearch Kullanıcı ID Bilgilerini Alma
Örnek çıktı:
uid=1000(elasticsearch) gid=1000(elasticsearch) groups=1000(elasticsearch),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),101(lxd)
2. NAS Diskini Mount Etme
NAS diskini mount etmek için uygun yetkiler verilerek aşağıdaki komutla mount işlemi gerçekleştirilir:
sudo mount -t cifs \
-o rw,uid=1000,gid=1000,file_mode=0755,dir_mode=0755,username=elasticsearch,password=1234 \
//192.168.111.248/LogApinizer \
/home/data/
3. Kalıcı Mount Ayarları
Mount işleminin kalıcı olması için fstab dosyasına aşağıdaki satırları ekleyin:
Ekleyeceğiniz satır:
//192.168.111.248/LogApinizer /home/data cifs rw,uid=1000,gid=1000,file_mode=0755,dir_mode=0755,username=elasticsearch,password=1234 0 0