audit_event koleksiyonu, kullanıcıların sistem üzerinde yaptığı değişikliklerin kayıt edildiği koleksiyondur. Gerçekleştirilen işlemler tarih, operasyon tipi, kullanıcı, nesne ID, nesne adı ve denetim objesinin tipi parametreleriyle kayıt altına alınır.


audit_event koleksiyonunda kişilerin Apinizer üzerinde yaptığı tüm değişiklikler tutulduğundan bu koleksiyona müdahale edilmesini kesinlikle önermemekteyiz.


Kayıt Temizleme Scripti:

Aşağıdaki script, MongoDB'deki audit_event 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 edilmiş olunur.

#!/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="audit_event"
TARGET_LOG_LOCATION=$(pwd)/purge_audit_event_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( {"auditEventDate":{"\$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
CODE

Zaman filtresi UTC'e göre yapılmaktadır.

Nasıl Çalışır:

  1. 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. 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. MONGO_COMMANDS değişkeni içerisinde, belirtilen saat öncesine kadar olan belgeleri bulmak ve silmek için MongoDB komutları tanımlanır.
  4. mongosh komutu ile MongoDB sunucusuna bağlanılır ve MONGO_COMMANDS değişkeninde tanımlanan komutlar çalıştırılır.
  5. İş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 zaman dilimine göre güncelleyebilirsiniz. Örneğin, son 3 gün içindeki belgeleri korumak ve geri kalanını silmek için TIME_VALUE="3D" olarak ayarlayabilirsiniz.
  • Scripti Linux tabanlı bir işletim sisteminde çalıştırmak için öncelikle bir metin düzenleyici (vi, nano vb.) yardımıyla script bir dosyaya kopyalanır ve içindeki değişkenler düzenlenir.
  • Dosyaya çalıştırma yetkisi verilir: chmod +x purge_audit_event_collection.sh
  • Dosya çalıştırılır: ./purge_audit_event_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: ./purge_audit_event_collection.sh &


chmod +x /path/to/purge_audit_event_collection.sh
./path/to/purge_audit_event_collection.sh &
CODE

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) Terminalde aşağıdaki komutu çalıştırarak cron düzenleyicisi açılır:

crontab -e
CODE


2) 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 aşağıdaki şekilde yazabilirsiniz:

59 23 * * * /path/to/purge_audit_event_collection.sh > /path/to/logfile.log 2>&1
CODE

Eklediğiniz satırı kaydetmek için Esc tuşuna basıp :wq yazıp enter tuşuna basın.


Hatırlatma

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.