Ana içeriğe atla
Zaman filtresi UTC’e göre yapılmaktadır.

Kayıt Temizleme Scripti

Aşağıdaki script, MongoDB’deki anomaly_detector_result koleksiyonunda depolanan kayıtlardan belirtilen saat öncesine kadar olan kayıtları silmek için kullanılır. Bu işlem ile veritabanı temizlenerek depolama alanı optimize edilir.
#!/bin/bash
 
# MongoDB sunucusuna bağlanmak için gerekli bilgiler
HOST="<MONGODB_MASTER_IP_ADDRESS>"
PORT="<MONGODB_PORT>"
DB_NAME="apinizerdb"
USERNAME="apinizer"
PASSWORD="<PASSWORD>"
AUTH_DB="admin"
TARGET_COLLECTION="anomaly_detector_result"
TARGET_LOG_LOCATION=$(pwd)/purge_anomaly_detector_result_collection.log
 
echo "Script started on $(date +"%Y-%m-%d %H:%M:%S")" >> $TARGET_LOG_LOCATION  
 
# Son kaç saat/gün öncesine kadar olan belgelerin silineceğini belirten değişken
TIME_VALUE="1D"  #Bu değeri istediğiniz gibi değiştirebilirsiniz.
  
# TIME_VALUE değerini analiz edip milisaniye cinsinden dönüştürme
if [[ $TIME_VALUE =~ [Hh]$ ]]; then
    HOURS_AGO=${TIME_VALUE%H*}
    TIME_IN_MILLISECONDS=$(($HOURS_AGO * 60 * 60 * 1000))
elif [[ $TIME_VALUE =~ [Dd]$ ]]; then
    DAYS_AGO=${TIME_VALUE%D*}
    TIME_IN_MILLISECONDS=$(($DAYS_AGO * 24 * 60 * 60 * 1000))
else
    echo "Invalid time format. Please enter a value ending with H (hour) or D (day)." >> $TARGET_LOG_LOCATION
    exit 1
fi
  
MONGO_COMMANDS=$(cat <<EOF
var dateToRemove=new Date((new Date().getTime() - $TIME_IN_MILLISECONDS));
var bulk = db.getCollection("$TARGET_COLLECTION").initializeUnorderedBulkOp();
bulk.find( {"executionTime":{"\$lt": dateToRemove}}).remove();
bulk.execute();
EOF
)
  
# Komutu çalıştır ve çıktısını log dosyasına yazdır
{
    mongosh mongodb://$USERNAME:$PASSWORD@$HOST:$PORT/$DB_NAME --authenticationDatabase $AUTH_DB --eval "$MONGO_COMMANDS"
    # Komutun tamamlanmasını kontrol et
    if [ $? -ne 0 ]; then
        echo "MongoDB command failed." >> $TARGET_LOG_LOCATION
        exit 1
    fi
} >> $TARGET_LOG_LOCATION 2>&1
  
 
echo "The command has been executed. Please check the content of the related collection." >> $TARGET_LOG_LOCATION
  
echo "Script finished on $(date +"%Y-%m-%d %H:%M:%S")" >> $TARGET_LOG_LOCATION

Nasıl Çalışır

1

MongoDB Bağlantı Bilgilerini Tanımlama

MongoDB sunucusuna bağlanmak için gerekli bilgiler ilgili değişkenlere tanımlanır: HOST, PORT, DB_NAME, USERNAME, PASSWORD ve AUTH_DB.
2

Zaman Dilimini Belirleme

TIME_VALUE değişkeni ile son kaç saat öncesine kadar olan kayıtların silineceği belirtilir. Bu değer saat (H) veya gün (D) cinsinden olabilir.
3

MongoDB Komutlarını Hazırlama

MONGO_COMMANDS değişkeni içerisinde, belirtilen saat öncesine kadar olan belgeleri bulmak ve silmek için MongoDB komutları tanımlanır.
4

Komutları Çalıştırma

mongosh komutu ile MongoDB sunucusuna bağlanılır ve MONGO_COMMANDS değişkeninde tanımlanan komutlar çalıştırılır.
5

Sonuç Kontrolü

İşlem tamamlandığında, ekrana “The command has been executed. Please check the content of the related collection.” mesajı yazdırılır.

Kullanım

Scripti çalıştırmadan önce MongoDB değişkenlerine kendi bilgilerinizi giriniz. TIME_VALUE değişkenini istediğiniz saat/gün değerine göre güncelleyebilirsiniz. Örneğin:
  • Son 3 saatteki belgeleri korumak ve geri kalanını silmek için TIME_VALUE=3H
  • Son 5 gündeki belgeleri korumak ve geri kalanını silmek için TIME_VALUE=5D
Scripti Linux tabanlı bir işletim sisteminde çalıştırmak için:
  1. Bir metin düzenleyici (vi, nano vb.) yardımıyla script bir dosyaya kopyalanır ve içindeki değişkenler düzenlenir
  2. Dosyaya çalıştırma yetkisi verilir: chmod +x purge_anomaly_detector_result_collection.sh
  3. Dosya çalıştırılır: ./purge_anomaly_detector_result_collection.sh
Uzun sürecek bir işlem yapacağınızı düşünüyorsanız komut sonuna boşluk bırakıp & karakterini ekleyerek arkaplanda çalışmasını sağlayabilirsiniz:
chmod +x /path/to/purge_anomaly_detector_result_collection.sh
./path/to/purge_anomaly_detector_result_collection.sh &
Bu işlem manuel yapılabileceği gibi belirli aralıklarda tekrarlanarak da yapılabilir. Tekrarlanarak yapılması için linux cronjob ayarlarına bu kaydın girilmesi gerekir.

CronJob Kullanımı

1

Cron Düzenleyicisini Açma

Terminalde aşağıdaki komutu çalıştırarak cron düzenleyicisi açılır:
crontab -e
2

Cron Job Ekleme

Açılan editöre, scripti ne sıklıkla çalıştırmak istediğinize göre bir satır ekleyin.Örneğin, her gün saat 23:59’da çalıştırmak için:
59 23 * * * /path/to/purge_anomaly_detector_result_collection.sh > /path/to/logfile.log 2>&1
3

Kaydetme

Eklediğiniz satırı kaydetmek için Esc tuşuna basıp :wq yazıp enter tuşuna basın.
Script içerisinde belirttiğiniz zaman dilimine göre veri temizleme işlemi gerçekleşecektir. Bu nedenle, script içerisindeki zaman diliminin ve cron ile belirlediğiniz tetikleme saatinin tutarlı olmasını sağlamak önemlidir.