Ana içeriğe atla

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

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

id elasticsearch
Ö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:
sudo vi /etc/fstab
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